Wie kann man Android-DEX-Dateien (VM-Bytecode) in den entsprechenden Java-Quellcode dekompilieren?
Wie dekompiliert man DEX in Java-Quellcode?
Werden
Es ist einfach
Holen Sie sich diese Tools:
Der Quellcode ist gut lesbar, da dex2jar einige Optimierungen vornimmt.
Verfahren:
Und hier ist das Verfahren zum Dekompilieren:
Schritt 1:
Konvertieren Sie die Datei „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: In den Windows-Maschinen alle
.sh
Skripte werden ersetzt durch.bat
Skripte
Anmerkung 2: Unter Linux/Mac nicht vergessen
sh
oderbash
. Der vollständige Befehl sollte lauten:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Notiz 3: Denken Sie auch daran, die Ausführungsberechtigung hinzuzufügen
dex2jar-X.X
Verzeichnis zBsudo chmod -R +x dex2jar-2.0
Schritt 2:
Öffnen Sie das Glas in der JD-GUI
-
+1. Ich habe sowohl Baksmali als auch Dex2jar ausprobiert. Dex2Jar+JD-Gui gewinnt, weil es Ihnen perfekt lesbaren Quellcode für die meisten .dex-Dateien liefert.
– Jonathan Dumaine
22. Januar 2011 um 5:58 Uhr
-
Hallo, würden Sie bitte mitteilen, wie Sie vorgehen? Ich werde Ihnen sehr dankbar sein.
– Arslan Anwar
22. März 2011 um 12:45 Uhr
-
Der obige Satz hat eine Glocke geläutet – es scheint ein Halbzitat von hier zu sein: geeknizer.com/decompile-reverse-engineer-android-apk (oder umgekehrt?). Die verlinkten Artikel erklären kurz die oben genannten Tools sowie Smali und APKTool.
– AgentKnopf
19. Januar 2012 um 9:38 Uhr
-
@JonathanDumaine das kommt darauf an. Wenn die JARs verschleiert sind und Sie kleine Änderungen vornehmen möchten, ist Backsmali der einzige Weg. Bonus! Mit APKTool erhalten Sie auch alle XMLs, Bilder und andere Ressourcen zurück. Siehe meine Antwort.
– Alba Mendez
30. August 2012 um 11:15 Uhr
-
@JonathanDumaine Ich stimme jmendeth zu, apktool ist auch der richtige Weg, wenn Sie Ihre apk dekompilieren, ändern und dann neu kompilieren möchten. Bei Verwendung von dex2jar und jd-gui sind die Quellen wirklich lesbar, aber Sie können nicht ohne Fehler neu kompilieren!
– dunkler Erbe
10. September 2012 um 10:13 Uhr
Zach Lipton
Zur Verdeutlichung gibt es zwei Hauptwege, die Sie hier einschlagen können, je nachdem, was Sie erreichen möchten:
Dekompilieren Sie den Dalvik-Bytecode (dex) in lesbaren Java-Quelltext. Das können Sie ganz einfach mit dex2jar und jd-gui, wie Fred erwähnt. Die resultierende Quelle ist nützlich, um die Funktionalität einer App zu lesen und zu verstehen, wird aber wahrscheinlich keinen zu 100 % verwendbaren Code erzeugen. Mit anderen Worten, Sie können die Quelle lesen, aber Sie können sie nicht wirklich ändern und neu packen. Beachten Sie, dass der resultierende Quellcode wesentlich schwieriger zu entwirren ist, wenn die Quelle mit proguard verschleiert wurde.
Die andere wichtige Alternative besteht darin, den Bytecode zu zerlegen klein, eine Assemblersprache, die genau für diesen Zweck entwickelt wurde. Ich habe festgestellt, dass der einfachste Weg, dies zu tun, mit ist apktool. Sobald Sie apktool installiert haben, können Sie es einfach auf eine apk-Datei verweisen, und Sie erhalten eine kleine Datei für jede in der Anwendung enthaltene Klasse zurück. Sie können die Smali lesen und ändern oder sogar Klassen vollständig ersetzen, indem Sie Smali aus einer neuen Java-Quelle generieren (dazu könnten Sie Ihre .java-Quelle mit Javac in .class-Dateien kompilieren und dann Ihre .class-Dateien mit Android in .dex-Dateien konvertieren dx-Compiler, und verwenden Sie dann baksmali (smali-Disassembler), um die .dex- in .smali-Dateien zu konvertieren, wie in dieser Frage beschrieben. Möglicherweise gibt es hier eine Verknüpfung). Sobald Sie fertig sind, können Sie die apk einfach wieder mit apktool packen. Beachten Sie, dass apktool das resultierende apk nicht signiert, also müssen Sie sich darum kümmern genau wie jede andere Android-Anwendung.
Wenn Sie den kleinen Weg gehen, sollten Sie es vielleicht versuchen APK-Studioeine IDE, die einige der oben genannten Schritte automatisiert, um Sie beim Dekompilieren und erneuten Kompilieren einer apk und deren Installation auf einem Gerät zu unterstützen.
Kurz gesagt, Sie haben so ziemlich die Wahl, entweder in Java zu dekompilieren, was besser lesbar, aber wahrscheinlich irreversibel ist, oder in Smali zu disassemblieren, was schwieriger zu lesen, aber viel flexibler ist, um Änderungen vorzunehmen und eine modifizierte App neu zu verpacken. Welchen Ansatz Sie wählen, hängt davon ab, was Sie erreichen möchten.
Abschließend der Vorschlag von Wagen ist auch zu beachten. Es ist ein Retargeting-Tool zum Konvertieren von .dex- und .apk-Dateien in Java-.class-Dateien, sodass sie mit typischen statischen Java-Analysetools analysiert werden können.
-
Probieren Sie APK Studio aus, es war eine erstaunliche Wahl
– Sideeg MoHammed
9. November 2020 um 11:28 Uhr
neu loggen
Ich würde wirklich 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 gemacht, dem Typen, der die berühmten ROMs für Android erstellt hat.
-
smali ist eine Assembler-ähnliche Sprache, die auf Dalvik IL basiert, sie kann nicht direkt in Java übersetzt werden.
– neu protokollieren
15. November 2010 um 12:39 Uhr
-
@endryha Es gibt keine Tools, die dazu in der Lage sind. Siehe diese Frage für weitere Informationen.
– Alba Mendez
9. Januar 2012 um 18:03 Uhr
-
Code, Code, Code, … Warum nur Code? Wenn Sie APKTool verwenden, erhalten Sie alles der Rücken! Und es ist so einfach wie
./apktool d myprogram.apk
. Siehe meine Antwort.– Alba Mendez
30. August 2012 um 11:14 Uhr
Krifan
Seit Dheeraj Bhaskar
Die Antwort von ist relativ alt, da viele Jahre vergangen sind.
Hier ist meine neueste (2019-Jahr) Antwort:
Hauptlogik
aus dex
zu java sourcecode
hat derzeit zwei Arten von Lösungen:
One Step
: direkt konvertierendex
zujava sourcecode
Two Step
: zuerst konvertierendex
zujar
zweiter Bekehrterjar
zujava sourcecode
Lösung in einem Schritt: dex
direkt zu java sourcecode
Werkzeug
Verfahren
- Download jadx-0.9.0.zipentpacken, hinein
bin
Ordner kann die Befehlszeile sehenjadx
oder GUI-Versionjadx-gui
doppelklicken Sie, um die GUI-Version auszuführen:jadx-gui
- offen
dex
Datei
dann kann Java-Quellcode angezeigt werden:
File
->save as gradle project
dann bekam Java-Quellcode:
Zweistufige Lösung
Schritt 1: dex
zu jar
Werkzeug
Verfahren
Download dex2jar-Zipentpacken bekam d2j-dex2jar.sh
dann:
apk
zujar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
zujar
: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
zu java sourcecode
Werkzeug
- jd-gui: am beliebtesten, aber
many
Code wird Fehler dekompilieren - CRF: Beliebt,
minor
Code wird Fehler dekompilieren - Procyon: Beliebt,
no
Fehler beim Dekompilieren des Codes- GUI-Tool basierend auf
Procyon
- GUI-Tool basierend auf
- Andere
Verfahren
hier demonstrieren Procyon
Konvertieren Sie JAR in Java-Quellcode:
Download procyon-decompiler-0.5.34.jar
dann mit 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
Editor verwenden VSCode Um den exportierten Quellcode zu öffnen, sehen Sie wie folgt aus:
Fazit
Konvertierungskorrektheit: Jadx
> Procyon
> CRF
> JD-GUI
Empfohlene Verwendung: (Ein-Schritt-Lösungen) Jadx
Für eine detailliertere Erklärung, beziehen Sie sich bitte auf mein Online Chinesisch E-Book: 安卓应用的安全和破解
Alba Mendez
Eine vollständigere Version von Freds Antwort:
Manueller Weg
Zuerst braucht man ein Werkzeug dazu Extrakt alle (kompilierten) Klassen auf dem DEX zu einem JAR.
Da ist einer angerufen dex2jardie von einem chinesischen Studenten hergestellt wird.
Dann können Sie verwenden jd-gui zu dekompilieren die Klassen im JAR zum Quellcode.
Die resultierende Quelle sollte gut lesbar sein, da dex2jar einige Optimierungen anwendet.
Automatischer Weg
Sie können verwenden APKTool. Es wird automatisch alle Klassen extrahieren (.dex
), Ressourcen (.asrc
), dann wird es konvertiert binäres XML zu menschenlesbares XMLund das wird es auch zerlegen die Klassen für Sie.
Die Disassemblierung ist immer robuster als die Dekompilierung, besonders mit
Mit Pro Guard verschleierte JARs!
Sagen Sie es einfach APKTool dekodieren die APK dann in ein Verzeichnis ändern was du willst,
und schlussendlich kodieren es zurück zu einer APK. Das ist alles.
Wichtig: APKTool zerlegt. Das tut es nicht dekompilieren.
Der generierte Code ist kein Java-Quellcode.
Aber Sie sollten in der Lage sein, es zu lesen und sogar zu bearbeiten, wenn Sie damit vertraut sind Jasmin.
Wenn Sie Java-Quellcode möchten, gehen Sie bitte über die Manueller Weg.
Polym
Manchmal erhalten Sie bei der Verwendung fehlerhaften Code dex2jar
/apktool
, vor allem in Schleifen. Um dies zu vermeiden, verwenden Sie jadxdas Dalvik-Bytecode in Java-Quellcode dekompiliert, ohne eine .jar
/.class
Datei zuerst als dex2jar
tut (apktool verwendet dex2jar, denke ich). Es ist auch Open Source und in aktiver Entwicklung. Es hat sogar eine GUI, für GUI-Fanatiker. Versuch es!
ishandutta2007
Ich habe benutzt
- dex2jar + jd-gui
- javadecompilers.com
- enjarifizieren
- Apktool
Aber keines schlägt Googles eigene Tools
-
Plus eins für Enjarify. Nach meiner persönlichen Erfahrung hat es sich im Vergleich zu d2j als besser erwiesen
– qre0ct
25. September 2018 um 4:04 Uhr
Guck mal hier. Von dort erhalten Sie mögliche Hinweise, um weiterzumachen.
– Kevin Boyd
9. August 2009 um 6:47 Uhr
Aktualisierte Informationen sind im Coders Hub-Blog verfügbar: coders-hub.com/2013/04/how-to-convert-apk-file-into-source.html
– Md Mohsin
23. September 2015 um 7:31 Uhr
Wenn du Geld hast, kaufe jebsonst verwenden jadxsiehe hier warum
– Polym
3. November 2015 um 7:42 Uhr
Es gibt ein neues plattformübergreifendes (Java) und Open-Source-Tool, mit dem Sie dies tun können. Schauen Sie sich einfach bytecodeviewer an: stackoverflow.com/a/36557898/795245
– Gino
11. April 2016 um 19:48 Uhr