
Scripts Frida pour réécrire les applications mobiles en cours d'exécution afin de mener directement une attaque MitM sur tout le trafic HTTPS
Fait partie de HTTP Toolkit : des outils puissants pour créer, tester et déboguer HTTP(S)
Ce dépôt contient des scripts Frida conçus pour faire tout ce qui est nécessaire à l'interception HTTPS MitM entièrement automatisée sur les appareils mobiles.
Cet ensemble de scripts peut être utilisé en entier pour gérer l'interception, gérer la confiance des certificats et désactiver le certificate pinning et les contrôles de transparence des certificats, pour l'interception MitM du trafic HTTP(S) sur Android et iOS, ou ils peuvent être utilisés et ajustés indépendamment pour ne hooker que des fonctionnalités spécifiques.
Les scripts peuvent gérer automatiquement :
-----BEGIN CERTIFICATE-----. Vous pouvez l'ouvrir avec un éditeur de texte pour voir et extraire ce contenu.config.js et ajoutez ces informations :
CERT_PEM : votre certificat CA au format PEM.PROXY_PORT : le port du proxyPROXY_HOST : l'adresse de votre proxy, du point de vue de votre appareil (ou utilisez adb reverse tcp:$PORT tcp:$PORT pour rediriger le port via ADB, et utilisez 127.0.0.1 comme hôte)frida-server correspondant depuis github.com/frida/frida, extrayez-le, faites un adb push vers votre appareil, puis exécutez-le avec les 4 commandes suivantes : , , , .-----BEGIN CERTIFICATE-----. Vous pouvez l'ouvrir avec un éditeur de texte pour voir et extraire ce contenu.config.js et ajoutez ces informations :
CERT_PEM : votre certificat CA au format PEM.PROXY_PORT : le port du proxyPROXY_HOST : l'adresse de votre proxy, du point de vue de votre appareilhttps://build.frida.re comme source de paquets.frida-ps -Uai sur votre ordinateur pour confirmer que cela fonctionne correctement.frida-ps -Uai (pour un test rapide, essayez d'utiliser github.com/httptoolkit/ios-ssl-pinning-demo - l'identifiant est )Les commandes ci-dessus utilisent tous les scripts pertinents, mais vous pouvez généralement utiliser n'importe quel sous-ensemble de votre choix, bien que dans presque tous les cas vous voudrez inclure config.js comme premier script (il définit certaines variables utilisées par les autres scripts).
Par exemple, pour faire uniquement de l'unpinning sur Android, lorsque la configuration du proxy et des certificats est gérée ailleurs et sans fallbacks d'obfuscation, vous pouvez simplement exécuter :
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
Chaque script comprend une documentation détaillée sur ce qu'il fait et comment il fonctionne dans un grand bloc de commentaires en haut. Les scripts sont :
config.js
Ce script définit des variables utilisées par d'autres scripts :
CERT_PEM - le certificat CA supplémentaire à approuver, au format PEMPROXY_HOST - l'adresse IP (IPv4) du serveur proxy à utiliser (non requis si vous ne faites que de l'unpinning)PROXY_PORT - le port du serveur proxy à utiliser (non requis si vous ne faites que de l'unpinning)DEBUG_MODE - vaut false par défaut, mais passer ceci à true activera beaucoup de sorties supplémentaires qui peuvent être utiles pour le débogage et le reverse engineering de tout problème.BLOCK_HTTP3 - vaut true par défaut, ce qui bloque HTTP/3 en supprimant toutes les connexions UDP vers le port 443.Ce script doit être listé sur la ligne de commande avant tous les autres scripts.
native-connect-hook.js
Capture tout le trafic réseau directement, en routant toutes les connexions vers l'hôte et le port du proxy configuré.
C'est un hook de bas niveau qui s'applique à toutes les connexions réseau. Cela garantit que toutes les connexions sont forcément redirigées vers le serveur proxy cible, même celles qui ignorent les paramètres de proxy ou établissent d'autres connexions socket brutes, et bloque également les connexions HTTP/3 si activé.
Ces scripts font partie d'un projet HTTP Toolkit plus large, financés par le Fonds NGI Zero Entrust, établi par NLnet avec le soutien financier du programme Next Generation Internet de la Commission européenne. En savoir plus sur la page projet NLnet.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices) avant d'exécuter les commandes. Notez que Frida ne s'exécute qu'en root sur l'appareil, ce que fournit su dans l'exemple ci-dessus, lorsqu'on est sur un appareil rooté. Pour vérifier que vous êtes root après avoir exécuté su ou une commande similaire, vérifiez que l'exécution de whoami dans le shell affiche root.tech.httptoolkit.pinning_demo)config.js). Le choix des scripts à utiliser vous appartient, mais pour Android une bonne commande pour commencer est :
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
com.httptoolkit.ios-pinning-democonfig.js). Le choix des scripts à utiliser vous appartient, mais pour iOS une bonne commande pour commencer est :
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
Ce hook s'applique à libc et fonctionne pour Android, Linux, iOS et de nombreux autres environnements apparentés.
native-tls-hook.js
Modifie toute la validation TLS pour les bibliothèques basées sur BoringSSL afin d'approuver votre certificat CA configuré.
Notamment, ce hook cible les API BoringSSL intégrées sur iOS, ce qui est la façon normale pour iOS de gérer la validation des certificats TLS (c'est donc suffisant pour presque toute l'interception HTTPS sur iOS), mais il est aussi utilisé dans quelques autres cas sur iOS et Android.
Cela revient à approuver votre CA pour tous les certificats, et désactive tout le certificate pinning, la transparence des certificats et les autres restrictions pour votre CA. Notez que contrairement à beaucoup d'autres hooks Frida ailleurs, cela ne désactive pas complètement la validation TLS (ce qui est très peu sûr). Au lieu de cela, il remplace la validation pour garantir que toutes les connexions utilisant votre certificat CA spécifique sont approuvées, sans assouplir la validation pour permettre l'interception par des tiers.
android/
android-proxy-override.js
Remplace les paramètres proxy Android pour l'application cible, garantissant que tout le trafic bien comporté est redirigé via le serveur proxy et intercepté.
android-system-certificate-injection.js
Modifie les API Android natives pour garantir que tous les magasins de confiance approuvent votre certificat CA supplémentaire par défaut, permettant ainsi de capturer le trafic TLS chiffré.
android-certificate-unpinning.js
Modifie ou désactive de nombreuses techniques connues courantes de restrictions supplémentaires de certificats, notamment le certificate pinning (n'acceptant qu'un petit ensemble de certificats reconnus, plutôt que tous les certificats approuvés par le système) et la transparence des certificats (validant que tous les certificats utilisés ont été enregistrés dans les journaux publics de certificats).
android-certificate-unpinning-fallback.js
Détecte les échecs de validation de certificats non gérés, et tente de traiter les cas inconnus non reconnus avec des correctifs de secours générés automatiquement. C'est plus expérimental et cela peut être légèrement imprévisible, mais c'est très utile pour les cas obfusqués, et en général cela corrigera les problèmes de pinning (après un premier échec) ou mettra au moins en évidence du code pour un reverse engineering ultérieur dans la sortie du journal Frida. Ce script partage une partie de la logique avec android-certificate-unpinning.js et ne peut pas être utilisé seul - si vous voulez utiliser ce script, vous devrez inclure aussi le script d'unpinning non-fallback.
android-disable-root-detection.js
Désactive les contrôles courants de détection de root dans les couches natives et Java pour empêcher la détection des appareils Android rootés.
Ce script intercepte l'accès au système de fichiers, les commandes shell et les recherches de paquets pour les indicateurs de root connus (comme su, Magisk et les applications associées), et simule les propriétés système clés (ro.secure, ro.debuggable, etc.) pour simuler un environnement de production.
Il bloque les comportements suspects comme les vérifications d'existence de fichiers et l'exécution de commandes shell, aidant à échapper à la détection dans les applications utilisant à la fois des contrôles de root standard et avancés.
android-disable-flutter-certificate-pinning.js
Garantit que les applications basées sur Flutter (qui ignorent généralement la configuration des certificats système) approuvent votre certificat CA, même dans la plupart des cas de certificate pinning explicite. Ce script reste expérimental pour l'instant.
ios/
ios-connect-hook.js
Capture tout le trafic réseau iOS directement, en routant toutes les connexions vers l'hôte et le port du proxy configuré.
C'est un hook de bas niveau qui s'applique à toutes les connexions réseau. Cela garantit que toutes les connexions sont forcément redirigées vers le serveur proxy cible, même celles qui ignorent les paramètres de proxy ou établissent d'autres connexions socket brutes.
ios-disable-detection.js
Désactive la détection de jailbreak JailMonkey.
utilities/test-ip-connectivity.js
Vous ne voudrez probablement pas l'utiliser normalement dans le cadre de l'interception elle-même, mais cela peut être très utile lors de la mise en place de votre configuration.
Ce script vous permet de configurer une liste d'adresses IP possibles et un port cible, de faire tester chaque adresse par le processus, et d'envoyer un message au client Frida pour la première adresse joignable fournie. Cela peut être utile pour les processus de configuration automatisés, si vous ne savez pas quelle adresse IP est la meilleure pour atteindre le serveur proxy (votre ordinateur) depuis l'appareil cible (votre téléphone).