Question décompilation de DEX en Java sourcecode


Comment peut-on décompiler les fichiers Android DEX (VM bytecode) en code source Java correspondant?


643
2017-08-08 21:39


origine


Réponses:


C'est facile

Obtenez ces outils:

1) dex2jar traduire les fichiers dex en fichiers jar

2) jd-gui pour voir les fichiers java dans le pot

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

Procédure:

Et voici la procédure à suivre pour décompiler:

Étape 1:

Convertir 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

Remarque: Dans les machines Windows tous les .sh les scripts sont remplacés par .bat scripts

Documentation dex2jar

Étape 2:

Ouvrez le pot dans JD-GUI

The decompiled source


825
2017-11-04 23:40



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, comme le mentionne Fred. La source résultante est utile pour lire et comprendre la fonctionnalité d'une application, mais ne produira probablement pas 100% de code utilisable. 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 sensiblement plus difficile à démêler.

L'autre alternative majeure est de démonter le bytecode Smali, un langage d'assemblage conçu précisément dans ce but. J'ai trouvé que la façon la plus simple de le faire est de apktool. Une fois que vous avez installé apktool, vous pouvez simplement le pointer sur un fichier apk, et vous obtiendrez un fichier smali pour chaque classe contenue dans l'application. Vous pouvez lire et modifier les classes smali ou même remplacer entièrement les classes en générant smali à partir de la nouvelle source Java (pour cela, vous pouvez compiler votre source .java en fichiers .class avec javac, puis convertir vos fichiers .class en fichiers .dex avec Android compilateur dx, puis utilisez baksmali (smali désassembleur) pour convertir le fichier .dex en fichiers .smali, comme décrit dans cette question. Il pourrait y avoir un raccourci ici). Une fois que vous avez terminé, vous pouvez facilement empaqueter l'apk avec apktool. Notez que apktool ne signe pas l'apk qui en résulte, vous devrez donc prendre soin de cela comme n'importe quelle autre application Android.

Si vous allez la route smali, vous pouvez essayer 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 périphérique.

Bref, vos choix sont plutôt soit de décompiler en Java, plus lisible mais probablement irréversible, soit de se désassembler en smali, plus difficile à lire mais beaucoup plus souple pour faire des changements et reconditionner une application modifiée. L'approche que vous choisissez dépend de ce que vous cherchez à réaliser.

Enfin, la suggestion de oser est également à noter. C'est un outil de retargeting pour convertir les fichiers .dex et .apk en fichiers java .class, afin qu'ils puissent être analysés en utilisant des outils d'analyse statique java typiques.


124
2017-08-09 10:48



Je recommande vraiment d'aller ici: https://github.com/JesusFreke/smali

Il fournit BAKSMALI, qui est un excellent outil d'ingénierie inverse pour les fichiers DEX. C'est fait par JesusFreke, le gars qui a créé les ROMs fameous pour Android.


59
2018-01-09 18:01



Une version plus complète de fredde répondre:

Manière manuelle

D'abord, vous avez besoin d'un outil pour extrait toutes les classes (compilées) sur le DEX vers un JAR.
Il y a un appelé dex2jar, qui est faite par un étudiant chinois.

Ensuite, vous pouvez utiliser jd-gui à décompiler les classes sur le JAR au code source.
La source résultante devrait être très lisible, car dex2jar applique certaines optimisations.

Manière automatique

Vous pouvez utiliser APKTool. Ce sera automatiquement extraire toutes les classes (.dex), Ressources (.asrc), alors il va convertir XML binaire à XML lisible par l'hommeet il sera aussi démonter les cours pour vous.
Le désassemblage sera toujours plus robuste que la décompilation, notamment avec
JAR obfusqués avec Pro Guard!

Dites simplement à APKTool de décoder l'APK dans un répertoire, puis modifier ce que tu veux,
et enfin encoder retour à un APK. C'est tout.

Important: APKTool dissoudre. Ça ne fait pas décompiler.
Le code généré ne sera pas une source Java.
Mais vous devriez être capable de le lire, et même le modifier si vous êtes familier avec jasmin.
Si vous voulez une source Java, s'il vous plaît allez sur le Manière manuelle.


26
2018-03-04 21:07



Parfois, vous obtenez du code cassé, en utilisant dex2jar/apktool, notamment dans les boucles. Pour éviter cela, utilisez jadx, qui décompile le bytecode dalvik en code source java, sans créer de .jar/.class déposer d'abord comme 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 GUI-fanatiques. Essayez-le!


19
2017-08-17 07:22



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

Installez how-to 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): Une enquête sur la sécurité des applications Android


15
2018-04-26 08:36



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

  1. Convertissez votre fichier apk en zip (alors que votre téléchargement ne va pas avec l'option "save", allez simplement avec "save as" et mentionnez votre extension en .zip) en faisant comme ceci vous pouvez éviter APKTOOL ...
  2. Extraire le fichier zip, vous pouvez trouver somefilename.dex. alors maintenant nous devons convertir dex -> .class
  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 nomdufichier.dex] (Gardez à l'esprit que votre nom_de_fichier.dx doit se trouver dans le même dossier que celui 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 y avoir lieu à la place de "jad.exe", il suffit de renommer son extension as.exe pour exécuter)
  5. Enfin, dans l'invite de commande, vous devez mentionner comme [D: \ jad> jad -sjava votrefichier.class] il va analyser votre fichier de classe en document java éditable.

13
2018-04-23 07:43



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

Décompiler vers Java n'est pas possible pour autant que je sache.
Vous pouvez lire à propos de dalvik bytecode ici.


8
2018-02-09 16:29



Android Reverse Engineering est possible   . Suivez ces étapes pour obtenir le fichier .java à partir du fichier apk.

Étape 1 . En utilisant dex2jar

  • Générer un fichier .jar à partir du fichier .apk
  • commande: dex2jar sampleApp.apk

Étape 2 . Décomposer .jar en utilisant JD-GUI

  • il décompile les fichiers .class, c'est-à-dire que nous obtiendrons obfusqué .java de retour de l'apk.

8
2017-11-03 05:43



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 avec des interfaces graphiques, comme celles-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.


5
2018-03-22 15:48