Comment décompiler les fichiers Android DEX (VM bytecode) en code source Java correspondant?
Comment décompiler les fichiers Android DEX (VM bytecode) en code source Java correspondant?
Réponses:
Obtenez ces outils:
1) dex2jar pour traduire des fichiers dex en fichiers jar
2) jd-gui pour afficher les fichiers java dans le bocal
Le code source est assez lisible car dex2jar fait quelques optimisations.
Et voici la procédure de décompilation:
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 1: sur les machines Windows, tous les
.sh
scripts sont remplacés par des.bat
scriptsRemarque 2: sous linux / mac, n'oubliez pas
sh
oubash
. La commande complète doit être:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Remarque 3: N'oubliez pas non plus d'ajouter l'autorisation d'exécution au
dex2jar-X.X
répertoire, par exemplesudo chmod -R +x dex2jar-2.0
Ouvrez le pot dans JD-GUI
Pour clarifier quelque peu, il existe deux voies principales que vous pouvez emprunter ici en fonction de ce que vous souhaitez accomplir:
Décompiler le bytecode Dalvik (dex) en source Java lisible. Vous pouvez le faire facilement avec dex2jar et jd-gui , comme le mentionne fred. La source résultante est utile pour lire et comprendre les fonctionnalités d'une application, mais ne produira probablement pas de code utilisable à 100%. En d'autres termes, vous pouvez lire la source, mais vous ne pouvez pas vraiment la modifier et la reconditionner. Notez que si la source a été obscurcie avec proguard, le code source résultant sera beaucoup plus difficile à démêler.
L'autre alternative majeure consiste à démonter le bytecode en smali , un langage d'assemblage conçu précisément à cet effet. J'ai trouvé que la façon la plus simple de le faire est avec apktool . Une fois apktool installé, vous pouvez simplement le pointer vers un fichier apk et vous récupérerez 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 d'une nouvelle source Java (pour ce faire, vous pouvez compiler votre source .java en fichiers .class avec javac, puis convertir vos fichiers .class en fichiers .dex avec Android's compilateur dx, puis utilisez baksmali (désassembleur smali) pour convertir les fichiers .dex en .smali, comme décrit dans cette question. Il peut y avoir un raccourci ici). Une fois que vous avez terminé, vous pouvez facilement empaqueter à nouveau l'apk avec apktool. Notez que apktool ne signe pas l'apk résultant, vous devrez donc vous en occuper comme toute autre application Android .
Si vous suivez la voie smali, vous voudrez peut-être essayer APK Studio , un IDE qui automatise certaines des étapes ci-dessus pour vous aider à décompiler et recompiler une apk et à l'installer sur un appareil.
En bref, vos choix sont à peu près soit de décompiler en Java, qui est plus lisible mais probablement irréversible, ou de démonter en smali, qui est plus difficile à lire mais beaucoup plus flexible pour apporter des modifications et reconditionner une application modifiée. L'approche que vous choisiriez dépendrait de ce que vous cherchez à réaliser.
Enfin, la suggestion d' oser est également à noter. C'est un outil de reciblage pour convertir des fichiers .dex et .apk en fichiers java .class, afin qu'ils puissent être analysés à l'aide d'outils d'analyse statique java typiques.
Je recommanderais en fait d'aller ici: https://github.com/JesusFreke/smali
Il fournit BAKSMALI, qui est un excellent outil de rétro-ingénierie pour les fichiers DEX. Il est fait par JesusFreke, le gars qui a créé les ROM célèbres pour Android.
./apktool d myprogram.apk
. Voir ma réponse .
Une version plus complète de la réponse de Fred :
Vous avez d'abord besoin d'un outil pour extraire toutes les classes (compilées) du DEX dans un 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 JAR en code source.
La source résultante doit être assez lisible, car dex2jar applique certaines optimisations.
Vous pouvez utiliser APKTool . Il sera automatiquement extraire toutes les classes ( .dex
), les ressources ( .asrc
), il convertit XML binaire à XML lisible par l' homme , et il sera également dissassemble les classes pour vous.
Le démontage sera toujours plus robuste que la décompilation, en particulier avec les
fichiers JAR masqués par Pro Guard!
Il suffit de dire à APKTool de décoder l'APK dans un répertoire, puis de modifier ce que vous voulez,
et enfin de le recoder en APK. C'est tout.
Important: APKTool se démonte . Il ne se décompile pas .
Le code généré ne sera pas une source Java.
Mais vous devriez pouvoir le lire, et même le modifier si vous êtes familier avec jasmin .
Si vous voulez une source Java, veuillez suivre la voie manuelle .
Parfois, vous obtenez du code cassé, lorsque vous utilisez dex2jar
/ apktool
, notamment dans les boucles. Pour éviter cela, utilisez jadx , qui décompile le bytecode dalvik en code source java, sans créer d'abord un fichier .jar
/ .class
comme le 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 l'interface graphique. Essayez!
javac "$(find . -name '*.java')"
?
j'ai utilisé
Mais rien ne vaut les propres outils de Google
Puisque personne ne l'a mentionné, il existe un autre outil: la page d'accueil DED
Installez le guide pratique et quelques explications: Installation .
Il a été utilisé dans une étude assez intéressante sur la sécurité des meilleures applications du marché (pas vraiment liées, juste si vous êtes curieux): A Survey of Android Application Security
Depuis Dheeraj Bhaskar
la réponse « est relativement vieux que de nombreuses années passées.
Voici ma dernière réponse (année 2019):
du dex
au java sourcecode
, propose actuellement deux types de solutions:
One Step
: convertir directement dex
enjava sourcecode
Two Step
: première conversion dex
en jar
, deuxième convertir jar
enjava sourcecode
dex
directementjava sourcecode
bin
dossier peut voir la ligne de commande jadx
ou la version GUI jadx-gui
, double-cliquez pour exécuter la version GUI:jadx-gui
dex
fichierpeut alors afficher le code source java:
File
-> save as gradle project
puis obtenu le code source java:
dex
pourjar
téléchargez 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
pourjava sourcecode
many
code décompilera l'erreurminor
code décompilera l'erreurno
erreur de décompilation de code
Procyon
ici démo Procyon
convertir jar en code source java:
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
en utilisant l'éditeur VSCode pour ouvrir le code source exporté, ressemble à ceci:
Correction de conversion: Jadx
> Procyon
> CRF
>JD-GUI
Utilisation recommandée: (Solution en une étape) Jadx
pour une explication plus détaillée, veuillez consulter mon livre électronique chinois en ligne : 安卓 应用 的 安全 和 破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
je viens de recevoir une exception:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
va ou pas?
>d2j-dex2jar.bat file.dex
mais ce n'est pas ok. c'est peut-être parce que mon .dex
fichier a été copié dalvik-cache
?
dex is copied from dalvik-cache
, devrait êtredex is decompiled from apk
Une fois que vous avez téléchargé votre fichier APK, vous devez effectuer les étapes suivantes pour obtenir un code / document Java modifiable.
Avec Dedexer , vous pouvez démonter le .dex
fichier en bytecode dalvik (.ddx
).
Pour autant que je sache, la décompilation vers Java n'est pas possible.
Vous pouvez lire sur le bytecode dalvik ici .
Android Reverse Engineering est possible . Suivez ces étapes pour obtenir le fichier .java à partir du fichier apk.
Étape 1 . Utilisation de dex2jar
dex2jar sampleApp.apk
Étape 2 . Décompilation de .jar à l'aide de JD-GUI
Debian récent a un paquet Python 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 packages correspondants:
sudo apt-get install androguard python-networkx
Décompiler le fichier DEX:
$ androdd -i classes.dex -o ./dir-for-output
Extrait classes.dex
d'Apk + Decompile:
$ androdd -i app.apk -o ./dir-for-output
Le fichier apk n'est rien de plus qu'une archive Java (JAR), vous pouvez extraire des fichiers de l'archive via:
$ unzip app.apk -d ./dir-for-output
Beaucoup de choses ont changé depuis que la plupart de ces réponses ont été publiées. De nos jours, il existe de nombreux outils simples avec des interfaces graphiques, 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 des développeurs XDA.
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/
Cela peut se faire en cinq étapes:
Ce bijou fait ces choses pour vous automatiquement même l'installation des outils nécessaires
La méthode la plus simple pour décompiler une application Android consiste à télécharger une application nommée ShowJava depuis Playstore. 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).
Si vous ne cherchez pas à télécharger dex2jar, utilisez simplement le apk_grabber
script python pour décompiler n'importe quel apk en fichiers jar. Ensuite, vous les lisez avec jd-gui.