it-swarm.com.de

Gibt es eine Möglichkeit, den Quellcode aus einer APK-Datei abzurufen?

Die Festplatte meines Laptops ist gerade abgestürzt und ich habe den gesamten Quellcode für eine App verloren, an der ich in den letzten zwei Monaten gearbeitet habe. Alles, was ich habe, ist die APK-Datei, die in meiner E-Mail ab dem Zeitpunkt gespeichert ist, an dem ich sie an einen Freund gesendet habe.

Gibt es eine Möglichkeit, meinen Quellcode aus dieser APK-Datei zu extrahieren?

1194
Frank Bozzo

Einfacher Weg: Verwenden Sie das Online-Tool http://www.javadecompilers.com/apk , laden Sie apk hoch und holen Sie sich den Quellcode.


Vorgehensweise zum Dekodieren von APK-Dateien, schrittweise Anleitung:

Schritt 1:

  1. Erstellen Sie einen neuen Ordner und kopieren Sie die APK-Datei, die Sie dekodieren möchten.

  2. Benennen Sie nun die Erweiterung dieser .apk-Datei in .Zip um (z. B. von filename.apk in filename.Zip umbenennen) und speichern Sie sie. Jetzt können Sie auf die classes.dex-Dateien usw. zugreifen. Zu diesem Zeitpunkt können Sie Drawables, jedoch keine XML- und Java-Dateien anzeigen. Fahren Sie also fort.

Schritt 2:

  1. Extrahieren Sie nun diese ZIP-Datei in denselben Ordner (oder NEUEN ORDNER).

  2. Laden Sie dex2jar herunter und extrahieren Sie es in denselben Ordner (oder NEUEN ORDNER).

  3. Verschieben Sie die Datei classes.dex in den Ordner dex2jar.

  4. Öffnen Sie nun die Eingabeaufforderung und wechseln Sie in das entsprechende Verzeichnis (oder in den NEUEN ORDNER). Dann schreibe d2j-dex2jar classes.dex (für Mac-Terminal oder Ubuntu schreibe ./d2j-dex2jar.sh classes.dex) und drücke Enter. Sie haben jetzt die Datei classes.dex.dex2jar im selben Ordner.

  5. Download Java decompiler , doppelklicken Sie auf jd-gui, klicken Sie auf open file und öffnen Sie die Datei classes.dex.dex2jar aus diesem Ordner: Jetzt erhalten Sie Klassendateien.

  6. Speichern Sie alle diese Klassendateien (klicken Sie in jd-gui auf Datei -> Alle Quellen speichern) unter dem Namen src. Zu diesem Zeitpunkt erhalten Sie die Quelle Java, aber die XML-Dateien sind immer noch nicht lesbar. Fahren Sie also fort.

Schritt 3:

Öffnen Sie jetzt einen weiteren neuen Ordner

  1. Tragen Sie die .apk-Datei ein, die Sie entschlüsseln möchten

  2. Laden Sie die neueste Version von apktool UND apktool install window herunter (beide können über denselben Link heruntergeladen werden) und platzieren Sie sie im selben Ordner

  3. Öffnen Sie ein Befehlsfenster

  4. Führen Sie nun den Befehl apktool if framework-res.apk aus (falls Sie ihn nicht haben hier abrufen ) und als nächstes

  5. apktool d myApp.apk (wobei myApp.apk den Dateinamen angibt, den Sie dekodieren möchten)

jetzt erhalten Sie einen Dateiordner in diesem Ordner und können die XML-Dateien des apk leicht lesen.

Schritt 4:

Es ist kein Schritt, kopieren Sie einfach den Inhalt beider Ordner (in diesem Fall beide neuen Ordner) in den einzelnen Ordner

und genieße den Quellcode ...

1501
Prankul Garg

Dies ist eine alternative Beschreibung - für den Fall, dass jemand mit der obigen Beschreibung nicht weiterkommt. Folge den Schritten:

  1. laden Sie apktool.bat (oder apktool für Linux) und apktool_<version>.jar von http: // ibotpeaches. github.io/Apktool/install/
  2. benennen Sie die JAR-Datei von oben in _apktool.jar_ um und speichern Sie beide Dateien im selben Ordner
  3. öffne eine DOS-Box (_cmd.exe_) und wechsle in diesen Ordner. Stellen Sie sicher, dass eine Java -Umgebung installiert ist (für Linux beachten Sie auch die Hinweise zu den erforderlichen Bibliotheken).
  4. Start: _apktool decode [apk file]_

    Zwischenergebnis : Ressourcendateien, _AndroidManifest.xml_

  5. entpacken Sie die APK-Datei mit einem Entpacker Ihrer Wahl

    Zwischenergebnis : _classes.dex_

  6. laden Sie _dex2jar-0.0.9.15.Zip_ von http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.Zip&can=2&q= herunter und extrahieren Sie es
  7. ziehen Sie _classes.dex_ auf _dex2jar.bat_ (oder geben Sie _<path_to>\dex2jar.bat classes.dex_ in ein DOS-Feld ein; verwenden Sie für Linux _dex2jar.sh_)

    Zwischenergebnis : _classes_dex2jar.jar_

  8. _classes_dex2jar.jar_ entpacken (kann optional sein, abhängig vom verwendeten Dekompiler)
  9. dekompilieren Sie Ihre Klassendateien (z. B. mit JD-GUI oder DJ Decompiler )

    Ergebnis : Quellcode

Hinweis: Pakete von Drittanbietern dürfen nicht dekompiliert werden. Dieses Handbuch dient ausschließlich zur Wiederherstellung des persönlichen Quellcodes aus einer APK-Datei. Schließlich wird der resultierende Code höchstwahrscheinlich verschleiert

119
Trinimon

Während Sie möglicherweise in der Lage sind, Ihre APK -Datei zu dekompilieren, werden Sie wahrscheinlich auf ein großes Problem stoßen:

der von Ihnen geschriebene Code wird nicht zurückgegeben. Stattdessen wird alles zurückgegeben, was der Compiler eingibt, mit Variablen, denen zufällige Namen gegeben wurden, sowie Funktionen, denen zufällige Namen gegeben wurden. Der Versuch, den Code zu dekompilieren und wiederherzustellen, kann erheblich länger dauern als der Versuch, von vorne zu beginnen.

Leider haben solche Dinge viele Projekte getötet.
Für die Zukunft empfehle ich dringend, ein Versionskontrollsystem zu erlernen, wie CVS, SVN und git etc .

und wie man es sichert.

108
Ryan Gooler

Es gibt auch eine neue Anwendung im Play Store , mit der es möglich ist, eine apk zu dekompilieren (auch Systemanwendungen) und den Quellcode direkt auf Ihrem Smartphone anzuzeigen. Es speichert die Dateien auf Ihrer SD-Karte, so dass Sie sie auch auf Ihrem Computer anzeigen können. Es erfordert keine root oder etwas anderes.

Einfach installieren und Spaß haben. Ich denke, das ist der einfachste Weg, eine App zu dekompilieren.

49
Cilenco

apktool ist das Beste, was Sie ausprobieren können. Ich habe etwas XML damit gespeichert, aber ehrlich gesagt weiß ich nicht, wie es mit dem .Java-Code funktionieren wird.

Ich würde Ihnen empfehlen, ein Code-Repository zu haben, auch wenn Sie der einzige Codierer sind. Ich habe Project Locker für meine eigenen Projekte verwendet. Es gibt Ihnen kostenlose SVN und Git Repos.

27
Macarse

In diesen beiden Artikeln wird beschrieben, wie Sie die Verwendung von apktool und dex2jar kombinieren, um eine APK -Datei zu erstellen und ein Eclipse-Projekt zu erstellen, das sie erstellen und ausführen kann.

http://blog.inyourbits.com/2012/11/extending-existing-Android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-Android-applications.html

Grundsätzlich Sie:

  1. Benutze apktool, um die Ressourcendateien aus dem apk zu entfernen
  2. Verwenden Sie dex2jar, um eine JAR-Datei abzurufen, die die Klassen in einem von Eclipse gewünschten Format enthält.
  3. Erstellen Sie ein Eclipse-Projekt, und verweisen Sie es auf die Ressourcendateien und die neue JAR-Datei
  4. Öffnen Sie die JAR-Datei mit einem Zip-Dienstprogramm und löschen Sie die vorhandenen Ressourcen
  5. Öffnen Sie die JAR-Datei mit JDGui, um den Quellcode anzuzeigen
  6. Nehmen Sie den gewünschten Quellcode aus JDGui, ordnen Sie ihn einer Klasse in Eclipse zu und ändern Sie ihn
  7. Löschen Sie diese Klasse aus der JAR-Datei (sodass Sie nicht dieselbe Klasse mehrmals definiert haben).
  8. Starte es.
22
Tom Hennen

apktool wird funktionieren. Sie müssen nicht einmal den Keystore kennen, um den Quellcode zu extrahieren (was ein bisschen beängstigend ist). Der Hauptnachteil ist, dass die Quelle im Smali-Format anstelle von Java dargestellt wird. Andere Dateien wie das Symbol und die Datei main.xml funktionieren jedoch einwandfrei, und es lohnt sich möglicherweise, diese zumindest wiederherzustellen. Letztendlich werden Sie höchstwahrscheinlich Ihren Java Code von Grund auf neu schreiben müssen.

Sie finden apktool hier . Laden Sie einfach apktool und den entsprechenden Hilfsprogramm (für Windows, Linux oder Mac OS) herunter. Ich empfehle ein Tool wie 7-Zip, um sie zu entpacken.

20
Ryan Berger

Hierfür gibt es verschiedene Möglichkeiten:

  1. Verwenden Sie die Funktion "Profile or Debug APK" in Android Studio 3.0.

    Sie können APKs in Android Studio öffnen und durchsuchen. Klassen werden in smali dekompiliert. Ressourcen werden nicht extrahiert und Dinge wie "Gehe zu Definition", "Alle Referenzen suchen" und Debugging funktionieren nicht ohne den Quellcode (Android Studio 3.0 Canary 9). Einige zusätzliche kleine Funktionen funktionieren möglicherweise mit smalidea .

    Android-studio

    select-file

    code

  2. Verwenden Sie jadx .

    Jadx dekompiliert den Code in einem bestimmten APK in Java Quelldateien.

    jdax-img

  3. Verwenden Sie apktool .

    Apktool ist ein Kommandozeilen-Tool, das Ressourcen extrahiert und Code für ein bestimmtes Apk in smali dekompiliert. Sie können auch mit apktool neu kompilieren. Hier ist ein Beispiel in Aktion:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    
12
0xcaff

Vielleicht ist es einfach, die Quelle zu sehen:

In Android Studio 2.3 Build -> Analyze APK -> Select the apk that you want to decompile.
Sie werden den Quellcode sehen.

Link für referenz:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

11
SKK

Unteres ONLINE Tool:

http://www.javadecompilers.com/apk

es macht ALLES mit einem Klick: dekompiliert . Java-Dateien + Ressourcen + xml (in einer .Zip-Datei) mit sehr gutem Dekompiler (jadx return Java Code an Stellen/Funktionen, an denen andere Kompilierungen Kommentare innerhalb von Funktionen zurückgeben, wie "nicht dekompilierbar" oder einige Android Assembler-/Maschinencode)

6

Diese Site https://www.apkdecompilers.com/ hat es automatisch gemacht.

Ich habe zuerst die Seite ausprobiert, die in der akzeptierten Antwort erwähnt wurde, aber das hat bei mir nicht funktioniert.

6
M. Usman Khan

Ich zeige Ihnen einen anderen Weg, um die . Apk -Dateien zu dekompilieren.

Sie können die ersten 2 Schritte von " prankul garg " folgen. Sie haben also noch weitere Möglichkeiten:

Schritt 3 ':

Laden Sie die "JD-GUI" herunter, die leicht zu finden ist. Öffnen Sie Ihre .jar-Datei in "jd-gui.exe". (Datei> Datei öffnen> 'Datei . Jar gefunden'). Nach diesem Vorgang können Sie alle Ressourcen in einer . Zip-Datei speichern.

Damit,

1. Sie müssen die Datei . Apk in . Zip umbenennen.

2. Sie müssen . Dex -Datei dekodieren (wenn Sie möchten, dekodieren Sie die . Apk Datei an dex2jar , das ist möglich)

3. Sie müssen eine .jar Datei mit JD-GUI dekodieren.

6
Franklin Hirata

Ich persönlich empfehle Show Java Android App , um den Quellcode zu erhalten. Sie können es aus dem Play Store oder von hier herunterladen

5
Codelover

Apktool für Reverse Engineering-Anwendungen von Drittanbietern, geschlossene, binäre Android Apps.

Es kann Ressourcen in nahezu ursprüngliche Form dekodieren und nach einigen Änderungen neu erstellen.

Es ermöglicht das schrittweise Debuggen von Smali-Code. Außerdem erleichtert es die Arbeit mit einer App, da projektähnliche Dateistrukturen und die Automatisierung einiger sich wiederholender Aufgaben, wie das Erstellen von Apk usw., vorhanden sind.

http://ibotpeaches.github.io/Apktool/

4

Sie können versuchen DexPatcher . Es kann sogar in Android Studio integriert werden. Es verwendet intern Apktool und Dex2Jar .
Sie können diese Tools auch unabhängig voneinander verwenden. Apktool dekompiliert apk und extrahiert .dex-Dateien, die mit Dex2Jar weiter in jar konvertiert werden können. Jar kann mit JD-GUI dekompiliert werden. Sie können den Java Code mit Hilfe dieses Tools anzeigen. Obwohl die Ähnlichkeit des dekompilierten Codes mit dem tatsächlichen Code nicht garantiert werden kann. Es gibt einige fortgeschrittene Code-Verschleierung Tools auf dem Markt, die den Code durcheinander bringen, um das Dekompilieren/Verstehen zu erschweren. z.B. Proguard

apktool ist der richtige Weg. Es gibt auch einen Online-Apktool-Dienst: http://www.javadecompilers.com/apktool

Einige Einschränkungen bestehen offensichtlich aufgrund des Service „Online-Charakters“: Sie können Assets und die Manifest-Datei extrahieren und recherchieren, es ist jedoch derzeit nicht möglich, die Anwendung neu zu kompilieren.

Dies ist jedoch eine einfache Möglichkeit, die Anwendung Android zu öffnen.

3
Andrew Rukin

Android Studio bietet Ihnen die Möglichkeit, jede apk-Datei zu analysieren.

1 - Wähle im Erstellungsmenü die Option "APK analysieren" und wähle eine APK-Datei aus. 2 - Dadurch erhalten Sie die classes.dex-Datei und andere Dateien. 3 - Klicken Sie auf classes.dex, um eine Liste der Ordner, Pakete, Bibliotheken und Dateien anzuzeigen. 4 - In den Studioeinstellungen und Android wird ein Plugin namens "Dex to Jar" installiert. 5 - Klicken Sie auf eine beliebige Aktivitätsdatei Ihres extrahierten Projekts und wählen Sie "Dex to Jar" aus dem Build-Menü.

Dadurch erhalten Sie den tatsächlichen Code Ihrer Java -Datei.

Prost.

2
Rohit Patil

Der einfachste Weg ist die Verwendung von Apk OneClick Decompiler. Dies ist ein Toolpaket zum Dekompilieren und Disassemblieren von APKs (Android-Pakete).

FEATURES

  • Alle Funktionen sind in das Kontextmenü von Windows integriert.
  • Dekompilieren Sie APK-Klassen in Java Quellcodes.
  • Zerlegen Sie APK, um den Code zu verkleinern und die Ressourcen zu entschlüsseln.
  • Installieren Sie APK zum Telefonieren mit der rechten Maustaste.
  • Kompilieren Sie APK neu, nachdem Sie den SMALI-Code und/oder die Ressourcen bearbeitet haben. Während des Neukompilierens:
  • Optimieren Sie PNG-Bilder
  • Sign apks
  • Zipalign

ANFORDERUNGEN

Java Runtime Environment (JRE) muss installiert sein.

Sie können es von diesem Link herunterladen Apk OneClick Decompiler

Geniesse es.

1
Masoud Mokhtari

Dafür gibt es eine App. In der Regel sind es nur ein paar Klicks und Sie sind fertig. https://github.com/Nuvolect/DeepDive-Android

  1. Wählen Sie Apps aus, und wählen Sie unter "Installierte Apps" Ihre App aus. Wenn es nicht da ist, können Sie die APK laden.
  2. Wähle "APK extrahieren"
  3. Wähle "APK auspacken"
  4. Wählen Sie "Decompile with Jadx". Dies kann je nach Geschwindigkeit Ihres Geräts einige Sekunden oder einige Minuten dauern

Danach können Sie den Quellcode durchsuchen, ihn mit elFinder auf einen anderen Computer herunterladen oder ihn mit Lucene durchsuchen.

Neben Jadx gibt es CFR- und Fernflower-Dekompilierer.

1
MobileMateo

Ich fand das folgende als die einfachste Methode:

  1. Benenne deine app.apk in app.Zip um (ändere die Erweiterung von apk in Zip)
  2. Extrahieren Sie die Zip-Datei in einen Ordner
  3. Verwenden Sie das Tool JADX , um den Quellcode zu lesen, der in der Datei classes.dex enthalten ist.
1
Masood Anwar

basierend auf Ihrem Zustand, wenn Ihr Android apk:

Bedingung 1: NICHT härten (von Tencent Legu/Qihoo 360/...)

Choice1: Online-Service nutzen

sowie:

mit www.javadecompilers.com

gehe zu:

zum automatischen Dekodieren von apk zu Java Quellcode

schritte:

upload APK-Datei + Klicken Sie auf Run + Warten Sie einige Zeit + Klicken Sie auf Download, um Zip abzurufen + zu entpacken ->

sources/com/{yourCompanyName}/{yourProjectName}

ist Ihr erwarteter Java Quellcode

Choice2: dekompilieren/knacken Sie selbst

verwende ein verwandtes Tool, um selbst zu dekompilieren/zu knacken:

benutze jadx/jadx-gui konvertiere apk in Java sourcecode

download jadx-0.9.0.Zip dann entpacken um bin/jadx zu bekommen, dann:

  • befehlszeilenmodus:
    • in terminal run: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • der Ausgabeordner zeigt decodierte sources und resources
      • sources/com/{yourCompanyName}/{yourProjectName} ist dein erwarteter Java sourcecode
  • GUI-Modus
    • doppelklicken, um jadx-0.9.0/bin/jadx-gui auszuführen (Linux jadx-gui.sh/Windows jadx-gui.bat)
    • öffnen Sie die Datei apk
    • es wird automatisch dekodiert -> sehen Sie Ihren erwarteten Java Quellcode
    • save all oder save as Gradle project

z.B:

Bedingung 2: härten (von Tencent Legu/Qihoo 360/...)

die Hauptmethode von 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to Java src

ausführliche Erklärung:

Schritt 1: apk/app to dex

verwenden Sie das Tool (FDex2/DumpDex), um eine (eine oder mehrere) dex -Datei aus der laufenden App auszugeben

schritte:

umgebung vorbereiten

entleere dex aus der laufenden App

  • starte FDex2 und klicke dann auf deinen apk-namen, um später dex zu erfassen/auszulösen

  • (im Telefon/Emulator) starte deine App
  • finde und kopiere den Dump aus ganzen apk-Ressourcen in /data/data/com/yourCompanyName/yourProjectName
    • in seinem Stammordner findet normalerweise mehrere dex -Dateien

Schritt 2: dex to jar

verwenden Sie das Tool (dex2jar), um die dex -Datei (die spezifische, App-Logik enthaltende) in die jar -Datei zu konvertieren

download dex2jar got dex-tools-2.1-SNAPSHOT.Zip , entpacke got dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh, dann

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

z.B:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

Schritt 3: jar to Java src

verwenden Sie eines der folgenden Tools:

jar in Java src konvertieren

für von jar nach Java src konvertierenden Effekt:

Jadx> Procyon> CRF >> JD-GUI

daher empfehlen wir die Verwendung von: Jadx/jadx-gui

schritte:

  • doppelklick um jadx-gui auszuführen
  • öffnen Sie die Datei dex
  • File -> save all

z.B:

exportiert Java src:


Eine ausführlichere Erklärung finden Sie in meinem Online-eBook Chinesisch Tutorial:

0
crifan