décompiler DEX en code source Java
Comment peut-on décompiler des fichiers Android DEX (bytecode VM) dans le code source Java correspondant?
17 answers
C'est facile
Obtenez ces outils:
-
Dex2jar pour traduire des fichiers dex en fichiers jar
-
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
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 d'ajouter l'autorisation d'exécution au répertoire
dex2jar-X.X
, par exemplesudo chmod -R +x dex2jar-2.0
Étape 2:
Ouvrez le pot dans JD-GUI
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.
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.
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 .
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!
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 directementdex
àjava sourcecode
-
Two Step
: d'abord convertirdex
àjar
, deuxième convertirjar
àjava sourcecode
Solution en une étape: dex
directement à java sourcecode
Outils
Processus
- télécharger jadx-0.9.0.zip , décompressez-le, dans le dossier
bin
peut voir la ligne de commandejadx
ou la version GUIjadx-gui
, double-cliquez pour exécuter la version GUI:jadx-gui
- ouvrir
dex
fichier
Peut alors afficher le code source java:
-
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 gotd2j-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
-
jd-gui : le plus populaire, mais
many
le code décompile l'erreur -
CRF : populaire,
minor
le code décompile l'erreur -
Procyon: populaire,
no
décompiler le code d'erreur- Outil GUI basé sur
Procyon
- Outil GUI basé sur
- autres
- Krakatau
- Fernflower
- ancien: AndroChef
- etc.
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 : 安卓应用的安全和破解
J'ai utilisé
- dex2jar + jd-gui
- javadecompilers.com
- enjarify
- Apktool
Mais aucun ne bat les propres outils de Google
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
Une fois que vous avez téléchargé votre fichier APK , Vous devez suivre les étapes suivantes pour obtenir un code/document java modifiable.
- 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...
- Extrayez le fichier zip , vous pouvez y trouver somefilename.dex. alors maintenant, nous devons convertir dex -> .classe
- 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.)
- 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)
- 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.
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 .
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.
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
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.
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/
Cela peut être fait en cinq étapes:
Ce bijou fait ces choses pour vous, automatiquement, même l'installation des outils nécessaires
- convertir le fichier apk en zip
- décompressez le fichier
- extraire les classes.dex de celui-ci
- utilisez dex to jar pour convertir les classes.dex dans le fichier jar
- utilisez l'interface graphique jadx pour ouvrir le fichier jar en tant que code source java
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) .
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.