it-swarm.com.de

Dekompilieren von DEX in Java Quellcode

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

690
Will

Es ist einfach

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.

Verfahren:

Und hier ist das Verfahren zum Dekompilieren:

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

Hinweis: Auf den Windows-Rechnern werden alle Skripte .sh durch Skripte .bat ersetzt

dex2jar-Dokumentation

Schritt 2:

Öffnen Sie das Glas in JD-GUI

The decompiled source

860
fred

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.

132
Zach Lipton

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.

60
reflog

Eine vollständigere Version von fred 's answer :

Manueller Weg

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.

Automatischer Weg

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.

28
Alba Mendez

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!

24
polym

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

15
phaethon

Ich habe benutzt

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. veredeln
  4. Apktool

Aber keine schlägt Googles eigene Tools

1) Android Studio 2.x: build> analyse apk enter image description here

2) Android Studio 3.0: Profil oder Debug APK enter image description hereenter image description here

15
ishandutta2007

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.

  1. Konvertiere deine APK-Datei nach Zip (während du den Download startest, gehe nicht mit der Option "Speichern", sondern gehe mit "Speichern unter" und nenne deine Erweiterung als .Zip). Auf diese Weise kannst du APKTOOL vermeiden ...
  2. Entpacke die Zip-Datei, dort findest du somefilename.dex. Jetzt müssen wir also dex -> .class konvertieren
  3. Dazu benötigen Sie "dex2jar" (Sie können es von folgender Adresse herunterladen: http://code.google.com/p/dex2jar/ Nach dem Extrahieren müssen Sie in der Eingabeaufforderung Folgendes angeben: [D:\dex2jar-0.09> dex2jar somefilename.dex] (Denken Sie daran, dass sich Ihr somefilename.dex in demselben Ordner befinden muss, in dem Sie Ihr gespeichert haben dex2jar.)
  4. Laden Sie jad von http://www.viralpatel.net/blogs/download/jad/jad.Zip herunter und extrahieren Sie es. Nach dem Extrahieren sehen Sie zwei Dateien wie "jad.exe" und "Readme.txt" (manchmal kann "jad.txt" anstelle von "jad.exe" vorhanden sein. Benennen Sie die Erweiterung einfach um, damit sie als.exe ausgeführt wird.)
  5. Schließlich müssen Sie in der Eingabeaufforderung [D:\jad> jad -sjava yourfilename.class] angeben, damit Ihre Klassendatei in editierbares _ zerlegt wird.Java Dokument.
13
Kamal

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

  • Generieren Sie eine .jar-Datei aus einer .apk-Datei
  • befehl: dex2jar sampleApp.apk

Schritt 2. .Jar mit JD-GUI dekompilieren

  • es dekompiliert die .class-Dateien, d. h. wir werden verschleierte .Java von der apk zurückbekommen.
8
gtiwari333

Mit Dedexer können Sie die Datei .dex in den Dalvik-Bytecode (.ddx) zerlegen.

Das Dekompilieren nach Java ist meines Wissens nicht möglich.
Sie können über Dalvik-Bytecode lesen hier .

8
hcpl

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
6
gavenkoa

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.

5
MPaulo

Die Antwort von Dheeraj Bhaskar ist seit vielen Jahren relativ alt.

Hier ist meine letzte (2019 Jahre) Antwort:

Hauptlogik

von dex bis Java sourcecode gibt es derzeit zwei Arten von Lösungen:

  • One Step: direkt dex in Java sourcecode konvertieren
  • Two Step: Zuerst dex in jar konvertieren, dann jar in Java sourcecode konvertieren

Ein-Schritt-Lösung: dex direkt zu Java sourcecode

Werkzeuge

Prozess

  1. download jadx-0.9.0.Zip , entpacke es, in bin Ordner kann die Befehlszeile jadx oder die GUI-Version jadx-gui angezeigt werden, doppelklicken Sie, um die GUI-Version auszuführen : jadx-gui

  1. öffnen Sie die Datei dex

dann kann Java Quellcode angezeigt werden:

  1. File -> save as gradle project

dann habe Java Quellcode:


Zweistufige Lösung

Schritt 1: dex bis jar

Werkzeuge

Prozess

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

Schritt 2: jar bis Java sourcecode

Werkzeuge

Prozess

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:

Fazit

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 : 安卓 安卓 的 安全 和 和

5
crifan

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/

4
Andrew Rukin

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

2
Rishabh Maurya

Dies kann in folgenden fünf Schritten erfolgen:

Dieser Edelstein erledigt diese Dinge für Sie automatisch auch bei der Installation der benötigten Tools

  1. aPK-Datei in Zip konvertieren
  2. entpacke die Datei
  3. extrahiere classes.dex daraus
  4. verwende dex to jar, um classes.dex in eine jar-Datei zu konvertieren
  5. verwenden Sie JADX GUI, um die JAR-Datei als Java-Quellcode zu öffnen
2
Ajit Singh

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.

1
Jeff Brateman