Wie kann man Android DEX (VM-Bytecode) -Dateien in den entsprechenden Java Quellcode dekompilieren?
Besorgen 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.
Und hier ist das Verfahren zum Dekompilieren:
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
Hinweis: Auf den Windows-Rechnern werden alle Skripte
.sh
durch Skripte.bat
ersetzt
Öffnen Sie das Glas in JD-GUI
Um etwas zu verdeutlichen, gibt es zwei wichtige Wege, die Sie hier einschlagen können, je nachdem, was Sie erreichen möchten:
Dekompilieren Sie den Dalvik-Bytecode (dex) in eine lesbare Java-Quelle. Sie können dies leicht mit dex2jar und jd-gui tun, 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 produzieren. Mit anderen Worten, Sie können die Quelle lesen, aber 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 in smali zu zerlegen, eine Assemblersprache, die genau für diesen Zweck entwickelt wurde. Ich habe festgestellt, dass dies am einfachsten mit apktool erledigt werden kann. Sobald Sie apktool installiert haben, können Sie es einfach auf eine apk-Datei verweisen, und Sie erhalten eine smali-Datei für jede in der Anwendung enthaltene Klasse zurück. Sie können das SMALI lesen und ändern oder sogar Klassen vollständig ersetzen, indem Sie SMALI aus einer neuen Java -Quelle generieren (zu diesem Zweck können Sie Ihre .Java-Quelle mit javac in .class-Dateien kompilieren und dann Ihre .class-Dateien konvertieren in .dex-Dateien mit dem dx-Compiler von Android und konvertieren Sie die .dex-Dateien mit baksmali (smali disassembler) in .smali, wie in diese Frage . Möglicherweise gibt es hier eine Verknüpfung. Sobald Sie fertig sind, können Sie die apk einfach wieder mit apktool sichern. Beachten Sie, dass apktool das resultierende apk nicht signiert. Sie müssen sich also darum kümmern genau wie bei jeder anderen Anwendung Android .
Wenn Sie den kleinen Weg gehen, möchten Sie vielleicht versuchen APK Studio , ein IDE, das einige der oben genannten Schritte automatisiert, um Sie beim Dekompilieren und Neukompilieren eines apk und dessen Installation zu unterstützen Ein Gerät.
Kurz gesagt, Sie haben die Wahl, entweder in Java zu dekompilieren, das besser lesbar, aber wahrscheinlich irreversibel ist, oder in SMALI zu zerlegen, das schwerer zu lesen ist, aber wesentlich flexibler, um Änderungen vorzunehmen und eine geänderte App neu zu packen. Welchen Ansatz Sie wählen, hängt davon ab, was Sie erreichen möchten.
Schließlich ist der Vorschlag von wagen auch bemerkenswert. Es ist ein Retargeting-Tool zum Konvertieren von .dex- und .apk-Dateien in Java .class-Dateien, sodass sie mit typischen Java statischen Analysetools analysiert werden können.
Ich würde 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 erstellt, demjenigen, der die berühmten ROMs für Android erstellt hat.
Eine vollständigere Version von fred 's answer :
Zuerst benötigen Sie ein Tool, um alle (kompilierten) Klassen im DEX in eine JAR zu extrahieren .
Es gibt einen namens dex2jar , der von einem chinesischen Studenten hergestellt wird.
Dann können Sie jd-gui verwenden, um die Klassen in der JAR in den Quellcode zu dekompilieren .
Die resultierende Quelle sollte gut lesbar sein, da dex2jar einige Optimierungen anwendet.
Sie können APKTool verwenden. Es extrahiert automatisch alle Klassen (.dex
), Ressourcen (.asrc
) und konvertiert dann binäres XML zu lesbarem XML , und es wird auch die Klassen für Sie zerlegen .
Das Zerlegen ist immer robuster als das Dekompilieren, insbesondere mit
JARs mit Pro Guard verschleiert!
Sagen Sie APKTool einfach, dass es die APK in ein Verzeichnis entschlüsselt und dann ändert , was Sie wollen.
und schließlich codiere es zurück zu einer APK. Das ist alles.
Wichtig: APKTool zerlegt . Es dekompiliert nicht .
Der generierte Code ist nicht die Quelle von Java.
Aber Sie sollten es lesen und sogar bearbeiten können, wenn Sie mit jasmin vertraut sind.
Wenn Sie eine Java Quelle wünschen, gehen Sie bitte den manuellen Weg durch.
Manchmal kommt es bei der Verwendung von dex2jar
/apktool
vor, insbesondere in Schleifen. Um dies zu vermeiden, verwenden Sie jadx , das dalvik-Bytecode in Java-Quellcode dekompiliert, ohne zuerst eine .jar
/.class
-Datei zu erstellen, wie es dex2jar
tut (apktool verwendet meiner Meinung nach dex2jar). Es ist auch Open Source und in aktiver Entwicklung. Es hat sogar eine GUI für GUI-Fanatiker. Versuch es!
Da dies von niemandem erwähnt wurde, gibt es noch ein Tool: DED-Homepage
Installationsanleitung und einige Erklärungen: Installation .
Es wurde in einer ziemlich interessanten Studie über die Sicherheit von Top-Market-Apps verwendet (nicht wirklich verwandt, nur wenn Sie neugierig sind): Ein Überblick über Android Anwendungssicherheit
Nachdem Sie Ihre APK-Datei heruntergeladen haben, müssen Sie die folgenden Schritte ausführen, um einen bearbeitbaren Java Code/ein bearbeitbares Dokument zu erhalten.
Android Reverse Engineering ist möglich . Befolgen Sie diese Schritte, um die .Java-Datei von der apk-Datei zu erhalten.
Schritt 1. Verwenden von dex2jar
dex2jar sampleApp.apk
Schritt 2. .Jar mit JD-GUI dekompilieren
Aktuelle Debian-Versionen haben 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
DEX-Datei dekompilieren:
$ androdd -i classes.dex -o ./dir-for-output
Extrahiere classes.dex
aus Apk + Dekompiliere:
$ androdd -i app.apk -o ./dir-for-output
Apk-Datei ist nichts anderes als Java Archiv (JAR), Sie können Dateien aus dem Archiv extrahieren über:
$ unzip app.apk -d ./dir-for-output
Vieles hat sich geändert, seitdem die meisten dieser Antworten veröffentlicht wurden. Heutzutage gibt es viele einfache Tools mit GUI's, wie diese:
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 im XDA Developers Forum.
Die Antwort von Dheeraj Bhaskar
ist seit vielen Jahren relativ alt.
Hier ist meine letzte (2019 Jahre) Antwort:
von dex
bis Java sourcecode
gibt es derzeit zwei Arten von Lösungen:
One Step
: direkt dex
in Java sourcecode
konvertierenTwo Step
: Zuerst dex
in jar
konvertieren, dann jar
in Java sourcecode
konvertierendex
direkt zu Java sourcecode
bin
Ordner kann die Befehlszeile jadx
oder die GUI-Version jadx-gui
angezeigt werden, doppelklicken Sie, um die GUI-Version auszuführen : jadx-gui
dex
dann kann Java Quellcode angezeigt werden:
File
-> save as gradle project
dann habe Java Quellcode:
dex
bis jar
download dex2jar Zip , entpacke got d2j-dex2jar.sh
, dann:
apk
bis jar
: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
bis 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
jar
bis Java sourcecode
many
Code dekompiliert Fehlerminor
Code dekompiliert Fehlerno
Code-Dekompilierungsfehler Procyon
hier Demo Procyon
JAR in Java Quellcode konvertieren:
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 Sie den Editor VSCode , um den exportierten Quellcode zu öffnen:
Konvertierungskorrektheit: Jadx
> Procyon
> CRF
> JD-GUI
Verwendung empfehlen: (Ein-Schritt-Lösung) Jadx
für detailliertere Erklärungen lesen Sie bitte mein Online-eBook in Chinesisch : 安卓 安卓 的 安全 和 和
Sie könnten JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ) ausprobieren, dies ist ein perfektes Tool für die DEX-Dekompilierung.
Und ja, es ist auch online auf (my: 0)) neuer Website verfügbar: http://www.javadecompilers.com/apk/
Die einfachste Methode zum Dekompilieren einer Android App ist das Herunterladen einer App mit dem Namen ShowJava aus dem Playstore. Wählen Sie einfach die Anwendung aus, die dekompiliert werden soll. Es gibt drei verschiedene Dekompiler, mit denen Sie eine App dekompilieren können:
CFR 0.110, JaDX 0.6.1 oder FernFlower (analytischer Dekompiler).
Dies kann in folgenden fünf Schritten erfolgen:
Wenn Sie dex2jar nicht herunterladen möchten, verwenden Sie einfach das Skript apk_grabber
python , um alle Apk-Dateien in JAR-Dateien zu dekompilieren. Dann liest du sie mit jd-gui.