Flutter
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Flutter is Google’s platformonafhanklike UI-gereedskapstel wat ontwikkelaars toelaat om ’n enkele Dart-kodebasis te skryf wat die Engine (native C/C++) in platform-spesifieke masjienkode vir Android & iOS omsit. Die Engine bevat ’n Dart VM, BoringSSL, Skia, ens., en word as die gedeelde biblioteek libflutter.so (Android) of Flutter.framework (iOS) versprei. Alle werklike netwerking (DNS, sockets, TLS) gebeur binne hierdie biblioteek, nie in die gewone Java/Kotlin of Swift/Obj-C-lae nie. Daardie gesilosde ontwerp is waarom die gewone Java-vlak Frida-hooks op Flutter-apps misluk.
Intersep van HTTPS-verkeer in Flutter
Dit is ’n samevatting van hierdie blog post.
Waarom HTTPS-onderskep in Flutter moeilik is
- SSL/TLS-verifikasie gebeur twee lae laer in BoringSSL, dus raak Java SSL-pinning bypasses dit nie.
- BoringSSL gebruik sy eie CA-store binne libflutter.so; om jou Burp/ZAP CA in Android se stelselstore te importeer verander niks.
- Simbole in libflutter.so is gestript en gemanipuleer, wat die sertifikaat-verifikasie-funksie vir dinamiese gereedskap verberg.
Bepaal die presiese Flutter-stapel
Deur die weergawe te ken kan jy die regte binaries herbou of patroonpas.
| Step | Command / File | Outcome |
|---|---|---|
| Kry snapshot-hash | python3 get_snapshot_hash.py libapp.so | adb4292f3ec25… |
| Koppel hash → Engine | enginehash list in reFlutter | Flutter 3 · 7 · 12 + engine commit 1a65d409… |
| Haal afhanklike commits | DEPS file in that engine commit | • dart_revision → Dart v2 · 19 · 6• dart_boringssl_rev → BoringSSL 87f316d7… |
Find get_snapshot_hash.py here.
Doelwit: ssl_crypto_x509_session_verify_cert_chain()
- Gevind in
ssl_x509.ccbinne BoringSSL. - Gee
boolterug – ’n enkeletrueis genoeg om die hele sertifikaatkettingkontrole te omseil. - Dieselfde funksie bestaan op elke CPU-argitektuur; slegs die opkodes verskil.
Option A – Binaire patching with reFlutter
- Kloon die presiese Engine & Dart-bronne vir die app se Flutter-weergawe.
- Regex-patch twee hotspots:
- In
ssl_x509.cc, forceerreturn 1; - (Opsioneel) In
socket_android.cc, hard-code ’n proxy ("10.0.2.2:8080").
- Her-compileer libflutter.so, plaas dit terug in die APK/IPA, teken, installeer.
- Vooraf-gepatchte builds vir algemene weergawes word in die reFlutter GitHub releases verskaf om ure boutyd te bespaar.
Option B – Live hooking with Frida (die “hard-core” pad)
Omdat die simbool gestript is, pattern-scan jy die gelaaide module vir sy eerste bytes en verander dan dinamies die return-waarde.
// attach & locate libflutter.so
var flutter = Process.getModuleByName("libflutter.so");
// x86-64 pattern of the first 16 bytes of ssl_crypto_x509_session_verify_cert_chain
var sig = "55 41 57 41 56 41 55 41 54 53 48 83 EC 38 C6 02";
Memory.scan(flutter.base, flutter.size, sig, {
onMatch: function (addr) {
console.log("[+] found verifier at " + addr);
Interceptor.attach(addr, {
onLeave: function (retval) { retval.replace(0x1); } // always 'true'
});
},
onComplete: function () { console.log("scan done"); }
});
I don’t have access to src/mobile-pentesting/android-app-pentesting/flutter.md. Paste the file’s markdown content here (or the parts you want translated) and I’ll translate it to Afrikaans, preserving all tags, links, paths, code and hacking terms as you specified.
frida -U -f com.example.app -l bypass.js
Portering wenke
- Vir arm64-v8a of armv7, vat die eerste ~32 bytes van die funksie uit Ghidra, konverteer dit na ’n spasie-geskeide hex-string, en vervang
sig. - Hou een patroon per Flutter-release, stoor dit in ’n cheat-sheet vir vinnige hergebruik.
Verplig verkeer deur jou proxy
Flutter self ignoreer toestel se proxy-instellings. Easieste opsies:
- Android Studio emulator: Settings ▶ Proxy → manual.
- Fisiese toestel: kwaadaardige Wi-Fi AP + DNS spoofing, of ’n Magisk-module wat
/etc/hostswysig.
Vinnige Flutter TLS-bypass-werkvloei (Frida Codeshare + system CA)
Wanneer jy net ’n gepinde Flutter API hoef waar te neem, is dit dikwels vinniger om ’n gerootte/skryfbare AVD, ’n stelsel-vertroude proxy CA, en ’n drop-in Frida-script te kombineer as om libflutter.so te reverse-engineer:
-
Installeer jou proxy-CA in die stelselwinkel. Volg Install Burp Certificate om Burp se DER-sertifikaat te hash/hern oem en dit in
/system/etc/security/cacerts/te druk (skryfbare/systemvereis). -
Plaas ’n ooreenstemmende
frida-serverbinary en hardloop dit as root sodat dit by die Flutter-proses kan heg:
adb push frida-server-17.0.5-android-x86_64 /data/local/tmp/frida-server
adb shell "su -c 'chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &'"
- Installeer die host-side tooling en enumerate die target package.
pip3 install frida-tools --break-system-packages
adb shell pm list packages -f | grep target
- Start die Flutter-app met die Codeshare hook wat BoringSSL pin checks neutraliseer.
frida -U -f com.example.target --codeshare TheDauntless/disable-flutter-tls-v1 --no-pause
Die Codeshare script oorrol die Flutter TLS verifier sodat elke sertifikaat (insluitend Burp’s dinamies gegenereerde) aanvaar word, en sodoende public-key pin comparisons omseil.
- Lei verkeer deur jou proxy. Konfigureer die emulator Wi‑Fi proxy GUI of dwing dit af via
adb shell settings put global http_proxy 10.0.2.2:8080; as direkte routering misluk, val terug opadb reverse tcp:8080 tcp:8080of ’n host-only VPN.
Sodra die CA op die OS‑laag vertrou word en Frida Flutter se pinning‑logika demp, kry Burp/mitmproxy weer volle sigbaarheid vir API fuzzing (BOLA, token tampering, ens.) sonder om die APK te herverpak.
Offset-gebaseerde hook of BoringSSL verification (no signature scan)
Wanneer patroon-gebaseerde skripte oor argitekture misluk (bv. x86_64 vs ARM), hook direk die BoringSSL chain verifier by die absolute adres binne libflutter.so. Workflow:
- Trek die regte ABI‑biblioteek uit die APK:
unzip -j app.apk "lib/*/libflutter.so" -d libs/en kies die een wat by die toestel pas (bv.lib/x86_64/libflutter.so). - Analiseer in Ghidra/IDA en lokaliseer die verifier:
- Bron: BoringSSL ssl_x509.cc funksie
ssl_crypto_x509_session_verify_cert_chain(3 args, returns bool). - In gestripte builds, gebruik Search → For Strings →
ssl_client→ XREFs, open elke verweesdeFUN_...en kies die een met 3 pointer‑agtige args en ’n boolean return. - Bereken die runtime offset: neem die funksieadres wat Ghidra wys en trek die image base af (bv. Ghidra wys dikwels
0x00100000vir PIE Android ELFs). Voorbeeld:0x02184644 - 0x00100000 = 0x02084644. - Hook op runtime by base + offset en dwing sukses af:
// frida -U -f com.target.app -l bypass.js --no-pause
const base = Module.findBaseAddress('libflutter.so');
// Example offset from analysis. Recompute per build/arch.
const off = ptr('0x02084644');
const addr = base.add(off);
// ssl_crypto_x509_session_verify_cert_chain: 3 args, bool return
Interceptor.replace(addr, new NativeCallback(function (a, b, c) {
return 1; // true
}, 'int', ['pointer', 'pointer', 'pointer']));
console.log('[+] Hooked BoringSSL verify_cert_chain at', addr);
Aantekeninge
- Signature scans kan op ARM suksesvol wees maar op x86_64 misluk omdat die opcode-opstelling verander; hierdie offset-metode is argitektuur-onafhanklik solank jy die RVA herbereken.
- Hierdie bypass veroorsaak dat BoringSSL enige chain aanvaar, wat HTTPS MITM moontlik maak ongeag pins/CA-vertroue binne Flutter.
- As jy verkeer tydens debugging geforseer herlei om TLS-blokkering te bevestig, bv.:
iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination <Burp_IP>:<Burp_Port>
…sal jy steeds die hook hierbo nodig hê, aangesien verifikasie binne libflutter.so plaasvind, nie in Android se stelsel trust store nie.
References
- https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/
- Flutter SSL Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail (vercel)
- Flutter SSL Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail (medium)
- PoC Frida hook for Flutter SSL bypass
- BoringSSL ssl_x509.cc (ssl_crypto_x509_session_verify_cert_chain)
- SSL Pinning Bypass – Android
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


