universal-flutter-ssl-pinning
Effectue la rétro-ingénierie de libflutter.so avec PyGhidra pour localiser la fonction de vérification des certificats SSL, puis génère des scripts de contournement prêts à l'emploi pour Frida et Renef.
- PyGhidra charge
libflutter.so sans interface et analyse toutes les chaînes définies pour ssl_client
- Les références croisées à partir de cette chaîne sont résolues vers leurs fonctions conteneurs
- Chaque fonction est décompilée pour obtenir un nombre précis de paramètres
- La fonction à 3 paramètres est sélectionnée — il s'agit de
ssl_crypto_x509_session_verify_cert_chain
- Son RVA est intégré dans :
- Un script Frida (
flutter_ssl_pinning.js) qui patche la valeur de retour à ptr(1) (SSL_VERIFY_OK) à l'exécution
- Un script Renef (
flutter_ssl_pinning.lua) qui utilise Memory.patch pour écraser l'entrée de la fonction avec MOV X0, #1 ; RET (ARM64)
Prérequis
- Ghidra —
brew install ghidra
- pyghidra —
pip install pyghidra
- Frida —
pip install frida-tools ou Renef — renef.io
Définissez GHIDRA_INSTALL_DIR dans votre environnement, ou passez --ghidra-install-dir.
Utilisation
# Analyse libflutter.so et génère les deux scripts
python3 flutter_ssl_pinning.py libflutter.so
# Exécution avec Frida
frida -U -f com.example.app -l flutter_ssl_pinning.js
# Exécution avec Renef
renef -s com.example.app -l flutter_ssl_pinning.lua
Options
Fichiers de sortie
| Fichier | Outil | Mécanisme |
|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua |
Voir le répertoire example/ pour un exemple de sortie générée.
Testé sur
Google Flutter et Shorebird utilisent tous deux le même moteur SSL libflutter.so.
Le RVA découvert automatiquement est identique pour tous les types de build d'une même version du moteur Flutter.
Capture rapide du trafic (sans proxy)
En plus de contourner le pinning pour un MITM basé sur un proxy, vous pouvez capturer le trafic HTTP déchiffré directement dans Frida avec le script autonome flutter_http_monitor.py. Il localise automatiquement SSL_write/SSL_read de BoringSSL dans libflutter.so (toute version de Flutter, arm64) et génère un script Frida qui affiche les requêtes et réponses en clair — réassemblées, dé-chunkées, décompressées et joliment formatées en JSON.
pip install capstone pyelftools
# scan the binary and generate the monitor (or pass an .apk)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# run it against the app
frida -U -f com.target.app -l monitor.js
Optionnel, en direct dans la REPL Frida : addScope('api.example.com') pour surveiller uniquement des hôtes spécifiques (scope style Burp). Un seul fichier — rien d'autre à fournir.
Avertissement
Cet outil est destiné uniquement à la recherche en sécurité autorisée et aux tests d'intrusion.
Ne l'utilisez pas contre des applications que vous ne possédez pas ou pour lesquelles vous n'avez pas d'autorisation écrite explicite de tester.