136 votes

Décompiler les fichiers .smali sur un APK

J'ai téléchargé Gestionnaire APK qui me permet de décompresser les fichiers APK.

Mais il ne fait que le décompacter et ne décompile pas le fichier .smali en .java.

Est-il possible de décompiler le .smali en .java ?

116voto

Aleadam Points 25433

Non, APK Manager décompile le site .dex dans .smali et binaire .xml en format xml lisible par l'homme.

La séquence (basée sur APK Manager 4.9) est la suivante 22 pour sélectionner le paquet, puis 9 pour le décompiler. Si vous appuyez sur 1 au lieu de 9, vous ne ferez que le décompresser (utile uniquement si vous voulez échanger des images .png).

Il n'y a pas d'outil disponible pour décompiler en retour à .java et très probablement il n'y en aura pas. Il existe une alternative, qui consiste à utiliser dex2jar pour transformer le fichier dex en un fichier .class puis utilisez un décompilateur jar (tel que le logiciel gratuit jd-gui ) en texte brut java. Le processus est loin d'être optimal, cependant, et il ne générera pas de code fonctionnel, mais il est suffisamment décent pour pouvoir le lire.

dex2jar : https://github.com/pxb1988/dex2jar

jd-gui : http://jd.benow.ca/

Editar: Je savais qu'il y avait quelque part ici en SO une question avec des réponses très similaires... décompilation de DEX en code source Java

1 votes

Alors comment emballer les fichiers édités (.java/.class/.smali/.jar) à nouveau dans un fichier apk pls aide.

8 votes

JD-GUI s'en approche, mais pas suffisamment.

4 votes

@Aleadam Voulez-vous dire APK Manager ou APKTool ? Je n'ai trouvé nulle part une page d'installation pour APK Manager. Cependant, APKTool "décompile le fichier .dex en .smali et le .xml binaire en xml lisible par l'homme" - comme vous l'avez dit.

35voto

gomino Points 2693

Il existe un nouvel outil multiplateforme (java) et open source, qui vous permet de le faire, il suffit de vérifier https://bytecodeviewer.com

enter image description here

\=========

EDIT : Depuis avril 2017, il existe un nouvel outil open source développé par google, qui est censé faire exactement ce que nous recherchions =>. https://github.com/google/Android-classyshark

1 votes

Cet outil permet de Java exception au départ

0 votes

Une solution de contournement simple pour Java exception au démarrage serait exécuté avec jdk7 en ligne de commande : java -jar BytecodeViewer x.y.z.jar . Pour vous assurer que vous travaillez avec jdk7, vérifiez la sortie de java -version

4 votes

Classyshark ne produit pas de code Java. Je cite la description : "Il peut parcourir de manière fiable n'importe quel exécutable Android et montrer des infos importantes comme les interfaces et les membres des classes, le nombre de dex et les dépendances."

28voto

Daryn Points 204

Dex2jar aide à décompiler votre apk mais pas à 100%. Vous aurez des problèmes avec les fichiers .smali. Dex2jar ne peut pas les convertir en java. Je connais une application qui peut décompiler vos fichiers source apk et aucun problème avec les fichiers .smali. Voici un lien http://www.hensence.com/en/smali2java/

1 votes

Expliquez, s'il vous plaît, pourquoi ma réponse a été déclassée ?

0 votes

J'aimerais pouvoir voter deux fois pour contrer le vote négatif. L'application liée fonctionne comme un charme. Ce doit être l'option la plus facile que dex2jar.

0 votes

Je ne peux pas enregistrer les fichiers décompilés.

3voto

christoph Points 11

Ma recommandation est la suivante Virtuous Ten Studio . L'outil est gratuit mais ils suggèrent une donation. Il combine toutes les étapes nécessaires (déballage de l'APK, baksmaliing, décompilation, etc.) en un seul processus d'importation basé sur une interface utilisateur facile à utiliser. En cinq minutes, vous devriez disposer du code source Java, soit moins qu'il n'en faut pour comprendre les options de la ligne de commande de l'un des outils mentionnés ci-dessus.

Décompiler smali en Java est un processus inexact, surtout si les artefacts smali sont passés par un obfuscateur. Vous pouvez trouver plusieurs décompilateurs sur le web mais seuls certains d'entre eux sont encore maintenus. Certains vous donneront un meilleur code décompilé que d'autres. Lisez "meilleur" comme dans "plus compréhensible" que les autres. Ne vous attendez pas à ce que le code Java issu de l'ingénierie inverse soit compilé immédiatement. Virtuous Ten Studio est livré avec plusieurs décompilateurs Java gratuits intégrés, vous pouvez donc facilement essayer différents décompilateurs (l'étape "Generate Java source") pour voir lequel vous donne les meilleurs résultats, ce qui vous épargne le temps de trouver ces décompilateurs vous-même et de comprendre comment les utiliser. Parmi eux se trouve CFR, qui est l'un des rares décompilateurs gratuits et encore maintenus.

Comme résultat, vous recevez, entre autres, une structure de dossiers qui contient tout le code source Java décompilé. Vous pouvez ensuite l'importer dans IntelliJ IDEA ou Eclipse pour le modifier, l'analyser (par exemple, aller à la définition, trouver les utilisations), etc.

0 votes

Christoph, est-ce que Virtuous Ten Studio prend en charge le refactoring des méthodes/classes in-smali ?

10 votes

Pouvez-vous préciser votre affiliation à Virtuous ?

1 votes

Virtous ne convertit pas smali en java correctement. Donne des erreurs indiquant que le fichier .java n'est pas trouvé alors qu'il devrait se générer tout seul. Une perte de temps

1voto

Avijit Points 80

Je suis d'accord.

Dex2jar va générer un jar WORKING, que vous pouvez ajouter comme source de votre projet, avec les xmls que vous avez obtenus de apktool.

Cependant, JDGUI génère des fichiers .java qui contiennent le plus souvent des erreurs.

Cela a quelque chose à voir avec l'obscurcissement du code, je suppose.

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