Vous le savez peut-être, les applications Android sont très simples à analyser afin de comprendre leur fonctionnement interne. La raison ? Le code embarqué est un code interprété par une machine virtuelle, ce qui signifie que la rétro-ingénierie permet de produire du code lisible par un humain, à contrario du code assembleur, qui peut être fastidieux à comprendre dans le cadre d'une application moderne.

Quel outil utiliser pour analyser un APK ?

L'outil le plus simple que j'ai trouvé actuellement pour décompiler une application Android est JADX.
Il s'agit d'un logiciel Opensource disponible sur GitHub et disponible en standard sous forme de paquet sur Kali Linux disponible sur Windows avec WSL2.

Son interface graphique permet en un clic de découvrir l'ensemble de la structure du code de l'application.
C'est après avoir cliqué sur la classe à analyser que l'outil génère du code Java à la volée.

jadx-gui

Comment télécharger un APK ?

Un APK est une version compilée et packagée d'une application Android. Les APK sont les fichiers que votre Smartphone télécharge quand vous installez une nouvelle application depuis un magasin d'application.

Les APK peuvent être facilement téléchargeables depuis des sites comme ApkPure par exemple. Ces sites proposent en libre téléchargement les APK de la majorité des applications disponibles sur les magasins d'application officiels.

Vous pouvez bien sûr tester cet outil sur votre propre application.

Est-ce que le reverse engineering est légal en France ?

Le reverse enginering de code est protégé en France par l'article L122-6-1 afin de permettre l'interopérabilité de logiciels.

Au-delà d'un besoin d'interopérabilité, il est interdit de réaliser ce type de pratique sur des logiciels dont vous n'êtes pas l'auteur.

Comment modifier le code d'un APK ?

Il existe à ma connaissance deux possibilités :

  • Générer un projet complètement vierge via l'export "Gradle" proposé par Jadx. Mais attention, certaines classes peuvent provoquer des erreurs dans Jadx. Vous ne serez pas certain sur une application complexe d'obtenir l'exhaustivité du code source vous permettant de régénérer une application neuve.

  • L'autre alternative est de modifier le code source via un format Smali, un format de code moins lisible que le Java mais facilement modifiable sans devoir recompiler l'ensemble de l'application.

Dans les deux cas, l'application produite devra être signée avec votre certificat de développement pour pouvoir fonctionner sur un terminal Android.

Qu'est-ce que cela signifie pour la sécurité des applications Android ?

Si vous comptiez cacher des choses dans votre code : clef d'API, URL ... Sachez que ces éléments sont ouverts à tout pirate informatique qui peut s'intéresser la sécurité de l'application mobile.

Voici quelques recommandations :

  • Offusquer le code de vos applications avec des logiciels comme Proguard par exemple. Mais attention quand votre application crashera, il ne sera pas forcement évident de comprendre l'origine du crash ...
  • Ne stockez aucune donnée sensible dans votre application : Clef d'API, mot de passe ... Ces éléments de sécurité sont très simples à trouver depuis du code décompilé.

En conclusion

J'espère que cet article vous aura été instructif. N'oubliez pas que le code d'une application Android n'est pas quelque chose de protégé par défaut, une grande majorité d'entre elles sur les stores n'ont pas de code offusqué et peuvent dévoiler leurs secrets à des développeurs malicieux.