+1. Ich habe sowohl Baksmali als auch Dex2jar ausprobiert. Dex2Jar + JD-Gui gewinnt dafür, dass Sie für die meisten .dex-Dateien perfekt lesbaren Quellcode erhalten.
Jonathan Dumaine
Hallo, teilen Sie uns bitte Ihren Weg mit. Ich werde Ihnen sehr dankbar sein.
@ JonathanDumaine das kommt darauf an. Wenn die JARs verschleiert sind und Sie kleine Änderungen vornehmen möchten, ist Backsmali der einzige Weg. Bonus! Mit APKTool erhalten Sie auch alle XMLs, Bilder und anderen Ressourcen zurück. Siehe meine Antwort .
Alba Mendez
3
@ JonathanDumaine Ich stimme jmendeth zu, apktool ist auch der richtige Weg, wenn Sie Ihre apk dekompilieren, ändern und dann neu kompilieren möchten. Während Sie dex2jar und jd-gui verwenden, ist die Quelle wirklich lesbar, aber Sie können ohne einige Fehler nicht neu kompilieren!
Darkheir
138
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.
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.
smali ist eine Assembler-ähnliche Sprache, die auf dalvik IL basiert. Sie kann nicht direkt nach Java übersetzt werden.
Reflog
@endryha Dafür gibt es keine Tools. Weitere Informationen finden Sie in dieser Frage .
Alba Mendez
1
Code, Code, Code, ... Warum nur Code? Wenn Sie APKTool verwenden, erhalten Sie alles zurück! Und es ist so einfach wie ./apktool d myprogram.apk. Siehe meine 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.
Automatischer Weg
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!
Laden Sie jadx-0.9.0.zip herunter , entpacken Sie es, im binOrdner wird die Befehlszeile jadxoder die GUI-Version angezeigt . Doppelklicken Sie, jadx-guium die GUI-Version auszuführen:jadx-gui
seltsam, aber wenn ich versuche , 1 Schritt (dex zu jar decompile auf Windows) über diesen Befehl auszuführen , dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dexnur bekam Ausnahme:java.io.IOException: the src file not a .dex or zip file
Сергей
@ Сергей könnten Sie versuchen: d2j-dex2jar.bat "D:\android\some_dex_file.dex"ist in Ordnung oder nicht?
Crifan
Ja, ich habe es genau versucht, >d2j-dex2jar.bat file.dexaber es ist nicht in Ordnung. Vielleicht liegt es daran, dass meine .dexDatei kopiert wurde dalvik-cache?
Сергей
1
@ Йергей ja, der wahrscheinlichste Grund ist Ihr gesagt dex is copied from dalvik-cache, sollte seindex is decompiled from apk
Crifan
@crifan, danke für diese Antwort. JADX ist beeindruckend. Ich werde wieder arbeiten. Emmanuel @ JD-Gui
Emmanuel Dupuy
13
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.
Konvertieren Sie Ihre apk-Datei in zip (während Sie den Download starten, gehen Sie nicht mit der Option "Speichern", sondern mit "Speichern unter" und geben Sie Ihre Erweiterung als .zip an), indem Sie auf diese Weise APKTOOL vermeiden ...
Extrahieren Sie die Zip-Datei, dort finden Sie somefilename.dex. Jetzt müssen wir dex -> .class konvertieren
Dazu benötigen Sie "dex2jar" (Sie können es von http://code.google.com/p/dex2jar/ herunterladen. Nach dem Extrahieren müssen Sie in der Eingabeaufforderung Folgendes angeben: [D: \ dex2jar-0.09> dex2jar somefilename.dex] ( Beachten Sie, dass sich Ihre somefilename.dex in demselben Ordner befinden muss, in dem Sie Ihre dex2jar aufbewahrt haben.)
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 dort "jad.txt" anstelle von "jad.exe" angezeigt werden. Benennen Sie die Erweiterung einfach in ".exe" um, um sie auszuführen.)
Schließlich müssen Sie in der Eingabeaufforderung wie [D: \ jad> jad -sjava yourfilename.class] angeben , dass Ihre Klassendatei in ein bearbeitbares Java-Dokument analysiert wird.
Aber wenn ich den gesamten dekompilierten Quellcode erneut kompiliere, wird er nicht ausgeführt, der Compiler zeigt viele Fehler.
2
Reverse Engineering bedeutet nicht unbedingt Dekompilierung . Tatsächlich werden von ProGuard verschleierte JARs nicht korrekt dekompiliert.
Alba Mendez
Wenn Sie mit verschleiertem Code arbeiten, ist es besser, ihn einfach zu zerlegen . Sie erhalten keine Java-Quelle, können den Code jedoch immer anzeigen / ändern. Siehe meine Antwort .
Alba Mendez
Ich würde empfehlen, sowohl zu dekompilieren als auch zu zerlegen. Der resultierende dekompilierte Code ist leichter zu verstehen, aber alle Änderungen müssen mit einer disassemblierten Version vorgenommen werden. Besonders wahr, wenn Proguard verwendet wurde. Ich finde, dass dex2jar in Kombination mit jd-gui am besten zum Dekompilieren geeignet ist.
Mikko Rantalainen
6
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
*Decompilerfor 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.dexaus 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:
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_grabberPython-Skript, um apk in jar-Dateien zu dekompilieren. Dann liest du sie mit jd-gui.
Antworten:
Es ist einfach
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.
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
dex2jar Dokumentation
Schritt 2:
Öffnen Sie das Glas in JD-GUI
quelle
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.
quelle
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.
quelle
./apktool d myprogram.apk
. Siehe meine Antwort .Eine vollständigere Version von fred ‚s Antwort :
Manueller Weg
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.
Automatischer Weg
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 .
quelle
Manchmal wird bei der Verwendung von
dex2jar
/ Code beschädigtapktool
, insbesondere in Schleifen. Um dies zu vermeiden, verwenden Sie jadx , das Dalvik-Bytecode in Java-Quellcode dekompiliert, ohne zuvor eine.jar
/.class
-Datei zu erstellendex2jar
(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!quelle
javac "$(find . -name '*.java')"
?Ich habe benutzt
Aber keines schlägt Googles eigene Tools
1) Android Studio 2.x: bauen> apk analysieren
2) Android Studio 3.0: Profil oder Debug APK
quelle
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
quelle
Da ist
Dheeraj Bhaskar
die Antwort relativ alt wie viele Jahre zuvor.Hier ist meine letzte Antwort (Jahr 2019):
Hauptlogik
von
dex
bisjava sourcecode
hat derzeit zwei Arten von Lösungen:One Step
: direkt konvertierendex
nachjava sourcecode
Two Step
: erstens konvertierendex
nachjar
, zweitens konvertierenjar
nachjava sourcecode
Ein-Schritt-Lösung:
dex
direkt zujava sourcecode
Werkzeuge
Prozess
bin
Ordner wird die Befehlszeilejadx
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:
Zweistufige Lösung
Schritt 1:
dex
bisjar
Werkzeuge
Prozess
dex2jar zip herunterladen , entpacken
d2j-dex2jar.sh
, dann:apk
zujar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
zujar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
Beispiel:
Schritt 2:
jar
bisjava sourcecode
Werkzeuge
many
Code dekompiliert Fehlerminor
Code dekompiliert Fehlerno
Fehler beim Dekompilieren von CodeProcyon
Prozess
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:
Fazit
Umwandlung Korrektheit:
Jadx
>Procyon
>CRF
>JD-GUI
Empfohlene Verwendung: (Ein-Schritt-Lösung)
Jadx
Weitere Informationen finden Sie in meinem chinesischen Online- eBook: 安卓 应用 的 安全 和 破解
quelle
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 wurdedalvik-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.
quelle
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 .
quelle
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
quelle
Aktuelle Debian haben Python-Paket
androguard
:Installieren Sie die entsprechenden Pakete:
DEX-Datei dekompilieren:
Auszug
classes.dex
aus Apk + Decompile:Apk-Datei ist nichts anderes als Java-Archiv (JAR). Sie können Dateien aus dem Archiv extrahieren über:
quelle
Seit die meisten dieser Antworten veröffentlicht wurden, hat sich viel geändert. Heutzutage gibt es viele einfache Tools mit GUIs, wie diese:
Der beste Ort, um sie zu finden, ist das XDA Developers Forum.
quelle
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/
quelle
Dies kann in den folgenden fünf Schritten erfolgen:
Dieses Juwel erledigt diese Dinge automatisch für Sie, selbst wenn Sie die erforderlichen Werkzeuge installieren
quelle
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:
quelle
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.quelle