Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Comment décompiler une application Android (APK) et la recompiler ensuite

Le week-end dernier, j’ai bidouillé un peu sur mon smartphone Android. C’était merveilleux. Je l’ai rooté d’abord, car je voulais extraire une base de données d’une application, et également installer dessus des applications que j’aurai décompilées puis recompilées.

Je me suis dit que ce serait intéressant de vous faire un petit tuto reverse engineering d’application Android pour rigoler. C’est pas la première fois que je décompile un APK, mais c’était la première fois que je recompilais un truc modifié, donc si vous avez des précisions à apporter, d’autres outils ou des conseils, n’hésitez pas.

Récupérer l’APK

Pour récupérer l’APK, vous avez plusieurs possibilités. Vous pouvez passer APKGK pour récupérer l’APK qui vous intéresse, mais c’est une copie sur un site tiers, donc c’est pas forcément à jour.

Autrement, voici une méthode pour récupérer l’APK directement sur le smartphone. Votre téléphone doit être en mode développeur avec le debugging USB activé.

Vous devez également avoir le SDK Android sur votre ordinateur pour profiter des utilitaires, notamment ADB. Connectez votre smartphone Android à votre ordinateur en USB.

Ouvrez un terminal et entrez la commande suivante :

./adb devices

Vous verrez alors votre smartphone Android qui est bien connecté à votre ordinateur.

Téléchargement de l'APK de l'application Android

Ensuite, vous pouvez lister les applications installées sur votre smartphone à l’aide de la commande :

./adb shell pm list packages
Processus de décompilation et de recompilation d'une application Android

On va isoler l’application qui nous intéresse. Pour ma part, ce sera TousAntiCovid, dans le cadre de leur programme de Bug Bounty. Attention, la décompilation de logiciels est encadrée par la loi et vous trouverez plus d’infos ici. Techniquement, je n’ai pas altéré l’application en question, je l’ai juste décompilé puis recompilé pour valider le process technique. J’ai pris celle-ci pour l’exemple et ce tuto fonctionnera avec n’importe quelle application.

Pour filtrer un peu ça, utilisons un grep et mettons le mot clé de l’application que nous cherchons :

./adb shell pm list packages | grep covid
Fenêtre de terminal affichant la commande pour décompiler l'APK

On a donc le nom du package et ce qu’on aimerait, c’est le chemin pour récupérer l’APK. Pour cela, entrez la commande :

./adb shell pm path fr.gouv.android.stopcovid

Et vous aurez alors la liste des packages APK avec leur chemin d’accès.

Code source de l'APK décompilé dans Android Studio

Maintenant pour récupérer l’APK, rien de plus simple, il suffit de faire un petit adb pull.

./adb pull /data/app/fr.gouv.android.stopcovid-we-r7EfghHIaaEHoiugrwg==/base.apk

Bravo, vous venez de récupérer le .APK sur votre ordinateur !

Décompiler l’APK et lire le code

Maintenant on va regarder ce qu’il y a dedans.

Pour cela, il faut utiliser l’outil Apktool qui permet de désassembler l’APK et ses ressources, mais aussi de recompiler tout ça. Ici je décompile donc le fichier base.apk avec le paramètre « d ».

./apktool d base.apk
Modification du code source de l'application Android

Voilà, vous aurez le code, notamment des fichiers smali, qui est un équivalent lisible par un humain du code bas niveau Dalvik.

J’en conviens, ce n’est pas très user friendly donc je vous propose un logiciel complémentaire nommé JadX qui dispose d’une interface graphique et qui « traduit » le code smali en code java lisible par un informaticien lambda.

Recompilation de l'APK modifié

Une fois installé, lancez jadx-gui puis ouvrez l’APK. Vous aurez alors une jolie vue plongeante dans le code en java et son équivalent smali. Cela n’extrait pas directement le code comme apktool, mais permet de voir ce qu’il y a dans l’APK. Les 2 outils sont complémentaires.

Vous pouvez aussi faire des recherches sur certaines chaînes de caractères présentes dans le code :

Installation de l'APK recompilé sur un smartphone Android

Modifier le code

Par contre, vous ne pouvez pas modifier directement le code via Jadx. Utilisez simplement un éditeur texte ou votre éditeur de code préféré pour éditer les fichiers. Il faudra écrire votre code directement au format smali.

Vous pourrez aussi modifier les ressources (images, chaines de caractères…etc).

Recompiler l’application

Une fois les fichiers modifiés, vous pouvez recompiler l’app à l’aide de la commande apktool, comme ceci :

./apktool b DOSSIER-DES-SOURCES
Comparaison des fichiers de l'APK original et de l'APK recompilé

Et vous obtiendrez un APK. Mais attendez, ce n’est pas fini. Cet APK il va falloir le signer pour qu’Android accepte de l’installer.

Signer l’APK

Pour auto-signer un APK, vous devez d’abord créer une clé RSA sur votre ordinateur.

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Puis signer l’APK en utilisant cette clé :

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore VOTRE-APPLICATION.apk alias_name

Il existe aussi un outil qui fait le job qui s’appelle apksigner.

Outil de décompilation d'APK

Mettre l’application dans le smartphone

Ensuite, y’a plus qu’à transférer l’application sur le smartphone pour l’installer. Là vous avez plusieurs méthodes. Donc le transfert bête et méchant par mail, Dropbox ou ce que vous voulez.

Mais pour faire ça propre, vous pouvez également utiliser adb :

./adb push APPLICATION.apk /sdcard/

Ou pour l’installer directement depuis l’ordinateur sans la transférer, faites un :

./adb install APPLICATION.apk
Outil de recompilation d'APK

Et voilà ! Vous aurez ainsi votre application Android modifiée directement installée sur votre smartphone et y’a plus qu’à jouer avec.

Il se peut que selon la surcouche Android que vous avez, certaines sécurités soient en place. C’est le cas avec MIUI de Xiaomi qui scanne et contrôle la sécurité de la moindre application qu’on souhaite installer. Donc si ça ne s’installe pas directement, pensez à gratter un peu dans les options pour retirer les sécurités tout en ayant conscience que cela peut vous exposer à d’éventuels malwares ou cybercriminels. Donc, pensez à tout réactiver ensuite.


Les articles du moment