universal-flutter-ssl-pinning
Dekompliliert libflutter.so mit PyGhidra, um die SSL-Zertifikatsprüfungsfunktion zu lokalisieren, und erstellt dann einsatzbereite Umgehungsskripte für Frida und Renef.
Funktionsweise
- PyGhidra lädt
libflutter.so headless und durchsucht alle definierten Strings nach ssl_client
- Querverweise von diesem String werden zu ihren enthaltenden Funktionen aufgelöst
- Jede Funktion wird dekompiliert, um eine genaue Parameteranzahl zu erhalten
- Die 3-Parameter-Funktion wird ausgewählt — dies ist
ssl_crypto_x509_session_verify_cert_chain
- Seine RVA wird eingebaut in:
- Ein Frida-Skript (
flutter_ssl_pinning.js), das den Rückgabewert zur Laufzeit auf ptr(1) (SSL_VERIFY_OK) patcht
- Ein Renef-Skript (
flutter_ssl_pinning.lua), das Memory.patch verwendet, um den Funktions-Einstieg mit MOV X0, #1 ; RET (ARM64) zu überschreiben
Voraussetzungen
- Ghidra —
brew install ghidra
- pyghidra —
pip install pyghidra
- Frida —
pip install frida-tools oder Renef — renef.io
Setzen Sie GHIDRA_INSTALL_DIR in Ihrer Umgebung oder übergeben Sie --ghidra-install-dir.
Verwendung
# Analyse von libflutter.so und Generieren beider Skripte
python3 flutter_ssl_pinning.py libflutter.so
# Ausführen mit Frida
frida -U -f com.example.app -l flutter_ssl_pinning.js
# Ausführen mit Renef
renef -s com.example.app -l flutter_ssl_pinning.lua
Optionen
Ausgabedateien
| Datei | Werkzeug | Mechanismus |
|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua |
Siehe das example/-Verzeichnis für Beispielausgaben.
Getestet mit
Sowohl Google Flutter als auch Shorebird verwenden die gleiche libflutter.so SSL-Engine.
Die automatisch ermittelte RVA ist bei verschiedenen Build-Typen für dieselbe Flutter-Engine-Version identisch.
Schnelles Datenverkehr-Mitschnitt (kein Proxy)
Neben der Umgehung des Pinnings für einen proxy-basierten MITM können Sie entschlüsselten HTTP-Verkehr direkt in Frida mit dem eigenständigen flutter_http_monitor.py aufzeichnen. Es lokalisiert automatisch BoringSSL SSL_write/SSL_read in libflutter.so (jede Flutter-Version, arm64) und erzeugt ein Frida-Skript, das Klartext-Anfragen und -Antworten ausgibt — neu zusammengesetzt, ent-chunkt, entpackt und JSON hübsch gedruckt.
pip install capstone pyelftools
# das Binary scannen und den Monitor generieren (oder eine .apk übergeben)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# gegen die App ausführen
frida -U -f com.target.app -l monitor.js
Optional, live in der Frida-REPL: addScope('api.example.com'), um nur bestimmte Hosts zu überwachen (Burp-ähnlicher Bereich). Einzige Datei — nichts weiter nötig.
Haftungsausschluss
Dieses Tool ist nur für autorisierte Sicherheitsforschung und Penetrationstests vorgesehen.
Verwenden Sie es nicht gegen Apps, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Erlaubnis zum Testen haben.