Frage

Wie kann man Android Dex (VM -Bytecode) -Dateien in entsprechende Java -SourceCode dekompilen?

War es hilfreich?

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

Dex2jar -Dokumentation

Schritt 2:

Öffne das Glas in JD-Gui

The decompiled source

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

Ich habe benutzt

  1. Dex2jar + JD-Gui
  2. Javadecompilers.com
  3. Enjarify
  4. Apktool

Aber keiner übertrifft die eigenen Tools von Google

1)Android Studio 2.x:bauen> apk analysierenenter image description here

2)Android Studio 3.0:Profil oder Debugug apkenter image description here enter image description here

Sobald Sie Ihre APK -Datei heruntergeladen haben, müssen Sie die folgenden Schritte ausführen, um einen bearbeitbaren Java -Code/Dokument zu erhalten.

  1. Konvertieren Sie Ihre APK -Datei in ZIP (während Sie Ihren Download nicht mit der Option "Speichern" speichern.
  2. Extrahieren Sie die ZIP -Datei, dort finden Sie einen fileName.dex. Jetzt müssen wir Dex -> .Class konvertieren
  3. 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.
  4. 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.
  5. 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.

Mit Dedexer, Sie können das zerlegen .dex Datei in Dalvik Bytecode (.ddx).

Soweit ich weiß, ist nicht möglich.
Sie können über Dalvik -Bytecode lesen hier.

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 BhaskarDie 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 konvertieren dex zu java sourcecode
  • Two Step: Zuerst konvertieren dex zu jar, zweiter Konvertit jar zu java sourcecode

Eine Schrittlösung: dex direkt zu java sourcecode

Werkzeug

Verfahren

  1. Download Jadx-0.9.0.zip, entpacken Sie es, in bin Ordner kann die Befehlszeile sehen jadx oder GUI -Version jadx-gui, doppelt klicken, um die GUI -Version auszuführen: jadx-gui

  1. offen dex Datei

kann dann Java -Quellcode anzeigen:

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

  1. Konvertieren Sie die APK -Datei in ZIP
  2. Entpacken Sie die Datei
  3. extrahieren Sie Klassen.dex daraus
  4. Verwenden Sie Dex, um JAR zu JAR zu konvertieren.
  5. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top