Smali - Decompiling/[Modifying]/Compiling
Parfois, il est intéressant de modifier le code de l'application pour accéder à des informations cachées pour vous (peut-être des mots de passe bien obfusqués ou des indicateurs). Ensuite, il pourrait être intéressant de décompiler l'APK, modifier le code et le recompiler.
Référence des opcodes : http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Méthode Rapide
En utilisant Visual Studio Code et l'extension APKLab, vous pouvez décompiler automatiquement, modifier, recompiler, signer et installer l'application sans exécuter de commande.
Un autre script qui facilite beaucoup cette tâche est https://github.com/ax/apk.sh
Décompiler l'APK
En utilisant APKTool, vous pouvez accéder au code smali et aux ressources :
Si apktool vous donne une erreur, essayez d'installer la dernière version
Certains fichiers intéressants à examiner sont:
res/values/strings.xml (et tous les fichiers XML à l'intérieur de res/values/*)
AndroidManifest.xml
Tout fichier avec l'extension .sqlite ou .db
Si apktool
a des problèmes pour décoder l'application, consultez https://ibotpeaches.github.io/Apktool/documentation/#framework-files ou essayez d'utiliser l'argument -r
(Ne pas décoder les ressources). Ensuite, si le problème était dans une ressource et non dans le code source, vous n'aurez pas le problème (vous ne décompilerez pas non plus les ressources).
Modifier le code Smali
Vous pouvez modifier des instructions, changer la valeur de certaines variables ou ajouter de nouvelles instructions. Je modifie le code Smali en utilisant VS Code, vous installez ensuite l'extension smalise et l'éditeur vous indiquera si une instruction est incorrecte. Certains exemples peuvent être trouvés ici:
Ou vous pouvez vérifier ci-dessous certaines modifications Smali expliquées.
Recompilez l'APK
Après avoir modifié le code, vous pouvez recompiler le code en utilisant:
Il va compiler le nouveau APK à l'intérieur du dossier dist.
Si apktool lance une erreur, essayez d'installer la dernière version
Signer le nouveau APK
Ensuite, vous devez générer une clé (vous devrez entrer un mot de passe et quelques informations que vous pouvez remplir de manière aléatoire):
Enfin, signez le nouveau APK :
Optimiser la nouvelle application
zipalign est un outil d'alignement d'archive qui fournit une optimisation importante aux fichiers d'application Android (APK). Plus d'informations ici.
Signer le nouvel APK (encore?)
Si vous préférez utiliser apksigner au lieu de jarsigner, vous devriez signer l'APK après avoir appliqué l'optimisation avec zipalign. MAIS REMARQUEZ QUE VOUS DEVEZ SIGNER L'APPLICATION UNE SEULE FOIS AVEC jarsigner (avant zipalign) OU AVEC apksigner (après zipalign).
Modification de Smali
Pour le code Java Hello World suivant :
Le code Smali serait :
Le jeu d'instructions Smali est disponible ici.
Modifications légères
Modifier les valeurs initiales d'une variable à l'intérieur d'une fonction
Certaines variables sont définies au début de la fonction en utilisant l'opcode const, vous pouvez modifier leurs valeurs, ou vous pouvez en définir de nouvelles :
Opérations de base
Changements Importants
Journalisation
Recommandations :
Si vous allez utiliser des variables déclarées à l'intérieur de la fonction (déclarées v0, v1, v2...), placez ces lignes entre .local <nombre> et les déclarations des variables (const v0, 0x1)
Si vous souhaitez placer le code de journalisation au milieu du code d'une fonction :
Ajoutez 2 au nombre de variables déclarées : Ex : de .locals 10 à .locals 12
Les nouvelles variables doivent être les nombres suivants des variables déjà déclarées (dans cet exemple, ce devrait être v10 et v11, rappelez-vous que cela commence par v0).
Modifiez le code de la fonction de journalisation et utilisez v10 et v11 au lieu de v5 et v1.
Toasting
N'oubliez pas d'ajouter 3 au nombre de .locals au début de la fonction.
Ce code est prêt à être inséré au milieu d'une fonction (changez le nombre de variables selon les besoins). Il prendra la valeur de this.o, la transformera en String et affichera un toast avec sa valeur.
Last updated