décompiler DEX en code source Java


Comment peut-on décompiler des fichiers Android DEX (bytecode VM) dans le code source Java correspondant?

Author: vitaut, 2009-08-08

17 answers

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 pot

Le code source est assez lisible car dex2jar fait quelques optimisations.

Procédure:

Et voici la procédure pour décompiler:

Étape 1:

Convertir les classes.dex dans test_apk-déboguer.apk pour 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: Dans les machines Windows, tous les scripts .sh sont remplacés par des scripts.bat

Remarque 2: Sur linux/mac n'oubliez pas sh ou bash. La commande complète doit être:

sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

Remarque 3: N'oubliez pas d'ajouter l'autorisation d'exécution au répertoire dex2jar-X.X, par exemple sudo chmod -R +x dex2jar-2.0

Documentation Dex2jar

Étape 2:

Ouvrez le pot dans JD-GUI

La source décompilée

 903
Author: Dheeraj Bhaskar, 2020-08-27 10:24:16

Pour clarifier quelque peu, il y a deux chemins principaux que vous pourriez prendre ici en fonction de ce que vous voulez accomplir:

Décompiler le bytecode Dalvik (dex) en source Java lisible. Vous pouvez le faire facilement avec dex2jar et jd-gui, fred mentionne. 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 modifier et réorganiser la il. Note que si la source a été obscurcie avec proguard, le code source résultant sera nettement plus difficile à démêler.

L'autre alternative majeure consiste à désassembler le bytecode en smali, un langage assembleur conçu précisément dans ce but. J'ai trouvé que la façon la plus simple de le faire est avec apktool. Une fois que vous avez installé apktool, vous pouvez simplement le pointer vers un fichier apk, et vous récupérerez un fichier smali pour chaque classe contenue dans le 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 vers .fichiers de classe avec javac, puis convertissez votre .les fichiers de classe pour .fichiers dex avec le compilateur dx d'Android, puis utilisez baksmali (smali désassembleur) pour convertir le .dex à .smali fichiers, comme décrit dans cette question. Il pourrait y avoir un raccourci ici). Une fois que vous avez terminé, vous pouvez facilement empaqueter la sauvegarde apk avec apktool Encore une fois. Notez qu'apktool ne signe pas l'apk résultant, vous devrez donc vous en occuper comme toute autre application Android.

Si vous suivez la route smali, vous voudrez peut-être essayer APK Studio, unE qui automatise certaines des étapes ci-dessus pour vous aider à décompiler et recompiler un 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, soit de désassembler à smali, qui est plus difficile à lire, mais beaucoup plus flexible pour apporter des modifications et reconditionner une application modifiée. L'approche que vous choisissez dépend de ce que vous cherchez à réaliser.

Enfin, la suggestion de ose est aussi à noter. C'est un outil de reciblage pour convertir .dex et .fichiers apk en java .fichiers de classe, afin qu'ils puissent être analysés à l'aide d'outils d'analyse statique java typiques.

 140
Author: Zach Lipton, 2017-05-23 12:18:13

Je recommanderais vraiment 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 fameuses ROM pour Android.

 61
Author: reflog, 2016-07-28 07:36:17

Une version plus complète de fred's répondre:

Voie manuelle

Vous avez d'abord besoin d'un outil pour extraire toutes les classes (compilées) sur le DEX dans un JAR.
Il y en a un qui s'appelle dex2jar, qui est fait par un étudiant chinois.

Ensuite, vous pouvez utiliser jd-gui à décompiler les classes sur le POT au code source.
La source résultante devrait être assez lisible, car dex2jar en applique certains optimisation.

Voie automatique

Vous pouvez utiliser APKTool. Il extraira automatiquementtoutes les classes (.dex), les ressources (.asrc), puis il convertira XML binaireen XML lisible par l'homme, et il dissemblera également les classes pour vous.
Le désassemblage sera toujours plus robuste que la décompilation, en particulier avec
Pots obscurcis avec Pro Guard!

Dites simplement à APKTool de décoder l'APK dans un répertoire, puis modifier ce que vous voulez,
et enfinencoder retour à un APK. C'est tout.

Important: APKTool dissassembles. Il ne décompile pas .
Le code généré ne sera pas source Java.
Mais vous devriez pouvoir le lire, et même le modifier si vous connaissezjasmin .
Si vous voulez Java source, veuillez passer en revue la méthode manuelle .

 30
Author: Alba Mendez, 2017-05-23 12:18:13

Parfois, vous obtenez du code cassé, lors de l'utilisation dex2jar/apktool, notamment dans les boucles. Pour éviter cela, utilisez jadx, qui décompile le bytecode dalvik en code source java, sans créer .jar/.class fichier d'abord comme le fait dex2jar (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. L'essayer!

 25
Author: polym, 2015-03-04 21:07:00

Puisque la réponse de Dheeraj Bhaskar est relativement ancienne comme de nombreuses années passées.

Voici ma dernière réponse (année 2019):

Logique Principale

De dex à java sourcecode, a actuellement deux types de solution:

  • One Step: convertir directement dex à java sourcecode
  • Two Step: d'abord convertir dex à jar, deuxième convertir jar à java sourcecode

Solution en une étape: dex directement à java sourcecode

Outils

Processus

  1. télécharger jadx-0.9.0.zip , décompressez-le, dans le dossier bin peut voir la ligne de commande jadx ou la version GUI jadx-gui, double-cliquez pour exécuter la version GUI: jadx-gui

  1. ouvrir dex fichier

Peut alors afficher le code source java:

  1. File -> save as gradle project

Puis a obtenu le code source java:


Solution en deux étapes

Étape 1: dex à jar

Outils

Processus

Il est possible de télécharger le fichier dex2jar zip, décompresser 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

Étape 2: jar à java sourcecode

Outils

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

Utilisation de l'éditeur VSCode pour ouvrir le code source exporté, ressemblez à ceci:

Conclusion

Exactitude de la conversion : Jadx > Procyon > CRF > JD-GUI

Recommander l'utilisation: (Solution en une étape) Jadx


Pour une explication plus détaillée, veuillez consulter mon ebook en ligne chinois : 安卓应用的安全和破解

 20
Author: crifan, 2019-04-03 02:44:35

J'ai utilisé

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

Mais aucun ne bat les propres outils de Google

1)Studio Android 2.x: construire> analyser apk entrez la description de l'image ici

2)Android Studio 3.0: Profil ou Débogage APK entrez la description de l'image ici entrez la description de l'image ici

 18
Author: ishandutta2007, 2017-09-19 21:48:12

Puisque personne ne l'a mentionné, il y a un autre outil: DED homepage

Comment installer et quelques explications: Installation .

Il a été utilisé dans une étude assez intéressante de la sécurité des applications du marché supérieur (pas vraiment liée, juste si vous êtes curieux): Une enquête sur la sécurité des applications Android

 15
Author: phaethon, 2011-08-17 07:22:19

Une fois que vous avez téléchargé votre fichier APK , Vous devez suivre les étapes suivantes pour obtenir un code/document java modifiable.

  1. Convertissez votre fichier apk en zip (pendant que vous démarrez votre téléchargement , n'utilisez pas l'option "enregistrer", utilisez simplement "enregistrer sous" et mentionnez votre extension sous .zip) en faisant comme ça, vous pouvez éviter APKTOOL...
  2. Extrayez le fichier zip , vous pouvez y trouver somefilename.dex. alors maintenant, nous devons convertir dex -> .classe
  3. Pour ce faire, vous avez besoin de "dex2jar" (vous pouvez le télécharger depuis http://code.google.com/p/dex2jar/ , après, extrait, dans l'invite de commande, vous devez mentionner comme, [D:\dex2jar-0.09>dex2jar somefilename.dex] (Gardez à l'esprit que votre somefilename.dex doit être dans le même dossier où vous avez conservé votre dex2jar.)
  4. Télécharger jad depuis http://www.viralpatel.net/blogs/download/jad/jad.zip et l'extraire. Une fois extrait, vous pouvez voir deux fichiers comme "jad.exe " et " Readme.txt" (parfois "jad.txt "peut-il au lieu de" jad.EXE", il suffit donc de renommer son extension en tant que.exe à exécuter)
  5. Enfin, dans l'invite de commande, vous devez mentionner comme [D:\jad>jad -sjava yourfilename.class] il analysera votre fichier de classe dans un document java modifiable.
 13
Author: Kamal, 2013-06-10 14:06:17

Avec Dedexer, vous pouvez désassembler le fichier .dex dans le bytecode dalvik (.ddx).

Décompiler vers Java n'est pas possible pour autant que je sache.
Vous pouvez lire sur dalvik bytecodeici .

 8
Author: hcpl, 2012-01-14 18:04:09

La rétro-ingénierie Android est possible . Suivez ces étapes pour obtenir .fichier java à partir du fichier apk.

Étape 1 . Utilisation de dex2jar

  • Générer .le fichier jar de .fichier apk
  • commande : dex2jar sampleApp.apk

Étape 2 . Décompiler .jar utilisant JD-GUI

  • il décompile le .les fichiers de classe, c'est-à-dire que nous obtiendrons obscurci .java de retour de l'apk.
 8
Author: gtiwari333, 2012-02-18 07:07:23

Debian récente 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

Installer les paquets correspondants:

sudo apt-get install androguard python-networkx

Décompiler le fichier DEX:

$ androdd -i classes.dex -o ./dir-for-output

Extraire classes.dex de Apk + Décompiler:

$ androdd -i app.apk -o ./dir-for-output

Le fichier Apk n'est rien de plus que Java archive (JAR), vous pouvez extraire des fichiers de l'archive via:

$ unzip app.apk -d ./dir-for-output
 6
Author: gavenkoa, 2017-04-03 06:33:04

Beaucoup de choses ont changé depuis que la plupart de ces réponses ont été publiées. Maintenant, il existe de nombreux outils faciles 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.

 5
Author: MPaulo, 2016-11-03 05:43:14

Vous pouvez essayer JADX (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), c'est un outil parfait pour la décompilation DEX.

Et oui, elle est également disponible en ligne sur (ma :0)) nouveau site: http://www.javadecompilers.com/apk/

 4
Author: Andrew Rukin, 2015-08-21 11:30:07

Cela peut être fait en cinq étapes:

Ce bijou fait ces choses pour vous, automatiquement, même l'installation des outils nécessaires

  1. convertir le fichier apk en zip
  2. décompressez le fichier
  3. extraire les classes.dex de celui-ci
  4. utilisez dex to jar pour convertir les classes.dex dans le fichier jar
  5. utilisez l'interface graphique jadx pour ouvrir le fichier jar en tant que code source java
 2
Author: Ajit Singh, 2016-01-31 06:17:42

La méthode la plus simple pour décompiler une application Android consiste à télécharger une application nomméeShowJava depuis playstore . Sélectionnez simplement l'application qui doit être décompilée 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) .

 2
Author: Rishabh Maurya, 2017-04-04 17:25:56

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.

 1
Author: Jeff Brateman, 2015-04-17 22:03:35