Wie dekompiliert man DEX in Java-Quellcode?

Lesezeit: 8 Minuten

Wills Benutzeravatar
Werden

Wie kann man Android-DEX-Dateien (VM-Bytecode) in den entsprechenden Java-Quellcode dekompilieren?

  • 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


Es ist einfach

Holen Sie sich diese Tools:

  1. dex2jar um dex-Dateien in jar-Dateien zu übersetzen

  2. jd-gui um die Java-Dateien im JAR anzuzeigen

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 oder bash. 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 zB sudo chmod -R +x dex2jar-2.0

dex2jar-Dokumentation

Schritt 2:

Öffnen Sie das Glas in der JD-GUI

Die dekompilierte Quelle

  • +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

Benutzeravatar von Zach Lipton
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

Benutzeravatar von reflog
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

crifans Benutzeravatar
Krifan

Seit Dheeraj BhaskarDie Antwort von ist relativ alt, da viele Jahre vergangen sind.

Hier ist meine neueste (2019-Jahr) Antwort:

Hauptlogik

aus dex zu java sourcecodehat derzeit zwei Arten von Lösungen:

  • One Step: direkt konvertieren dex zu java sourcecode
  • Two Step: zuerst konvertieren dex zu jarzweiter Bekehrter jar zu java sourcecode

Lösung in einem Schritt: dex direkt zu java sourcecode

Werkzeug

Verfahren

  1. Download jadx-0.9.0.zipentpacken, hinein bin Ordner kann die Befehlszeile sehen jadx oder GUI-Version jadx-guidoppelklicken Sie, um die GUI-Version auszuführen: jadx-gui

2Rlas

  1. offen dex Datei

8A9k2

dann kann Java-Quellcode angezeigt werden:

Pojp8

  1. 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.shdann:

  • apk zu jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex zu jar: 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

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:

Nk62j

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: 安卓应用的安全和破解

Benutzeravatar von Alba Mendez
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.

Benutzeravatar von polym
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!

Benutzeravatar von ishandutta2007
ishandutta2007

Ich habe benutzt

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. enjarifizieren
  4. Apktool

Aber keines schlägt Googles eigene Tools

1)Android-Studio 2.x:
bauen> apk analysieren
Geben Sie hier die Bildbeschreibung ein

2)Android-Studio 3.0:
Profilieren oder APK debuggen
Geben Sie hier die Bildbeschreibung ein
Geben Sie hier die Bildbeschreibung ein

  • 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

1431560cookie-checkWie dekompiliert man DEX in Java-Quellcode?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy