Wie kann man Android DEX (VM Bytecode) Dateien in entsprechenden Java Quellcode dekompilieren?
Antworten
Zu viele Anzeigen?Es ist ganz einfach
Holen Sie sich diese Werkzeuge:
Der Quellcode ist recht gut lesbar, da dex2jar einige Optimierungen vornimmt.
Verfahren:
Und hier ist das Verfahren zur Dekompilierung:
Schritt 1:
Konvertieren von classes.dex in test_apk-debug.apk in test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Anmerkung 1: Auf den Windows-Rechnern werden alle
.sh
Skripte werden ersetzt durch.bat
SkripteAnmerkung 2: Unter Linux/Mac sollten Sie Folgendes nicht vergessen
sh
obash
. Der vollständige Befehl sollte lauten:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Anmerkung 3: Denken Sie auch daran, die Ausführungserlaubnis zu
dex2jar-X.X
Verzeichnis z.B.sudo chmod -R +x dex2jar-2.0
Schritt 2:
Öffnen Sie die Jar-Datei in JD-GUI
Um es etwas zu verdeutlichen: Es gibt zwei Hauptwege, die Sie hier einschlagen können, je nachdem, was Sie erreichen wollen:
Dekompilieren Sie den Dalvik-Bytecode (dex) in lesbaren Java-Quellcode. Sie können dies einfach mit dex2jar y jd-gui wie Fred erwähnt hat. Der resultierende Quellcode ist nützlich, um die Funktionalität einer Anwendung zu lesen und zu verstehen, wird aber wahrscheinlich keinen 100%ig brauchbaren Code ergeben. Mit anderen Worten: Sie können den Quellcode lesen, aber Sie können ihn nicht wirklich ändern und neu verpacken. Wenn der Quellcode mit proguard verschleiert wurde, ist der resultierende Quellcode wesentlich schwerer zu entwirren.
Die andere wichtige Alternative ist die Disassemblierung des Bytecodes in smali , eine Assemblersprache, die genau für diesen Zweck entwickelt wurde. Ich habe herausgefunden, dass es am einfachsten ist, dies mit apktool . Wenn Sie apktool installiert haben, können Sie es einfach auf eine apk-Datei richten und Sie erhalten eine smali-Datei für jede in der Anwendung enthaltene Klasse zurück. Sie können die smali lesen und modifizieren oder sogar Klassen komplett ersetzen, indem Sie smali aus neuen Java-Quellen generieren (dazu könnten Sie Ihre .java-Quellen mit javac in .class-Dateien kompilieren, dann Ihre .class-Dateien mit Androids dx-Compiler in .dex-Dateien konvertieren und dann baksmali (smali disassembler) verwenden, um die .dex- in .smali-Dateien zu konvertieren, wie in diese Frage . Vielleicht gibt es hier eine Abkürzung). Sobald Sie fertig sind, können Sie die apk einfach wieder mit apktool verpacken. Beachten Sie, dass apktool die resultierende apk nicht signiert, so dass Sie sich darum kümmern müssen genau wie jede andere Android-Anwendung .
Wenn Sie sich für die Smali-Methode entscheiden, sollten Sie Folgendes versuchen APK-Studio eine IDE, die einige der oben genannten Schritte automatisiert, um Sie bei der Dekompilierung und Neukompilierung einer apk und ihrer Installation auf einem Gerät zu unterstützen.
Kurz gesagt, Sie haben die Wahl zwischen der Dekompilierung in Java, die besser lesbar, aber wahrscheinlich irreversibel ist, und der Disassemblierung in Smali, die schwieriger zu lesen, aber viel flexibler ist, wenn es darum geht, Änderungen vorzunehmen und eine modifizierte Anwendung neu zu verpacken. Welchen Ansatz Sie wählen, hängt davon ab, was Sie erreichen wollen.
Schließlich ist der Vorschlag der wagen ist ebenfalls erwähnenswert. Es ist ein Retargeting-Tool zur Konvertierung von .dex- und .apk-Dateien in Java-.class-Dateien, so dass sie mit typischen statischen Java-Analysetools analysiert werden können.
Ich würde sogar empfehlen, hierher zu gehen: https://github.com/JesusFreke/smali
Es bietet BAKSMALI, ein hervorragendes Reverse-Engineering-Tool für DEX-Dateien. Es wurde von JesusFreke entwickelt, dem Mann, der die berühmten ROMs für Android erstellt hat.
Seit Dheeraj Bhaskar
Die Antwort ist relativ alt und liegt schon viele Jahre zurück.
Hier ist meine letzte Antwort (Jahr 2019):
Hauptlogik
de dex
a java sourcecode
gibt es derzeit zwei Arten von Lösungen:
One Step
: direkt konvertierendex
ajava sourcecode
Two Step
: erster Konvertitdex
ajar
, zweiter Konvertitjar
ajava sourcecode
Eine Lösung in einem Schritt: dex
direkt an java sourcecode
Werkzeuge
Prozess
- herunterladen jadx-0.9.0.zip entpacken Sie es, in
bin
Ordner kann Befehlszeile sehenjadx
oder GUI-Versionjadx-gui
, Doppelklick zur Ausführung der GUI-Version:jadx-gui
- öffnen
dex
Datei
kann dann den Java-Quellcode anzeigen:
File
->save as gradle project
dann Java-Quellcode erhalten:
Zweistufige Lösung
Schritt 1: dex
a jar
Werkzeuge
Prozess
herunterladen dex2jar zip , entpacken hat d2j-dex2jar.sh
, dann:
apk
ajar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
ajar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
Beispiel:
v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
Schritt 2: jar
a java sourcecode
Werkzeuge
- jd-gui : am beliebtesten, aber
many
Code wird dekompiliert Fehler - CRF : beliebt,
minor
Code wird dekompiliert Fehler - Procyon : beliebt,
no
Code-Dekompilierungsfehler- GUI-Tool basierend auf
Procyon
- GUI-Tool basierend auf
- andere
Prozess
hier Demo Procyon
jar in Java-Quellcode konvertieren:
herunterladen procyon-decompiler-0.5.34.jar
dann unter Verwendung der Syntax:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
Beispiel:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
mit Editor VSCode um exportierten Quellcode zu öffnen, sehen wie folgt aus:
Schlussfolgerung
Korrektheit der Umwandlung : Jadx
> Procyon
> CRF
> JD-GUI
Empfohlene Verwendung: (Einschrittlösungen) Jadx
Ausführlichere Erläuterungen finden Sie in meinem Online Chinesisch ebook:
Eine vollständigere Version von fred 's Antwort :
Manueller Weg
Zuerst brauchen Sie ein Werkzeug, um Auszug alle (kompilierten) Klassen auf dem DEX in ein JAR.
Es gibt eine, die heißt dex2jar die von einem chinesischen Studenten erstellt wurde.
Dann können Sie jd-gui a dekompilieren die Klassen in der JAR-Datei in Quellcode umwandeln.
Der resultierende Quelltext sollte recht gut lesbar sein, da dex2jar einige Optimierungen vornimmt.
Automatischer Weg
Sie können verwenden APKTool . Sie wird automatisch alle Klassen extrahieren ( .dex
), Ressourcen ( .asrc
), dann wandelt es binäres XML a für Menschen lesbares XML und sie wird auch demontieren. die Klassen für Sie.
Die Disassemblierung wird immer robuster sein als die Dekompilierung, insbesondere mit
JARs mit Pro Guard verschleiert!
Sagen Sie APKTool einfach, dass es dekodieren die APK in ein Verzeichnis, dann ändern. was Sie wollen,
und schließlich verschlüsseln zurück zu einer APK. Das war's schon.
Das ist wichtig: APKTool demontiert . Das tut es nicht dekompilieren .
Der generierte Code ist kein Java-Quellcode.
Aber Sie sollten in der Lage sein, sie zu lesen und sogar zu bearbeiten, wenn Sie mit den jasmin .
Wenn Sie den Java-Quellcode benötigen, gehen Sie bitte über die Manueller Weg .
- See previous answers
- Weitere Antworten anzeigen
0 Stimmen
Schauen Sie mal aquí . Von dort erhalten Sie mögliche Hinweise, um weiterzumachen.
0 Stimmen
Aktualisierte Informationen sind im Coders Hub Blog verfügbar: coders-hub.com/2013/04/wie-konvertiere-apk-datei-in-quelltext.html
0 Stimmen
Wenn Sie Geld haben, kaufen Sie jeb verwenden, ansonsten jadx siehe aquí pourquoi
0 Stimmen
Es gibt ein neues plattformübergreifendes (Java) und quelloffenes Tool, mit dem Sie das tun können: bytecodeviewer : stackoverflow.com/a/36557898/795245