universal-flutter-ssl-pinning
Esegue il reverse engineering di libflutter.so con PyGhidra per localizzare la funzione di verifica dei certificati SSL, quindi genera script di bypass pronti all'uso per Frida e Renef.
Come funziona
- PyGhidra carica
libflutter.so senza interfaccia e cerca tutte le stringhe definite contenenti ssl_client
- I riferimenti incrociati da quella stringa vengono risolti verso le funzioni che li contengono
- Ogni funzione viene decompilata per ottenere un conteggio accurato dei parametri
- Viene selezionata la funzione con 3 parametri — questa è
ssl_crypto_x509_session_verify_cert_chain
- Il suo RVA viene incorporato in:
- Uno script Frida (
flutter_ssl_pinning.js) che modifica il valore di ritorno a ptr(1) (SSL_VERIFY_OK) a runtime
- Uno script Renef (
flutter_ssl_pinning.lua) che utilizza Memory.patch per sovrascrivere l'entry della funzione con MOV X0, #1 ; RET (ARM64)
Requisiti
- Ghidra —
brew install ghidra
- pyghidra —
pip install pyghidra
- Frida —
pip install frida-tools oppure Renef — renef.io
Imposta GHIDRA_INSTALL_DIR nel tuo ambiente, oppure passa --ghidra-install-dir.
Utilizzo
# Analizza libflutter.so e genera entrambi gli script
python3 flutter_ssl_pinning.py libflutter.so
# Esegui con Frida
frida -U -f com.example.app -l flutter_ssl_pinning.js
# Esegui con Renef
renef -s com.example.app -l flutter_ssl_pinning.lua
Opzioni
File generati
| File | Strumento | Meccanismo |
|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua |
Vedi la directory example/ per un esempio di output generato.
Testato su
Sia Google Flutter che Shorebird utilizzano lo stesso motore SSL in libflutter.so.
Il RVA scoperto automaticamente è identico tra i diversi tipi di build per la stessa versione del motore Flutter.
Cattura rapida del traffico (senza proxy)
Oltre a bypassare il pinning per un MITM basato su proxy, puoi catturare il traffico HTTP
decifrato direttamente in Frida con lo script autonomo flutter_http_monitor.py.
Individua automaticamente SSL_write/SSL_read di BoringSSL in libflutter.so
(qualsiasi versione di Flutter, arm64) e genera uno script Frida che stampa le
richieste e le risposte in chiaro — riassemblate, de-chunked, gunzip e formattate con JSON pretty-print.
pip install capstone pyelftools
# analizza il binario e genera il monitor (oppure passa un .apk)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# eseguilo contro l'app
frida -U -f com.target.app -l monitor.js
Opzionale, nella REPL di Frida: addScope('api.example.com') per osservare solo
host specifici (scope stile Burp). Singolo file — nient'altro da distribuire.
Disclaimer
Questo strumento è destinato esclusivamente a ricerche di sicurezza autorizzate e test di penetrazione.
Non utilizzarlo contro app che non possiedi o per le quali non hai esplicita autorizzazione scritta.