784 Stimmen

DEX in Java-Quellcode dekompilieren

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

0 Stimmen

Schauen Sie mal aquí . Von dort erhalten Sie mögliche Hinweise, um weiterzumachen.

0 Stimmen

Aktualisierte Informationen sind im Coders Hub Blog verfügbar: coders-hub.com/2013/04/wie-konvertiere-apk-datei-in-quelltext.html

0 Stimmen

Wenn Sie Geld haben, kaufen Sie jeb verwenden, ansonsten jadx siehe aquí pourquoi

981voto

fred Punkte 3564

Es ist ganz einfach

Holen Sie sich diese Werkzeuge:

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

  2. jd-gui zum Anzeigen der Java-Dateien im jar

Der Quellcode ist recht gut lesbar, da dex2jar einige Optimierungen vornimmt.

Verfahren:

Und hier ist das Verfahren zur Dekompilierung:

Schritt 1:

Konvertieren von 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: Auf den Windows-Rechnern werden alle .sh Skripte werden ersetzt durch .bat Skripte

Anmerkung 2: Unter Linux/Mac sollten Sie Folgendes nicht vergessen sh o bash . Der vollständige Befehl sollte lauten:

sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

Anmerkung 3: Denken Sie auch daran, die Ausführungserlaubnis zu dex2jar-X.X Verzeichnis z.B. sudo chmod -R +x dex2jar-2.0

dex2jar-Dokumentation

Schritt 2:

Öffnen Sie die Jar-Datei in JD-GUI

The decompiled source

143voto

Zach Lipton Punkte 1830

Um es etwas zu verdeutlichen: Es gibt zwei Hauptwege, die Sie hier einschlagen können, je nachdem, was Sie erreichen wollen:

Dekompilieren Sie den Dalvik-Bytecode (dex) in lesbaren Java-Quellcode. Sie können dies einfach mit dex2jar y jd-gui wie Fred erwähnt hat. Der resultierende Quellcode ist nützlich, um die Funktionalität einer Anwendung zu lesen und zu verstehen, wird aber wahrscheinlich keinen 100%ig brauchbaren Code ergeben. Mit anderen Worten: Sie können den Quellcode lesen, aber Sie können ihn nicht wirklich ändern und neu verpacken. Wenn der Quellcode mit proguard verschleiert wurde, ist der resultierende Quellcode wesentlich schwerer zu entwirren.

Die andere wichtige Alternative ist die Disassemblierung des Bytecodes in smali , eine Assemblersprache, die genau für diesen Zweck entwickelt wurde. Ich habe herausgefunden, dass es am einfachsten ist, dies mit apktool . Wenn Sie apktool installiert haben, können Sie es einfach auf eine apk-Datei richten und Sie erhalten eine smali-Datei für jede in der Anwendung enthaltene Klasse zurück. Sie können die smali lesen und modifizieren oder sogar Klassen komplett ersetzen, indem Sie smali aus neuen Java-Quellen generieren (dazu könnten Sie Ihre .java-Quellen mit javac in .class-Dateien kompilieren, dann Ihre .class-Dateien mit Androids dx-Compiler in .dex-Dateien konvertieren und dann baksmali (smali disassembler) verwenden, um die .dex- in .smali-Dateien zu konvertieren, wie in diese Frage . Vielleicht gibt es hier eine Abkürzung). Sobald Sie fertig sind, können Sie die apk einfach wieder mit apktool verpacken. Beachten Sie, dass apktool die resultierende apk nicht signiert, so dass Sie sich darum kümmern müssen genau wie jede andere Android-Anwendung .

Wenn Sie sich für die Smali-Methode entscheiden, sollten Sie Folgendes versuchen APK-Studio eine IDE, die einige der oben genannten Schritte automatisiert, um Sie bei der Dekompilierung und Neukompilierung einer apk und ihrer Installation auf einem Gerät zu unterstützen.

Kurz gesagt, Sie haben die Wahl zwischen der Dekompilierung in Java, die besser lesbar, aber wahrscheinlich irreversibel ist, und der Disassemblierung in Smali, die schwieriger zu lesen, aber viel flexibler ist, wenn es darum geht, Änderungen vorzunehmen und eine modifizierte Anwendung neu zu verpacken. Welchen Ansatz Sie wählen, hängt davon ab, was Sie erreichen wollen.

Schließlich ist der Vorschlag der wagen ist ebenfalls erwähnenswert. Es ist ein Retargeting-Tool zur Konvertierung von .dex- und .apk-Dateien in Java-.class-Dateien, so dass sie mit typischen statischen Java-Analysetools analysiert werden können.

62voto

reflog Punkte 7486

Ich würde sogar 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 entwickelt, dem Mann, der die berühmten ROMs für Android erstellt hat.

43voto

crifan Punkte 10673

Seit Dheeraj Bhaskar Die Antwort ist relativ alt und liegt schon viele Jahre zurück.

Hier ist meine letzte Antwort (Jahr 2019):

Hauptlogik

de dex a java sourcecode gibt es derzeit zwei Arten von Lösungen:

  • One Step : direkt konvertieren dex a java sourcecode
  • Two Step : erster Konvertit dex a jar , zweiter Konvertit jar a java sourcecode

Eine Lösung in einem Schritt: dex direkt an java sourcecode

Werkzeuge

Prozess

  1. herunterladen jadx-0.9.0.zip entpacken Sie es, in bin Ordner kann Befehlszeile sehen jadx oder GUI-Version jadx-gui , Doppelklick zur Ausführung der GUI-Version: jadx-gui

  1. öffnen dex Datei

kann dann den Java-Quellcode anzeigen:

  1. File -> save as gradle project

dann Java-Quellcode erhalten:


Zweistufige Lösung

Schritt 1: dex a jar

Werkzeuge

Prozess

herunterladen dex2jar zip , entpacken hat d2j-dex2jar.sh , dann:

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

Werkzeuge

Prozess

hier Demo Procyon jar in Java-Quellcode konvertieren:

herunterladen procyon-decompiler-0.5.34.jar

dann unter Verwendung der 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 Editor VSCode um exportierten Quellcode zu öffnen, sehen wie folgt aus:

Schlussfolgerung

Korrektheit der Umwandlung : Jadx > Procyon > CRF > JD-GUI

Empfohlene Verwendung: (Einschrittlösungen) Jadx


Ausführlichere Erläuterungen finden Sie in meinem Online Chinesisch ebook:

32voto

Alba Mendez Punkte 4311

Eine vollständigere Version von fred 's Antwort :

Manueller Weg

Zuerst brauchen Sie ein Werkzeug, um Auszug alle (kompilierten) Klassen auf dem DEX in ein JAR.
Es gibt eine, die heißt dex2jar die von einem chinesischen Studenten erstellt wurde.

Dann können Sie jd-gui a dekompilieren die Klassen in der JAR-Datei in Quellcode umwandeln.
Der resultierende Quelltext sollte recht gut lesbar sein, da dex2jar einige Optimierungen vornimmt.

Automatischer Weg

Sie können verwenden APKTool . Sie wird automatisch alle Klassen extrahieren ( .dex ), Ressourcen ( .asrc ), dann wandelt es binäres XML a für Menschen lesbares XML und sie wird auch demontieren. die Klassen für Sie.
Die Disassemblierung wird immer robuster sein als die Dekompilierung, insbesondere mit
JARs mit Pro Guard verschleiert!

Sagen Sie APKTool einfach, dass es dekodieren die APK in ein Verzeichnis, dann ändern. was Sie wollen,
und schließlich verschlüsseln zurück zu einer APK. Das war's schon.

Das ist wichtig: APKTool demontiert . Das tut es nicht dekompilieren .
Der generierte Code ist kein Java-Quellcode.
Aber Sie sollten in der Lage sein, sie zu lesen und sogar zu bearbeiten, wenn Sie mit den jasmin .
Wenn Sie den Java-Quellcode benötigen, gehen Sie bitte über die Manueller Weg .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X