Comment décompiler des fichiers Android DEX (bytecode VM) en code source Java correspondant?
Obtenez ces outils:
1) dex2jar pour traduire les fichiers dex en fichiers jar
2) jd-gui pour afficher les fichiers Java dans le fichier jar
Le code source est assez lisible car dex2jar effectue certaines optimisations.
Et voici la procédure pour décompiler:
Convertissez classes.dex dans test_apk-debug.apk en 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
Remarque: Sur les machines Windows, tous les scripts
.sh
sont remplacés par.bat
scripts.
Ouvrez le pot dans JD-GUI
Pour clarifier un peu, il existe deux voies principales que vous pouvez emprunter ici en fonction de ce que vous voulez accomplir:
Décompiler le bytecode de Dalvik (dex) en source lisible Java. Vous pouvez le faire facilement avec dex2jar et jd-gui , comme le mentionne fred. La source obtenue est utile pour lire et comprendre les fonctionnalités d'une application, mais ne produira probablement pas du code utilisable à 100%. En d’autres termes, vous pouvez lire le source, mais vous ne pouvez pas vraiment le modifier et le reconditionner. Notez que si la source a été masquée avec proguard, le code source résultant sera beaucoup plus difficile à démêler.
L’autre alternative majeure consiste à désassembler le bytecode en smali , un langage d’assemblage conçu précisément à cet effet. J'ai trouvé que le moyen le plus simple de faire ceci est avec apktool . Une fois que vous avez installé apktool, vous pouvez simplement le pointer sur un fichier apk, et vous récupérez un fichier smali pour chaque classe contenue dans l'application. Vous pouvez lire et modifier le smali ou même remplacer entièrement les classes en générant smali à partir de la nouvelle source Java (pour ce faire, vous pouvez compiler votre source .Java en fichiers .class avec javac, puis convertir vos fichiers .class. fichiers .dex avec le compilateur dx d’Android, puis utilisez baksmali (désassembleur smali) pour convertir les fichiers .dex en fichiers .smali, comme décrit dans la section cette question . Il pourrait y avoir un raccourci ici). Une fois que vous avez terminé, vous pouvez facilement reconfigurer l'apk avec apktool. Notez que apktool ne signe pas l'apk obtenu, vous devrez donc vous en occuper comme toute autre application Android .
Si vous choisissez smali, essayez APK Studio , un IDE qui automatise certaines des étapes ci-dessus pour vous aider à décompiler et recompiler un apk et à l'installer sur un dispositif.
En bref, vous avez le choix, soit de décompiler en Java, ce qui est plus lisible mais probablement irréversible, soit de le désassembler en smali, qui est plus difficile à lire, mais beaucoup plus souple pour effectuer des modifications et reconditionner une application modifiée. La démarche que vous choisirez dépendrait de ce que vous cherchez à réaliser.
Enfin, la suggestion de dare est également à noter. Il s'agit d'un outil de reciblage permettant de convertir les fichiers .dex et .apk en fichiers Java .class, de sorte qu'ils puissent être analysés à l'aide d'outils d'analyse statiques Java classiques.
En fait, je recommanderais d'aller ici: https://github.com/JesusFreke/smali
Il fournit BAKSMALI, qui est un excellent outil de reverse engineering pour les fichiers DEX. Il est fabriqué par JesusFreke, le gars qui a créé les fameuses ROM pour Android.
Une version plus complète de fred 's answer :
Tout d'abord, vous avez besoin d'un outil pour extraire toutes les classes (compilées) de DEX dans un fichier JAR.
Il y en a un appelé dex2jar , qui est fabriqué par un étudiant chinois.
Ensuite, vous pouvez utiliser jd-gui pour décompiler les classes du fichier JAR en code source.
La source obtenue devrait être assez lisible, car dex2jar applique certaines optimisations.
Vous pouvez utiliser APKTool . Il va extraire automatiquement toutes les classes (.dex
), les ressources (.asrc
), puis il convertira XML binaire en XML lisible par l'homme , et il va également désassembler les classes pour vous.
Le désassemblage sera toujours plus robuste que la décompilation, , en particulier avec
JAR masqués avec Pro Guard!
Il suffit de dire à APKTool de décoder le fichier APK dans un répertoire, puis de modifier ce que vous voulez,
et enfin le coder en un APK. C'est tout.
Important: APKTool désassemble . Il ne décompile pas .
Le code généré ne sera pas Java source.
Mais vous devriez pouvoir le lire, et même le modifier si vous êtes familier avec jasmin .
Si vous voulez Java source, passez sur la méthode manuelle .
Parfois, vous obtenez un code cassé lorsque vous utilisez _dex2jar
_/apktool
, notamment dans les boucles. Pour éviter cela, utilisez jadx , qui décompile le bytecode de dalvik en code source Java, sans créer de fichier _.jar
_/_.class
_ en tant que _dex2jar
_ fait (apktool utilise dex2jar je pense). Il est également open-source et en développement actif. Il a même une interface graphique, pour les fanatiques de GUI. Essayez le!
Comme personne n'en a parlé, il existe un outil supplémentaire: page d'accueil DED
Instructions d’utilisation et explications: Installation .
Il a été utilisé dans une étude assez intéressante de la sécurité des applications les plus populaires du marché (pas vraiment liée, mais si vous êtes curieux): Enquête sur Android Sécurité des applications
Une fois que vous avez téléchargé votre fichier APK, vous devez suivre les étapes suivantes pour obtenir un code/document Java éditable.
Android Reverse Engineering est possible . Suivez ces étapes pour obtenir un fichier .Java à partir d'un fichier apk.
Step1. Utiliser dex2jar
dex2jar sampleApp.apk
Step2. Décompiler .jar à l'aide de JD-GUI
Les dernières Debian ont Python paquet 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
Installez les paquets correspondants:
Sudo apt-get install androguard python-networkx
Décompiler le fichier DEX:
$ androdd -i classes.dex -o ./dir-for-output
Extrait classes.dex
de Apk + Decompile:
$ androdd -i app.apk -o ./dir-for-output
Le fichier Apk n'est rien de plus que l'archive Java (JAR), vous pouvez extraire des fichiers d'archive via:
$ unzip app.apk -d ./dir-for-output
Beaucoup de choses ont changé depuis que la plupart de ces réponses ont été postées. De nos jours, il existe de nombreux outils faciles à utiliser avec une interface graphique, comme ceux-ci:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Le meilleur endroit pour les trouver est sur le forum XDA Developers.
Puisque la réponse de Dheeraj Bhaskar
est relativement ancienne, il y a de nombreuses années.
Voici ma dernière réponse (année 2019):
de dex
à Java sourcecode
, a actuellement deux types de solution:
One Step
: convertit directement dex
en Java sourcecode
Two Step
: convertit d'abord dex
en jar
, ensuite convertit jar
en Java sourcecode
dex
directement à Java sourcecode
bin
peut voir la ligne de commande jadx
ou la version de l'interface graphique jadx-gui
, double-cliquez pour exécuter la version de l'interface graphique : jadx-gui
dex
alors peut montrer Java code source:
File
-> save as gradle project
puis j'ai Java code source:
dex
à jar
télécharger dex2jar Zip , décompressez got d2j-dex2jar.sh
, puis:
apk
à jar
: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
à jar
: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
exemple:
➜ 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
à Java sourcecode
many
va décompiler l'erreurminor
se décompilerano
erreur de décompile du code Procyon
ici démo Procyon
convertir jar en Java code source:
télécharger procyon-decompiler-0.5.34.jar
puis en utilisant la syntaxe:
Java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
exemple:
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
using editor VSCode pour ouvrir le code source exporté, ressembler à ceci:
Correction de la conversion: Jadx
> Procyon
> CRF
> JD-GUI
Utilisation recommandée: (Solution en une étape) Jadx
pour des explications plus détaillées, veuillez vous référer à mon ebook en ligne en chinois : 应用 的 安全 和 破解
Vous pouvez essayer JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), c'est un outil parfait pour la décompilation DEX.
Et oui, il est également disponible en ligne sur (mon: 0)) nouveau site: http://www.javadecompilers.com/apk/
La méthode la plus simple pour décompiler une application Android consiste à télécharger une application nommée ShowJava à partir du magasin de jeux. Sélectionnez simplement l'application à décompiler dans la liste des applications. Il existe trois décompilateurs différents que vous pouvez utiliser pour décompiler une application, à savoir:
CFR 0.110, JaDX 0.6.1 ou FernFlower (décompilateur analytique).
Cela peut être fait en cinq étapes:
Si vous ne souhaitez pas télécharger dex2jar, utilisez simplement le script apk_grabber
python pour décompiler tout apk en fichiers jar. Ensuite, vous les lisez avec jd-gui.