web-dev-qa-db-fra.com

Décompiler des fichiers .smali sur un APK

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

Mais cela ne fait que décompresser le fichier et ne pas décompiler le fichier .smali en .Java.

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

119
BimoZX

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

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

Il n'y a pas d'outil disponible pour décompiler en fichiers .Java et il ne sera probablement pas. Il existe une alternative, qui utilise dex2jar pour transformer le fichier dex en un fichier .class, puis pour utiliser un décompilateur jar (tel que comme libre 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 sera suffisamment décent pour pouvoir le lire.

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

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

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

100
Aleadam

Il existe un nouvel outil multi-plateforme (Java) et open source, qui vous permet de le faire, il suffit de passer à la caisse https://bytecodeviewer.com

enter image description here

=========

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

27
Gomino

dex2jar aide à décompiler votre apk mais pas à 100%. Vous aurez des problèmes avec les fichiers .smali. Dex2jar ne peut pas le 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/

26
Daryn

Ma recommandation est Virtuous Ten Studio . L'outil est gratuit mais ils suggèrent un don. Il combine toutes les étapes nécessaires (décompression des fichiers APK, compilation, décompilation, etc.) dans un processus d'importation simple et convivial. Dans un délai de cinq minutes, vous devriez avoir le code source Java, moins que nécessaire pour connaître les options de ligne de commande de l'un des outils mentionnés ci-dessus.

Décompiler smali en Java est un processus inexact, en particulier 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 toujours maintenus. Certains vous donneront un meilleur code décompilé que d'autres. Lire "mieux" comme dans "plus compréhensible" que d'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 afin que vous puissiez facilement essayer différents décompilateurs (étape "Générer Java source") pour voir lequel vous donne les meilleurs résultats. , en vous faisant gagner du temps pour trouver vous-même ces décompilateurs et comprendre comment les utiliser. CFR, qui est l’un des rares décompilateurs libres et toujours maintenus, fait partie de ces logiciels.

En sortie, vous recevez, entre autres, une structure de dossiers contenant tout le code source décompilé Java. Vous pouvez ensuite importer cela dans IntelliJ IDEA ou Eclipse pour une édition ultérieure, une analyse (par exemple, Aller à la définition, Trouver des usages), etc.

4
Christoph

Je suis d'accord.

Dex2jar générera un fichier jar WORKING que vous pouvez ajouter en tant que source de votre projet avec les fichiers XML fournis par apktool.

Cependant, JDGUI génère des fichiers .Java contenant le plus souvent des erreurs.

Je suppose que cela a quelque chose à voir avec l'obscurcissement du code.

1
Avijit