Dex -Dex in Java Sourcecode zerlegen
-
12-09-2019 - |
Frage
Wie kann man Android Dex (VM -Bytecode) -Dateien in entsprechende Java -SourceCode dekompilen?
Lösung
Es ist einfach
Holen Sie sich diese Werkzeuge:
1) Dex2jar Um Dex -Dateien in JAR -Dateien zu übersetzen
2) JD-Gui Um die Java -Dateien im Glas anzuzeigen
Der Quellcode ist ziemlich lesbar, da Dex2jar einige Optimierungen macht.
Verfahren:
Und hier ist die Prozedur, wie man zerlegt wird:
Schritt 1:
Konvertieren Sie 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
Notiz: In den Windows -Maschinen alle
.sh
Skripte werden durch ersetzt durch.bat
Skripte
Schritt 2:
Öffne das Glas in JD-Gui
Andere Tipps
Um etwas zu klären, gibt es zwei wichtige Wege, die Sie hier aufnehmen könnten, je nachdem, was Sie erreichen möchten:
Dekompilieren Sie die Dalvik -Bytecode (DEX) in eine lesbare Java -Quelle. Sie können dies 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 jedoch wahrscheinlich nicht 100% nutzbare Code erzeugen. Mit anderen Worten, Sie können die Quelle lesen, aber Sie können sie nicht wirklich ändern und neu verpacken. Beachten Sie, dass der resultierende Quellcode, wenn die Quelle mit Proguard verschleiert wurde, wesentlich schwieriger zu entwirren ist.
Die andere Hauptalternative besteht darin, den Bytecode zu zerlegen, um SMALI, eine Versammlungssprache, die genau für diesen Zweck entwickelt wurde. Ich habe festgestellt, dass der einfachste Weg, dies zu tun Apktool. Sobald Sie apktool installiert haben, können Sie sie einfach auf eine APK -Datei verweisen und für jede in der Anwendung enthaltene Klasse eine Smali -Datei zurückerhalten. Sie können die Smali lesen und ändern oder sogar Klassen ersetzen, indem Sie Smali aus der neuen Java -Quelle generieren (dazu können Sie Ihre .java -Quelle in .Classdateien mit Javac kompilieren und dann Ihre .class -Dateien mit Android -Dateien konvertieren. DX -Compiler und dann Baksmali (Smali Disassembler), um den .dex in .smali -Dateien zu konvertieren, wie in beschrieben in beschrieben diese Frage. Es könnte eine Abkürzung hier geben). Sobald Sie fertig sind, können Sie die APK leicht wieder mit apktool wieder verpacken. Beachten Sie, dass Apktool die resultierende APK nicht unterzeichnet, daher müssen Sie sich darum kümmern Genau wie bei jeder anderen Android -Anwendung.
Wenn Sie die SMALI -Route gehen, möchten Sie vielleicht versuchen APK Studio, Eine IDE, die einige der oben genannten Schritte automatisiert, um Sie beim Zerlegen und Neukompilieren einer APK zu unterstützen und auf einem Gerät zu installieren.
Kurz gesagt, Ihre Entscheidungen sind so ziemlich entweder, sich in Java zu dekompilieren, was lesbarer, aber wahrscheinlich irreversibler ist, oder um Smali zu zerlegen, was schwieriger zu lesen ist, aber viel flexibler ist, um Änderungen vorzunehmen und eine modifizierte App neu zu verpacken. Welcher Ansatz Sie wählen, hängt davon ab, was Sie erreichen möchten.
Zuletzt der Vorschlag von Wagen ist auch bemerkenswert. Es handelt sich um ein Retargeting -Tool zum Konvertieren von .dex- und .APK -Dateien in Java .class -Dateien, damit sie mit typischen Tools für statische Analyse von Java analysiert werden können.
Ich würde tatsächlich empfehlen, hier zu gehen:https://github.com/jesusfreke/smali
Es bietet Baksmali, ein ausgezeichnetes Tool für Dex-Dateien. Es wurde von Jesusfreke gemacht, dem Typ, der die renommierten Roms für Android geschaffen hat.
Eine vollständigere Version von Fred's Antworten:
Manueller Weg
Zuerst brauchen Sie ein Werkzeug Extrakt Alle (kompilierten) Klassen auf dem Dex zu einem Glas.
Es heißt einen namens Dex2jar, was von einem chinesischen Studenten gemacht wird.
Dann können Sie verwenden JD-Gui zu dekompilieren Die Klassen auf dem Glas zum Quellencode.
Die resultierende Quelle sollte ziemlich 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 konvertieren Binärer XML zu Humanlesbares XML, und es wird auch Dissemble die Klassen für Sie.
Die Demontage wird immer robuster sein als sich zu zerlegen, besonders mit
Gläser verschleiert sich mit Pro Guard!
Sagen Sie einfach Apktool zu dekodieren die apk in ein Verzeichnis dann ändern Was du willst,
und schlussendlich kodieren es zurück zu einer apk. Das ist alles.
Wichtig: Apktool Dissembles. Es tut es nicht dekompilieren.
Der generierte Code wird keine Java -Quelle sein.
Aber Sie sollten es lesen und sogar bearbeiten können, wenn Sie mit vertraut sind Jasmin.
Wenn Sie Java Source wollen, gehen Sie bitte über die Manueller Weg.
Manchmal erhalten Sie einen kaputten Code, wenn Sie verwendet werden dex2jar
/apktool
, vor allem in Schleifen. Um dies zu vermeiden, verwenden Sie Jadx, die Dalvik -Bytecode in Java -Quellcode zerlegt, ohne ein zu erstellen .jar
/.class
Datei zuerst als dex2jar
macht (apktool verwendet Dex2jar, denke ich). Es ist auch Open-Source und in aktiver Entwicklung. Es hat sogar eine GUI für Gui-Fanatics. Versuch es!
Da niemand dies erwähnt hat, gibt es noch ein Tool: Ded Homepage
Installieren Sie die Anleitungen und einige Erklärungen: Installation.
Es wurde in einer ziemlich interessanten Studie über die Sicherheit von Top -Markt -Apps verwendet (nicht wirklich verwandt, nur wenn Sie neugierig sind): Eine Umfrage zur Sicherheit von Android -Anwendungen
Sobald Sie Ihre APK -Datei heruntergeladen haben, müssen Sie die folgenden Schritte ausführen, um einen bearbeitbaren Java -Code/Dokument zu erhalten.
- Konvertieren Sie Ihre APK -Datei in ZIP (während Sie Ihren Download nicht mit der Option "Speichern" speichern.
- Extrahieren Sie die ZIP -Datei, dort finden Sie einen fileName.dex. Jetzt müssen wir Dex -> .Class konvertieren
- Dazu brauchen Sie "Dex2jar" (Sie können es herunterladen http://code.google.com/p/dex2jar/ , nach extrahierter, in der Eingabeaufforderung, die Sie erwähnen müssen, wie, D: dex2jar-0.09> dex2jar einfilename.dex (Denken Sie daran, dass Ihr irgendeiner Dateiname.
- Laden Sie JAD von http://www.viralpatel.net/blogs/download/jad/jad.zip und extrahieren Sie es. Sobald Sie extrahiert wurden, können Sie zwei Dateien wie "jad.exe" und "readme.txt" sehen (manchmal "jad.txt" kann dort anstelle von "jad.exe" sein, also benennen Sie die Erweiterung einfach um.
- Schließlich müssen Sie in der Eingabeaufforderung wie möglich erwähnen D: jad> jad -sjava yourFileName.class Es wird Ihre Klassendatei in das bearbeitbare Java -Dokument analysieren.
Android Reverse Engineering ist möglich . Befolgen Sie diese Schritte, um eine .java -Datei aus der APK -Datei zu erhalten.
Schritt 1 . Verwenden von Dex2jar
- Generieren Sie die .jar -Datei aus .APK -Datei
- Befehl :
dex2jar sampleApp.apk
Schritt 2 . JD-GUI zersetzen .jar
- Es dekompiliert die .class -Dateien dh, wir werden bekommen verschleiert .java zurück vom apk.
Jüngste Debian hat ein Python -Paket androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
Installieren Sie entsprechende Pakete:
sudo apt-get install androguard python-networkx
Dekompile Dex -Datei:
$ androdd -i classes.dex -o ./dir-for-output
Extrakt classes.dex
Aus APK + Decompile:
$ androdd -i app.apk -o ./dir-for-output
APK -Datei ist nichts weiter als Java Archive (JAR). Sie können Dateien aus dem Archiv extrahieren über:
$ unzip app.apk -d ./dir-for-output
Es hat sich viel geändert, seit die meisten dieser Antworten veröffentlicht wurden. Jetzt gibt es viele einfache Werkzeuge mit GUIs wie folgt:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Der beste Ort, um sie zu finden, ist das XDA Developers Forum.
Seit Dheeraj Bhaskar
Die Antwort ist relativ alt wie viele Jahre vergangen.
Hier ist meine neueste Antwort (2019) Antwort:
Hauptlogik
aus dex
zu java sourcecode
, derzeit hat zwei Arten von Lösung:
One Step
: direkt konvertierendex
zujava sourcecode
Two Step
: Zuerst konvertierendex
zujar
, zweiter Konvertitjar
zujava sourcecode
Eine Schrittlösung: dex
direkt zu java sourcecode
Werkzeug
Verfahren
- Download Jadx-0.9.0.zip, entpacken Sie es, in
bin
Ordner kann die Befehlszeile sehenjadx
oder GUI -Versionjadx-gui
, doppelt klicken, um die GUI -Version auszuführen:jadx-gui
- offen
dex
Datei
kann dann Java -Quellcode anzeigen:
File
->save as gradle project
Dann bekam Java Sourcecode:
Zwei -Schritt -Lösung
Schritt 1: dex
zu jar
Werkzeug
Verfahren
Download Dex2jar Zip, Unzip bekommen 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
Der Code dekompilierer Fehler - CRF: Beliebt,
minor
Der Code dekompilierer Fehler - Procyon: Beliebt,
no
Code -Dekompilierfehler- GUI -Tool basierend auf
Procyon
- GUI -Tool basierend auf
- Andere
Verfahren
Hier Demo 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
Verwenden von Editor VSCODE Um den exportierten Quellcode zu öffnen, sehen Sie sich Folgendes aus:
Fazit
Conversion -Richtigkeit: Jadx
> Procyon
> CRF
> JD-GUI
Verwenden Sie die Verwendung: (One -Street -Lösung) Jadx
Ausführlicher für eine detailliertere Erläuterung finden Sie meine Online Chinesisch eBook: 安卓 应用 的 安全 和 破解 破解
Sie könnten Jadx versuchen (https://bitbucket.org/mstroboel/procyon/wiki/java%20decompiler) Dies ist ein perfektes Werkzeug für die Dex -Dekompilierung.
Und ja, es ist auch online verfügbar auf (my: 0)) Neue Seite: http://www.javadecompilers.com/apk/
Dies kann in den folgenden fünf Schritten erfolgen:
Dieses Juwel macht diese Dinge für Sie automatisch sogar die Installation der erforderlichen Tools
- Konvertieren Sie die APK -Datei in ZIP
- Entpacken Sie die Datei
- extrahieren Sie Klassen.dex daraus
- Verwenden Sie Dex, um JAR zu JAR zu konvertieren.
- Verwenden Sie die JADX -GUI, um die JAR -Datei als Java -Quellcode zu öffnen
Die einfachste Methode zum Dekompilieren einer Android -App besteht darin, eine App namens herunterzuladen Showjava von Playstore. Wählen Sie einfach die Anwendung aus, die aus der Liste der Anwendungen dekompiliert werden muss. Es gibt drei verschiedene Dekompiler, mit denen Sie eine App nämlich - zum Dekompilieren können - -
CFR 0.110, JADX 0.6.1 oder Farnblumen (Analytical Decompiler).
Wenn Sie DEX2JAR nicht herunterladen möchten, verwenden Sie einfach die apk_grabber
Python -Skript Um APK in JAR -Dateien zu dekompilieren. Dann hast du sie mit JD-Gui gelesen.