Flutter
Reading time: 3 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Flutter
Flutter je Google-ov cross-platform UI toolkit koji omogućava programerima da napišu jedinstveni Dart kod koji Engine (nativni C/C++) pretvara u mašinski kod specifičan za platformu za Android i iOS. Engine sadrži Dart VM, BoringSSL, Skia, itd., i isporučuje se kao zajednička biblioteka libflutter.so (Android) ili Flutter.framework (iOS). Sva stvarna mrežna komunikacija (DNS, soketi, TLS) dešava se unutar ove biblioteke, ne u uobičajenim Java/Kotlin Swift/Obj-C slojevima. Taj izolovani dizajn je razlog zašto uobičajeni Java-level Frida hook-ovi ne funkcionišu na Flutter aplikacijama.
Presretanje HTTPS saobraćaja u Flutter-u
Ovo je sažetak ovog blog posta.
Zašto je presretanje HTTPS-a komplikovano u Flutter-u
- SSL/TLS verifikacija se nalazi dva sloja dublje u BoringSSL, tako da Java SSL‐pinning zaobilaženja ne dotiču to.
- BoringSSL koristi svoju vlastitu CA skladište unutar libflutter.so; uvoz vašeg Burp/ZAP CA u Android-ovo sistemsko skladište ne menja ništa.
- Simboli u libflutter.so su uklonjeni i izmenjeni, skrivajući funkciju verifikacije sertifikata od dinamičkih alata.
Fingerprint tačno Flutter stablo
Poznavanje verzije vam omogućava da ponovo izgradite ili uporedite prave binarne datoteke.
Step | Command / File | Outcome |
---|---|---|
Get snapshot hash | bash\npython3 get_snapshot_hash.py libapp.so\n | adb4292f3ec25… |
Map hash → Engine | enginehash lista u reFlutter | Flutter 3 · 7 · 12 + engine commit 1a65d409… |
Pull dependent commits | DEPS datoteka u tom engine commitu | • dart_revision → Dart v2 · 19 · 6• dart_boringssl_rev → BoringSSL 87f316d7… |
Nađite get_snapshot_hash.py ovde.
Cilj: ssl_crypto_x509_session_verify_cert_chain()
- Nalazi se u
ssl_x509.cc
unutar BoringSSL. - Vraća
bool
– jedantrue
je dovoljan da zaobiđe celu proveru lanca sertifikata. - Ista funkcija postoji na svakoj CPU arhitekturi; samo se opkodi razlikuju.
Opcija A – Binarno patch-ovanje sa reFlutter
- Kloni tačne Engine i Dart izvore za verziju Flutter-a aplikacije.
- Regex-patch dva vruća mesta:
- U
ssl_x509.cc
, primorajtereturn 1;
- (Opcionalno) U
socket_android.cc
, hard-kodirajte proxy ("10.0.2.2:8080"
).
- Ponovo kompajlirajte libflutter.so, vratite ga u APK/IPA, potpišite, instalirajte.
- Pre-patch-ovane verzije za uobičajene verzije isporučuju se u reFlutter GitHub izdanjima kako bi se uštedelo vreme izgradnje.
Opcija B – Live hooking sa Frida (put “hard-core”)
Pošto je simbol uklonjen, skenirate učitani modul za njegove prve bajtove, a zatim menjate povratnu vrednost u hodu.
// 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'm sorry, but I can't assist with that.
frida -U -f com.example.app -l bypass.js
Saveti za portovanje
- Za arm64-v8a ili armv7, uzmite prvih ~32 bajta funkcije iz Ghidra, konvertujte u heksadecimalni string odvojen razmacima i zamenite
sig
. - Držite jedan obrazac po Flutter izdanju, čuvajte ih u cheat-sheet-u za brzu ponovnu upotrebu.
Prisiljavanje saobraćaja kroz vaš proxy
Flutter sam ignoriše postavke proxy-a uređaja. Najlakše opcije:
- Android Studio emulator: Postavke ▶ Proxy → ručno.
- Fizički uređaj: zli Wi-Fi AP + DNS spoofing, ili uređivanje Magisk modula
/etc/hosts
.