Intercept Traffic Flutter Android Mobile App

rizky aditiyan
4 min readMar 13, 2023

--

Bismillah,
Mungkin langsung saja agar tidak bertele-tele. Kita akan melakukan intercept pada aplikasi mobile android dengan basis flutter.
Sebelumnya saya berasumsi kita sudah paham melakukan beberapa hal, seperti:
1. set proxy server dan install cert burpsuite.
2. menjalankan frida server di device android dan client laptop/pc.
3. bypass root detection (magisk hide/ frida script/ root cloak).

Challenge 1# Flutter App x86 release
Untuk intercept app flutter dengan release x86, bisa dengan memanfaatkan tool reffluter dan signer.
1. Jalankan tool reflutter terhadap file .apk yang akan di intercept

2. Kemudian lakukan sign terhadap file .apk yang tergenerate dari proses sebelumnya dengan uber signer, dengan command berikut:
java -jar uber-apk-signer-1.2.1.jar — apk release.RE.apk

3. Install file .apk di device android dan pastikan sudah set proxy dari ip burpsuite di device android tersebut. komunikasi app dengan server berhasil terintercept di burpsuite

Challenge 2# Flutter App x64 release (Mode 1)
Untuk intercept app flutter dengan release x64, kita tidak akan bisa memanfaatkan tool reffluter dan signer karena tidak support. Maka akan menggunakan cara lainnya yaitu iptables.
1. lakukan config pada burpsuite agar setiap traffic yang ada diarahkan ke host target (ex: test.com)

2. Pastikan lakukan restart device setelah set proxy ip burpsuite pada device android, ini bertujuan agar app dalam state 0
3. Setting iptables pada device android, bisa melalui adb atau koneksi SSH dengan table NAT mengarah ke ip laptop / pc.
iptables -t nat -A OUTPUT -p tcp — dport 80 -j DNAT — to-destination 192.168.88.64:8083
iptables -t nat -A OUTPUT -p tcp — dport 443 -j DNAT — to-destination 192.168.88.64:8083

4. jalankan app di device android dan komunikasi app dengan server berhasil terintercept di burpsuite.

Challenge 3# Flutter App x64 release (Mode 2)
Untuk intercept app flutter dengan release x64 di mode 2 ini, kita akan melakukan proses reverse engineering dahulu terhadap file libflutter.so pada file apk menggunakan tool Ghidra untuk melihat function yang dijalankan oleh app pada proses deteksi sslpinning.

  1. Rename extensi file apk menjadi .zip dan extract terlebih dahulu file tersebut untuk mendapatkan file libflutter.so (biasanya terdapat pada folder packageappnya\lib\arm64-v8a

2. Lakukan decompile pada file libflutter.so. Disini kita akan mencoba melihat function dari proses pengecekan SSLpinning. Untuk diketahui secara format program, kode ini tidak akan dapat dibaca oleh manusia (bahasa assembly). Jangan diambil pusing, kita akan lakukan trial dan error.
note: sebagai referensi format fuction yang dijalankan untuk pengecekan SSLpinning pada app flutter x86 dan x64 adalah sebagai berikut

https://blog.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/

3. Lakukan pencarian menggunakan scalar pada tab search, kemudian query number 0x186 atau 390. 2 strings tersebut yang biasanya terdapat pada function SSLPinning flutter app. Kemudian kita akan cek 1 per 1 location yang didapatkan dan function yang memiliki pola seperti fuction diatas, dalam case ini kita mendapatkan 6 lokasi dari function.

4. Dari 6 lokasi diatas, didapatkan 2 suspect fuction yaitu di lokasi 0050b3a4 dengan function FUN_0050a4e0 dan lokasi 00672740 dengan function FUN_0067246c.

FUN_0067246c
FUN_0050a4e0

4. Untuk menentukan address dari tiap-tiap function diatas, cukup dengan mengurangi 6 digit belakang function dengan 10000, contoh function FUN_0067246c akan ada pada address 57246c dan function FUN_0050a4e0 akan ada pada address 40a4e0
5. Selanjutnya tiap address tersebut akan diinput kedalam script yang akan dijalankan pada frida.

function hook_ssl_verify_result(address)
{
Interceptor.attach(address, {
onEnter: function(args) {
console.log("Disabling SSL validation")
},
onLeave: function(retval)
{
console.log("Retval: " + retval)
retval.replace(0x1);

}
});
}
function disablePinning(){
// Change the offset on the line below with the binwalk result
// If you are on 32 bit, add 1 to the offset to indicate it is a THUMB function.
// Otherwise, you will get 'Error: unable to intercept function at ......; please file a bug'

var address = Module.findBaseAddress('libflutter.so').add(0xaddressnya)
hook_ssl_verify_result(address);
}
setTimeout(disablePinning, 1000)

5. Setelah trial dan error, dari 2 function diatas, yang ditemukan valid adalah FUN_0050a4e0 pada address 40a4e0. Jalankan sript melalui frida dan pastikan didevice android sudah set proxy.

Sekian untuk Chapter intercept traffic pada android mobile app flutter. next Insyaallah kita akan lakukan intercept pada iOS Mobile app flutter.
Semoga Bermanfaat

--

--

rizky aditiyan
rizky aditiyan

No responses yet