bypass ssl pinning flutter didevice x86_64 (avd)

Ryan Fabella
5 min readSep 23, 2021

--

Bismillah, Kegiatan ini awalnya niat membantu teman di telegram, dia mengalami kesusahan dalam membypass SSL pinning aplikasi berbasis platform flutter. Tujuannya untuk mendapatkan semua API endpoint dari apps tersebut untuk dicari bugnya. Untuk contoh bypass ini menggunakan apk dari sini buatan dari NVISO security.

Setelah diskusi kasusnya ternyata dia menggunakan emulator android AVD manager. untuk tipe emulatornya sendiri pilih yang tidak ada logo google playstore supaya bisa root tanpa harus di rooting.

gambar create virtual device pilih yang tidak ada logo dilingkari

kemudian klik next, pilih image yang x86_64 seperti dibawah ini

pilih ABI yang x86_64

kemudian klik next dan kemudian run avd tersebut. Langkah selanjutnya adalah persiapkan burp dan install cert ke avd tersebut caranya ikuti langkahnya disini . kemudian install frida di laptop anda caranya ikuti disini

pastikan anda sudah menginstall adb. langkah — langkahnya bisa mengikuti tutorial disini

cek versi frida yang sudah terinstall di laptop.

$frida — version
14.2.14

kemudian download frida-server-14.2.14-android_x86_64 disini. dan extract filenya dan ubah namanya menjadi frida-server. Langkah selanjutnya upload file frida-server ke avd di folder /data/local/tmp. Caranya buka terminal

$adb push frida-server /data/local/tmp/
$adb shell
emulator64_x86_64_arm64:/ $su
emulator64_x86_64_arm64:/ #cd /data/local/tmp/
emulator64_x86_64_arm64:/ #chown root:root frida-server
emulator64_x86_64_arm64:/ #chmod 700 frida-server
emulator64_x86_64_arm64:/ #frida-server &

buka tab terminal baru kemudian persiapkan script hook pada frida. Script ini sebenarnya sudah dijelaskan dan siap pakai pada tulisan Jeroen Beckers armv7 dan arm64_v8 namun untuk x86_64 kita belum nemu script hook yang pas.

yuk kita bikin hooknya. caranya awal install ghidra bisa download disini
kemudian ambil file library flutter yang akan kita ubah return value supaya bypass SSL pinning.

$apktool d android.apk
$cd android/lib/x86_64/
$cp libflutter.so ke_folder_untuk_didekompilasi_dg_ghidra

buka aplikasi ghidra kemudian buat project baru, klik kiri File ->New project > Non-shared Project ->Project Name -> tulis flutter

klik pada gambar naga berwarna hijau, setelah terload sempurna klik import file->pilih libflutter.so diatas, kemudian pilih analyze, tunggu untuk semua dianalisa kemudian akan tampil dekompilasi. klik search->for Strings
tulis x509.cc.

Pendekatan untuk mencari fungsi SSL pinning untuk diganti nilai returnnya bisa baca dari Zulfikar horangi
setalah klik search kemudian tunggu sampai tampilan seperti dibawah ini

gambar ghidra hasil dari search x509.cc

klik kanan pada location -> copy ->copy current column didapat nilai 001cfe28. tutup menu search kemudian pada menu panel klik Navigation->go to

setelah di klik OK akan menuju lokasi dari alamat diatas, berikut tampilannya

lokasi dimana x509.cc berada

klik pada tulisan xref[10] sehingga akan tampil seperti ini

gambar xref dari lokasi x509.cc

tugas kita mencari fungsi yang mirip dengan fungsi sebelumnya dari NVISO

gambar fungsi acuan untuk armv7 dan armv8

dari gambar xref dari lokasi x509.cc no 3 dari bawah kemudian ditarik ke atas fungsi utamanya hasilnya seperti ini

fungsinya sangat mirip dengan gambar fungsi acuan untuk armv7 dan armv8 yaitu fungsi dengan 3 parameter dan alurnyapun mirip.

pada bytes awal kita ambil yaitu 55 41 57 41 56 41 55 41 54 53 48 81 ec f8 00 00 00 c6 02

kita cari hex nya dengan binwalk

binwalk -R “\x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xec\xf8\x00\x00\x00\xc6\x02” libflutter.so

alamat hex dengan binwalk

hasilnya 0x62D055
masukkan menjadi script hook.js isinya sebagai berikut

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(){
var address = Module.findBaseAddress(‘libflutter.so’).add(0x62D055);
hook_ssl_verify_result(address);
}
setTimeout(disablePinning, 1000);

kemudian jalankan frida dengan

$frida -U be.nviso.flutter_app -l hook.js — no-pause

jalankan burp suite dengan mengaktifkan proxy ke ip address dan port misal 192.168.100.17 port 8080 dan aktifkan Support invisible proxying

o yaa kita wajib mengarahkan proxy, kalau untuk device hp kita install proxyDroid tapi karena emulator maka tambahkan dengan iptables

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination BURP_HOST:BURP_PORT
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination BURP_HOST:BURP_PORT

ganti BURP_HOST dan BURP_POST

klik aplikasi saat diklik HTTPS Request bisa terlihat request ke URL API endpoint

pada tab terminal yang menjalankan frida akan terlihat seperti ini saat aplikasi di klik HTTPS Request

berhasil membypass SSL pinning pada flutter di emulator avd x86_64. semoga membantu mencari bugs2 aplikasi flutter. Alhamdulillah

referensi :

https://init6.me/android-hacking-environment/

--

--