Wie kann man Android DEX-Dateien (VM Bytecode) in entsprechenden Java-Quellcode dekompilieren?
Wie kann man Android DEX-Dateien (VM Bytecode) in entsprechenden Java-Quellcode dekompilieren?
Antworten:
Holen Sie sich diese Tools:
1) dex2jar zum Übersetzen von Dex-Dateien in JAR-Dateien
2) jd-gui , um die Java-Dateien im Glas 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 1: Auf den Windows-Computern werden alle
.sh
Skripte durch.bat
Skripte ersetztHinweis 2: Vergessen Sie unter Linux / Mac nicht
sh
oderbash
. Der vollständige Befehl sollte lauten:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Hinweis 3: Denken Sie auch daran, dem
dex2jar-X.X
Verzeichnis eine Ausführungsberechtigung hinzuzufügen, zsudo chmod -R +x dex2jar-2.0
Öffnen Sie das Glas in JD-GUI
Um etwas zu verdeutlichen, gibt es zwei Hauptpfade, 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, erzeugt jedoch wahrscheinlich keinen 100% verwendbaren Code. Mit anderen Worten, Sie können die Quelle lesen, aber nicht wirklich ändern und neu verpacken. 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 der einfachste Weg, dies zu tun, mit apktool ist . 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önnen 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 den .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 sichern. Beachten Sie, dass apktool die resultierende apk nicht signiert, daher müssen Sie sich wie bei jeder anderen Android-Anwendung darum kümmern .
Wenn Sie sich für Smali entscheiden, sollten Sie APK Studio ausprobieren , eine IDE, die einige der oben genannten Schritte automatisiert, um Sie beim Dekompilieren und Neukompilieren einer APK und beim Installieren auf einem Gerät zu unterstützen.
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, 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.
Schließlich ist auch der Vorschlag der Pflicht zu beachten. Es ist ein Retargeting-Tool zum Konvertieren von .dex- und .apk-Dateien in Java .class-Dateien, damit sie mit typischen statischen Java-Analysetools analysiert werden können.
Ich würde eigentlich 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 Typ, der die berühmten ROMs für Android erstellt hat.
./apktool d myprogram.apk
. Siehe meine Antwort .
Eine vollständigere Version von fred ‚s Antwort :
Zuerst benötigen Sie ein Tool, um alle (kompilierten) Klassen im DEX in eine JAR zu extrahieren .
Es gibt eine namens dex2jar , die von einem chinesischen Studenten hergestellt wird.
Dann können Sie mit jd-gui dekompilieren die Klassen auf der JAR - Quellcode.
Die resultierende Quelle sollte gut lesbar sein, da dex2jar einige Optimierungen anwendet.
Sie können APKTool verwenden . Es wird automatisch alle Klassen extrahieren ( .dex
), Ressourcen ( .asrc
), dann wird es konvertieren binäre XML zu den Menschen lesbaren XML , und es wird auch ZERLEGEN die Klassen für Sie.
Die Demontage ist immer robuster als das Dekompilieren, insbesondere bei
JARs, die mit Pro Guard verschleiert sind!
Weisen Sie APKTool einfach an , die APK in ein Verzeichnis zu dekodieren , dann die gewünschten Änderungen vorzunehmen
und sie schließlich wieder in eine APK zu kodieren . Das ist alles.
Wichtig: APKTool zerlegt . Es dekompiliert nicht .
Der generierte Code ist keine Java-Quelle.
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 wird bei der Verwendung von dex2jar
/ Code beschädigt apktool
, insbesondere in Schleifen. Um dies zu vermeiden, verwenden Sie jadx , das Dalvik-Bytecode in Java-Quellcode dekompiliert, ohne zuvor eine .jar
/ .class
-Datei zu erstellen dex2jar
(apktool verwendet dex2jar, glaube ich). Es ist auch Open Source und befindet sich in der aktiven Entwicklung. Es hat sogar eine GUI für GUI-Fanatiker. Versuch es!
javac "$(find . -name '*.java')"
?
Ich habe benutzt
Aber keines schlägt Googles eigene Tools
Da dies niemand erwähnte, gibt es noch ein Tool: die DED-Homepage
Installationsanleitung und einige Erklärungen: Installation .
Es wurde in einer recht interessanten Studie zur Sicherheit von Top-Markt-Apps verwendet (nicht wirklich verwandt, nur wenn Sie neugierig sind): Ein Überblick über die Sicherheit von Android-Anwendungen
Da ist Dheeraj Bhaskar
die Antwort relativ alt wie viele Jahre zuvor.
Hier ist meine letzte Antwort (Jahr 2019):
von dex
bis java sourcecode
hat derzeit zwei Arten von Lösungen:
One Step
: direkt konvertieren dex
nachjava sourcecode
Two Step
: erstens konvertieren dex
nach jar
, zweitens konvertieren jar
nachjava sourcecode
dex
direkt zujava sourcecode
bin
Ordner wird die Befehlszeile jadx
oder die GUI-Version angezeigt . Doppelklicken Sie, jadx-gui
um die GUI-Version auszuführen:jadx-gui
dex
Datei öffnenkann dann Java-Quellcode anzeigen:
File
-> save as gradle project
dann bekam Java-Quellcode:
dex
bisjar
dex2jar zip herunterladen , entpacken d2j-dex2jar.sh
, dann:
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
jar
bisjava sourcecode
many
Code dekompiliert Fehlerminor
Code dekompiliert Fehlerno
Fehler beim Dekompilieren von Code
Procyon
hier Demo Procyon
konvertieren jar in Java-Quellcode:
Laden Sie procyon-decompiler-0.5.34.jar herunter
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
Mit dem Editor VSCode zum Öffnen des exportierten Quellcodes sehen Sie folgendermaßen aus:
Umwandlung Korrektheit: Jadx
> Procyon
> CRF
>JD-GUI
Empfohlene Verwendung: (Ein-Schritt-Lösung) Jadx
Weitere Informationen finden Sie in meinem chinesischen Online- eBook: 安卓 应用 的 安全 和 破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
nur bekam Ausnahme:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
ist in Ordnung oder nicht?
>d2j-dex2jar.bat file.dex
aber es ist nicht in Ordnung. Vielleicht liegt es daran, dass meine .dex
Datei kopiert wurde dalvik-cache
?
dex is copied from dalvik-cache
, sollte seindex is decompiled from apk
Nachdem Sie Ihre APK-Datei heruntergeladen haben, müssen Sie die folgenden Schritte ausführen, um einen bearbeitbaren Java-Code / ein bearbeitbares Java-Dokument zu erhalten.
Mit Dedexer können Sie die .dex
Datei in dalvik bytecode ( .ddx
) zerlegen .
Eine Dekompilierung in Richtung Java ist meines Wissens nicht möglich.
Sie können über Dalvik Bytecode lesen hier .
Android Reverse Engineering ist möglich . Befolgen Sie diese Schritte, um die Java-Datei aus der APK-Datei abzurufen.
Schritt 1 . Verwenden von dex2jar
dex2jar sampleApp.apk
Schritt 2 . Dekompilieren von .jar mithilfe der JD-GUI
Aktuelle Debian 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 die entsprechenden Pakete:
sudo apt-get install androguard python-networkx
DEX-Datei dekompilieren:
$ androdd -i classes.dex -o ./dir-for-output
Auszug classes.dex
aus Apk + Decompile:
$ 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
Seit die meisten dieser Antworten veröffentlicht wurden, hat sich viel geändert. Heutzutage gibt es viele einfache Tools mit GUIs, 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 das XDA Developers Forum.
Sie können 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 der neuen Website (my: 0) verfügbar: http://www.javadecompilers.com/apk/
Dies kann in den folgenden fünf Schritten erfolgen:
Die einfachste Methode zum Dekompilieren einer Android-App ist das Herunterladen einer App namens ShowJava aus dem Playstore. Wählen Sie einfach die Anwendung, die dekompiliert werden soll, aus der Liste der Anwendungen aus. Es gibt drei verschiedene Dekompiler, mit denen Sie eine App dekompilieren können:
CFR 0.110, JaDX 0.6.1 oder FernFlower (analytischer Dekompiler).
Wenn Sie dex2jar nicht herunterladen möchten, verwenden Sie einfach das apk_grabber
Python-Skript, um apk in jar-Dateien zu dekompilieren. Dann liest du sie mit jd-gui.