
🤖 Une application CLI qui prépare automatiquement les fichiers APK Android pour l'inspection HTTPS
Une application CLI qui prépare automatiquement les fichiers APK Android pour l'inspection HTTPS
Inspecter le trafic HTTPS d'une application mobile à l'aide d'un proxy est probablement le moyen le plus simple de comprendre son fonctionnement. Cependant, avec la Configuration de sécurité réseau introduite dans Android 7 et les développeurs d'applications qui tentent d'empêcher les attaques MITM en utilisant le certificate pinning, faire fonctionner une application avec un proxy HTTPS est devenu assez fastidieux.
apk-mitm automatise tout le processus. Tout ce que vous avez à faire est de lui fournir un fichier APK et apk-mitm va :
Vous pouvez également utiliser apk-mitm pour modifier des applications utilisant Android App Bundle et le root de votre téléphone n'est pas requis.
Modifier le comportement normal d'une application pour contourner des fonctionnalités de sécurité comme le certificate pinning nécessite soit de modifier le code source de l'application avant de l'exécuter, soit de "hooking" l'application pendant son exécution pour intercepter les appels de fonction.
apk-mitm adopte actuellement la première approche en modifiant le code de l'application : il commence par "désassembler" l'application à l'aide d'Apktool, apporte des modifications à plusieurs fichiers, puis la réassemble (toujours avec Apktool).
Cette approche présente l'avantage de ne pas nécessiter un appareil rooté, mais elle a aussi plusieurs inconvénients. Le plus gros problème est que les applications ne sont pas vraiment conçues pour être désassemblées. Apktool essaie de le faire quand même, mais surtout avec des applications volumineuses et complexes, il rencontre souvent des problèmes.
Un autre problème avec cette approche est que certaines méthodes de certificate pinning, comme les vérifications effectuées dans des binaires natifs (comme c'est le cas pour des frameworks comme Flutter), sont soit très difficiles, soit impossibles à contourner. Pour cette raison, il peut être bénéfique d'essayer d'autres approches pour les applications plus délicates.
Plus précisément, je souhaite mettre en avant le projet android-unpinner de mitmproxy et les scripts frida-interception-and-unpinning de HTTP Toolkit. Leur approche applique des correctifs au moment de l'exécution en utilisant Frida, ce qui est beaucoup plus puissant, mais signifie également qu'elle ne peut pas être utilisée ou est plus difficile à utiliser sans un appareil rooté.
Si vous avez une version à jour de Node.js (14+) et Java (8+), vous pouvez installer apk-mitm en exécutant :
npm install -g apk-mitm
Une fois installé, vous pouvez exécuter cette commande pour modifier une application :
apk-mitm <chemin-vers-apk>
La modification d'un fichier APK appelé example.apk pourrait ressembler à ceci :
$ apk-mitm example.apk
✔ Décodage du fichier APK
✔ Modification du manifeste de l'application
✔ Remplacement de la configuration de sécurité réseau
✔ Désactivation du certificate pinning
✔ Encodage du fichier APK modifié
✔ Signature du fichier APK modifié
Terminé ! APK modifié : ./example-patched.apk
Vous pouvez maintenant installer le fichier example-patched.apk sur votre appareil Android et utiliser un proxy comme Charles ou mitmproxy pour observer le trafic de l'application.
Vous pouvez également modifier des applications utilisant Android App Bundle avec apk-mitm en lui fournissant un fichier *.xapk (par exemple depuis APKPure) ou un fichier *.apks (que vous pouvez exporter vous-même en utilisant SAI). Si vous faites cela sous Linux, assurez-vous que zip et unzip sont installés.
Parfois, vous aurez besoin d'effectuer des modifications manuelles dans une application pour la faire fonctionner. Dans ces cas, l'option --wait est ce qu'il vous faut. L'activer fera attendre apk-mitm avant de ré-encoder l'application, vous permettant d'apporter des modifications aux fichiers dans le répertoire temporaire.
Si vous souhaitez expérimenter différentes modifications sur un APK, utiliser --wait n'est probablement pas l'option la plus pratique car elle vous oblige à recommencer à chaque fois. Dans ce cas, vous devriez peut-être jeter un œil à APKLab. C'est un atelier de rétro-ingénierie Android construit sur VS Code qui inclut le support de apk-mitm et devrait vous permettre d'itérer beaucoup plus rapidement.
Sur certains appareils (comme les Android TV), il se peut que vous ne puissiez pas ajouter un nouveau certificat aux certificats racines du système. Dans ces cas, vous pouvez toujours ajouter le certificat de votre proxy directement dans la Configuration de sécurité réseau de l'application car cela fonctionnera sur n'importe quel appareil. Vous pouvez y parvenir en exécutant apk-mitm avec le drapeau --certificate défini sur le chemin du certificat (fichier .pem ou .der) utilisé par votre proxy.
Si l'application utilise Google Maps et que la carte est cassée après modification, la clé API de l'application est probablement restreinte au certificat du développeur. Vous devrez créer votre propre clé API sans restrictions et exécuter apk-mitm avec l'option --wait pour pouvoir remplacer la valeur com.google.android.geo.API_KEY dans le fichier AndroidManifest.xml de l'application.
Si apk-mitm plante lors du décodage ou de l'encodage, le problème est probablement lié à Apktool. Consultez leurs problèmes sur GitHub pour trouver des solutions de contournement possibles. Si vous trouvez une version d'Apktool qui n'est pas affectée par le problème, vous pouvez demander à apk-mitm de l'utiliser en spécifiant le chemin de son fichier JAR via l'option --apktool.
MIT © Niklas Higi