
Baca lebih lanjut di blog: https://swarm.ptsecurity.com/fork-bomb-for-fcrutter/
Kerangka kerja ini membantu dengan aplikasi reverse aplikasi flutter menggunakan versi yang ditambal dari perpustakaan flutter yang sudah dikompilasi dan siap untuk pengemasan ulang aplikasi. Perpustakaan ini memiliki proses deserialisasi snapshot yang dimodifikasi untuk memungkinkan Anda melakukan analisis dinamis dengan cara yang nyaman.
Fitur Utama:
socket.cc ditambal untuk pemantauan lalu lintas dan intersepsi;dart.cc dimodifikasi untuk mencetak kelas, fungsi dan beberapa bidang;Dockerfile yang dibuat khusus # Linux, Windows, MacOS
pip3 install reflutter==0.8.0
impact@f:~ $ reflutter main.apk
Please enter your Burp Suite IP: <input_ip>
SnapshotHash: 8ee4ef7a67df9845fba331734198a953
The resulting apk file: ./release.RE.apk
Please sign the apk file
Configure Burp Suite proxy server to listen on *:8083
Proxy Tab -> Options -> Proxy Listeners -> Edit -> Binding Tab
Then enable invisible proxying in Request Handling Tab
Support Invisible Proxying -> true
impact@f:~ $ reflutter main.ipa Anda perlu menentukan IP server proxy Burp Suite Anda yang terletak di jaringan yang sama di mana perangkat dengan aplikasi Flutter berada. Selanjutnya, Anda harus mengonfigurasi proxy di BurpSuite -> Listener Proxy -> Options tab
8083All interfacesTrue 
Anda tidak perlu menginstal sertifikat apa pun. Pada perangkat Android, Anda juga tidak memerlukan akses root. Reflutter juga memungkinkan untuk mem -bypass beberapa implementasi sertifikat sertifikat flutter.
APK yang dihasilkan harus disejajarkan dan ditandatangani. Saya menggunakan penandatangan uber-apk java -jar uber-apk-signer.jar --allowResign -a release.RE.apk . Untuk melihat kode mana yang dimuat melalui DARTVM, Anda perlu menjalankan aplikasi pada perangkat. Perhatikan bahwa Anda harus secara manual menemukan apa yang sama _kDartIsolateSnapshotInstructions (mis. 0xb000) dengan menggunakan pencarian biner. Reflutter menulis dump ke folder root aplikasi dan menetapkan 777 izin ke file dan folder. Anda dapat menarik file dengan perintah ADB
impact@f:~ $ adb -d shell " cat /data/data/<PACKAGE_NAME>/dump.dart " > dump.dart Library : 'package:anyapp/navigation/DeepLinkImpl.dart' Class : Navigation extends Object {
String * DeepUrl = anyapp : //evil.com/ ;
Function 'Navigation.' : constructor. ( dynamic , dynamic , dynamic , dynamic ) => NavigationInteractor {
Code Offset : _kDartIsolateSnapshotInstructions + 0x0000000000009270
}
Function 'initDeepLinkHandle' : . ( dynamic ) => Future < void > * {
Code Offset : _kDartIsolateSnapshotInstructions + 0x0000000000412fe8
}
Function '_navigateDeepLink@547106886' : . ( dynamic , dynamic , { dynamic navigator}) => void {
Code Offset : _kDartIsolateSnapshotInstructions + 0x0000000000002638
}
}
Library : 'package:anyapp/auth/navigation/AuthAccount.dart' Class : AuthAccount extends Account {
PlainNotificationToken * _instance = sentinel;
Function 'getAuthToken' : . ( dynamic , dynamic , dynamic , dynamic ) => Future < AccessToken *> * {
Code Offset : _kDartIsolateSnapshotInstructions + 0x00000000003ee548
}
Function 'checkEmail' : . ( dynamic , dynamic ) => Future < bool *> * {
Code Offset : _kDartIsolateSnapshotInstructions + 0x0000000000448a08
}
Function 'validateRestoreCode' : . ( dynamic , dynamic , dynamic ) => Future < bool *> * {
Code Offset : _kDartIsolateSnapshotInstructions + 0x0000000000412c34
}
Function 'sendSmsRestorePassword' : . ( dynamic , dynamic ) => Future < bool *> * {
Code Offset : _kDartIsolateSnapshotInstructions + 0x00000000003efb88
}
} Gunakan file IPA yang dibuat setelah eksekusi perintah reflutter main.ipa . Untuk melihat kode mana yang dimuat melalui DARTVM, Anda perlu menjalankan aplikasi pada perangkat. Reflutter akan mencetak jalur file dump ke log konsol XCODE dengan tag reflutter Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart selanjutnya, Anda perlu menarik file dari perangkat

Offset yang dihasilkan dari dump dapat digunakan dalam skrip Frida
frida -U -f <package> -l frida.js
Untuk mendapatkan nilai untuk _kDartIsolateSnapshotInstructions Anda dapat menggunakan readelf -Ws libapp.so di mana nilai yang Anda butuhkan di bidang Value
App.framework dan libapp.so di dalam arsip zip Mesin dibangun menggunakan reflutter dalam tindakan github untuk membangun versi yang diinginkan, komit dan hash snapshot digunakan dari tabel ini. Hash dari snapshot diekstraksi dari storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip

Jika Anda ingin menerapkan tambalan Anda sendiri, perubahan kode flutter manual didukung menggunakan Docker yang dibuat khusus
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .Bangun Perintah:
docker run -it -v " $( pwd ) :/t " -e HASH_PATCH= < Snapshot_Hash > -e COMMIT= < Engine_commit > reflutterContoh:
docker run -it -v " $( pwd ) :/t " -e HASH_PATCH=aa64af18e7d086041ac127cc4bc50c5e -e COMMIT=d44b5a94c976fbb65815374f61ab5392a220b084 reflutterContoh Bangun Android ARM64:
docker run -e WAIT=300 -e x64=0 -e arm=0 -e HASH_PATCH= < Snapshot_Hash > -e COMMIT= < Engine_commit > --rm -iv ${PWD} :/t reflutter Bendera:
-e x64 = 0 <menonaktifkan bangunan untuk arsitektur x64, gunakan untuk mengurangi waktu bangunan>
-e arm64 = 0 <menonaktifkan bangunan untuk arsitektur ARM64, gunakan untuk mengurangi waktu bangunan>
-E ARM = 0 <Menonaktifkan Bangunan untuk Arsitektur ARM32, Gunakan untuk Mengurangi Waktu Bangunan>
-e tunggu = 300
-e hash_patch = [snapshot_hash]
-e commit = [engine_commit] <Di sini Anda menentukan komit untuk versi mesin Anda, ambil dari tabel engineHash.csv atau dari flutter/engine repo>