Comment décompiler les fichiers Android DEX (VM bytecode) en code source Java correspondant?
java
android
reverse-engineering
decompiler
dex
Volonté
la source
la source
Réponses:
C'est facile
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.
Procédure:
Et voici la procédure de décompilation:
Étape 1:
Convertissez classes.dex dans test_apk-debug.apk en test_apk-debug_dex2jar.jar
documentation dex2jar
Étape 2:
Ouvrez le pot dans JD-GUI
la source
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.
la source
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.
la source
./apktool d myprogram.apk
. Voir ma réponse .Une version plus complète de la réponse de Fred :
Manière manuelle
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.
Manière automatique
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 .
la source
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 ledex2jar
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!la source
javac "$(find . -name '*.java')"
?j'ai utilisé
Mais rien ne vaut les propres outils de Google
1) Android Studio 2.x: build> analyser apk
2) Android Studio 3.0: profil ou débogage APK
la source
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
la source
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):
Logique principale
du
dex
aujava sourcecode
, propose actuellement deux types de solutions:One Step
: convertir directementdex
enjava sourcecode
Two Step
: première conversiondex
enjar
, deuxième convertirjar
enjava sourcecode
Solution en une étape:
dex
directementjava sourcecode
Outils
Processus
bin
dossier peut voir la ligne de commandejadx
ou la version GUIjadx-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:
Solution en deux étapes
Étape 1:
dex
pourjar
Outils
Processus
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:
Étape 2:
jar
pourjava sourcecode
Outils
many
code décompilera l'erreurminor
code décompilera l'erreurno
erreur de décompilation de codeProcyon
Processus
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:
Conclusion
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 : 安卓 应用 的 安全 和 破解
la source
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.
la source
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 .
la source
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
la source
Debian récent a un paquet Python
androguard
:Installez les packages correspondants:
Décompiler le fichier DEX:
Extrait
classes.dex
d'Apk + Decompile:Le fichier apk n'est rien de plus qu'une archive Java (JAR), vous pouvez extraire des fichiers de l'archive via:
la source
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:
Le meilleur endroit pour les trouver est sur le forum des développeurs XDA.
la source
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 source
Cela peut se faire en cinq étapes:
Ce bijou fait ces choses pour vous automatiquement même l'installation des outils nécessaires
la source
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 -
la source
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.la source