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 ?
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 ?
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
Alors comment emballer les fichiers édités (.java/.class/.smali/.jar) à nouveau dans un fichier apk pls aide.
@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.
Il existe un nouvel outil multiplateforme (java) et open source, qui vous permet de le faire, il suffit de vérifier https://bytecodeviewer.com
\=========
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
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
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."
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/
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.
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.
Christoph, est-ce que Virtuous Ten Studio prend en charge le refactoring des méthodes/classes in-smali ?
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
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 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.