770 votes

décompilation de DEX en code source Java

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

0 votes

Jetez un coup d'œil aquí . Vous obtiendrez de là des pistes possibles pour avancer.

0 votes

Des informations mises à jour sont disponibles sur le blog coders hub : coders-hub.com/2013/04/comment-convertir-un-fichier-apk-en-source.html

0 votes

Si vous avez de l'argent, achetez jeb sinon, utilisez jadx voir aquí pourquoi

969voto

fred Points 3584

C'est facile.

Obtenez ces outils :

  1. dex2jar pour traduire les fichiers dex en fichiers jar

  2. jd-gui pour voir les fichiers java dans le jar

Le code source est assez lisible car dex2jar fait quelques 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
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex

Note 1 : Dans les machines Windows, toutes les .sh sont remplacés par .bat scripts

Note 2 : Sous linux/mac, n'oubliez pas les éléments suivants sh o bash . La commande complète devrait être :

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

Note 3 : N'oubliez pas non plus d'ajouter la permission d'exécuter à dex2jar-X.X répertoire, par exemple sudo chmod -R +x dex2jar-2.0

Documentation sur dex2jar

Étape 2 :

Ouvrez le jar dans JD-GUI.

The decompiled source

64 votes

+1. J'ai essayé à la fois Baksmali et Dex2jar. Dex2Jar+JD-Gui l'emporte en vous donnant un code source parfaitement lisible pour la plupart des fichiers .dex.

1 votes

Bonjour, Pouvez-vous s'il vous plaît partager la façon dont vous allez ? Je vous en serai très reconnaissant.

0 votes

Le code que m'a renvoyé JD-GUI était très bizarre (certaines activités étaient divisées en plusieurs activités comme Activité$1 Activité$2 etc). Il a fallu un peu de travail pour le démêler, mais beaucoup moins que de tout recommencer !

143voto

Zach Lipton Points 1061

Pour clarifier quelque peu, il existe deux voies principales que vous pouvez emprunter 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 y jd-gui comme le mentionne Fred. Le source résultant est utile pour lire et comprendre la fonctionnalité d'une application, mais ne produira probablement pas un 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é obfusquée avec proguard, le code source résultant sera beaucoup plus difficile à démêler.

L'autre alternative majeure consiste à désassembler le bytecode en smali Un langage d'assemblage conçu précisément dans ce but. J'ai trouvé que la manière la plus simple de le faire est avec apktool . Une fois apktool installé, il suffit de le faire pointer sur un fichier apk pour obtenir 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 le smali à partir d'une nouvelle source Java (pour ce faire, vous pourriez compiler votre source .java en fichiers .class avec javac, puis convertir vos fichiers .class en fichiers .dex avec le compilateur dx d'Android, et enfin utiliser baksmali (désassembleur de smali) pour convertir les fichiers .dex en fichiers .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 qu'apktool ne signe pas l'apk résultant, vous devez donc vous en occuper. comme toute autre application Android .

Si vous optez pour la voie du smali, vous pourriez essayer APK Studio L'outil de développement intégré (IDE) qui automatise certaines des étapes ci-dessus pour vous aider à décompiler et recompiler un apk et à l'installer sur un appareil.

En résumé, vous avez le choix entre décompiler en Java, ce qui est plus lisible mais probablement irréversible, ou désassembler en smali, ce qui est plus difficile à lire mais beaucoup plus flexible pour effectuer des changements et reconditionner une application modifiée. L'approche que vous choisirez dépendra de ce que vous cherchez à obtenir.

Enfin, la suggestion de oser est également à noter. Il s'agit d'un outil de reciblage permettant de convertir les fichiers .dex et .apk en fichiers java .class, afin qu'ils puissent être analysés à l'aide des outils d'analyse statique typiques de Java.

0 votes

Essayez APK Studio, c'était un choix étonnant

62voto

reflog Points 4994

En fait, je recommande 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 ROMs pour Android.

3 votes

Smali est un langage de type assembleur basé sur dalvik IL, il ne peut pas être directement traduit en Java.

0 votes

@endryha Il n'existe aucun outil capable de faire cela. Voir cette question pour plus d'informations.

1 votes

Code, code, code, ... Pourquoi seulement du code ? Si vous utilisez APKTool, vous obtenez tout arrière ! Et c'est aussi simple que ./apktool d myprogram.apk . Voir ma réponse .

32voto

jmendeth Points 2086

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

Manuelle

Il vous faut d'abord un outil pour extrait toutes les classes (compilées) du 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 a décompiler les classes du JAR en code source.
Le source résultant devrait être assez lisible, car dex2jar applique quelques optimisations.

Voie automatique

Vous pouvez utiliser APKTool . Il automatiquement extraire toutes les classes ( .dex ), les ressources ( .asrc ), alors il convertira XML binaire a XML lisible par l'homme et il sera également démonter les cours pour vous.
Le désassemblage sera toujours plus robuste que la décompilation, notamment avec
JARs obfusqués avec Pro Guard !

Dites simplement à APKTool de décoder l'APK dans un répertoire, puis modifier ce que vous voulez,
et enfin encoder et le transformer en APK. C'est tout.

Important : APKTool dissocie . Ce n'est 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 de l'éditer si vous êtes familiarisé avec jasmin .
Si vous souhaitez obtenir la source Java, veuillez consulter la page Manuelle .

24voto

Référez-vous à ce blog il montre clairement le processus de décompilation étape par étape androidorigin.blogspot.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X