Home Bypass Root Detection Aplikasi Android Menggunakan Frida
Post
Cancel

Bypass Root Detection Aplikasi Android Menggunakan Frida

Dalam dunia pengembangan aplikasi mobile, keamanan merupakan hal yang sangat penting. Salah satu aspek keamanan yang sering diterapkan adalah deteksi root pada perangkat Android. Root detection digunakan untuk mengidentifikasi apakah perangkat yang menjalankan aplikasi tersebut telah di-root atau tidak.

Namun, bagi seorang peneliti keamanan atau pengembang aplikasi yang ingin melakukan pengujian lebih lanjut, root detection dapat menjadi hambatan sehingga diperlukan root detection bypass. Ada beberapa modul untuk melakukan bypass root detection pada aplikasi Android, seperti Magisk, Shamiko, Xposed, dll.

Tapi bagaimana jika didalam aplikasi Android yang kita pakai sudah terdapat function untuk memeriksa dan mengenali modul diatas? Di sinilah peran Frida sebagai alat dynamic instrumentation sangat penting. Dalam artikel ini, kami akan menjelaskan bagaimana menggunakan Frida untuk melakukan bypass root detection pada perangkat Android, membuka peluang untuk menguji aplikasi dengan lebih bebas dan mendalam.

Bypass Root Detection with Frida

Disini saya tidak akan menjelaskan bagaimana cara menginstall ataupun mengkonfigurasi frida maupun frida-server, kalian bisa googling sendiri untuk cara instalasinya. Namun lebih ke bagaimana kita melakukan inspeksi function Root Detection yang ada pada aplikasi, lalu melakukan hooking menggunakan frida untuk membypass function tersebut.

Yang dibutuhkan:

  • Jadx-GUI
  • Frida
  • Android Emulator

Bagi pengguna Kali Linux, jadx dapat diinstall menggunakan perintah

1
sudo apt update && sudo apt install jadx -y

Untuk pemanasan, kita akan coba untuk melakukan bypass root detection pada aplikasi AndroGoat.

Sebelum memulai tutorial ini, buat satu file .js dengan nama terserah (sebagai contoh disini saya buat dengan nama inori.js), lalu isikan didalamnya:

1
2
3
Java.perform(function () {
   // Bypass Root Detection
});

Pertama, buka file .apk menggunakan Jadx-GUI, lalu cari function yang digunakan untuk menjalankan root detection. Berikut beberapa keyword yang mungkin bisa dipakai: “/bin”, “which su”, “rooted”.

Search root detection

Disini terlihat ada dua fungsi yang digunakan untuk mendeteksi root pada device, yakni fungsi isRooted dan fungsi isRooted1.

Root Detection

Selanjutnya, klik kanan pada nama fungsi isRooted lalu klik Copy as frida snippet.

Copy to Frida

Paste kedalam file .js yang sudah kita siapkan sebelumnya. Ubah nilai return menjadi false. Sekarang kode yang kita miliki menjadi seperti berikut:

1
2
3
4
5
6
7
8
9
10
Java.perform(function () {
   // Bypass Root Detection
   let RootDetectionActivity = Java.use("owasp.sat.agoat.RootDetectionActivity");
    RootDetectionActivity["isRooted"].implementation = function () {
        console.log(`RootDetectionActivity.isRooted is called`);
        let result = this["isRooted"]();
        console.log(`RootDetectionActivity.isRooted result=${result}`);
        return false;
    };
});

Ulangi langkah sebelumnya ke function isRooted1. Namun karena RootDetectionActivity sudah dideklarasikan sebelumnya, hapus untuk yang kedua. Sehingga final script untuk bypass root detection kita menjadi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Java.perform(function () {
   // Bypass Root Detection
    let RootDetectionActivity = Java.use("owasp.sat.agoat.RootDetectionActivity");
    RootDetectionActivity["isRooted"].implementation = function () {
        console.log(`RootDetectionActivity.isRooted is called`);
        let result = this["isRooted"]();
        console.log(`RootDetectionActivity.isRooted result=${result}`);
        return false;
    };
    RootDetectionActivity["isRooted1"].implementation = function () {
        console.log(`RootDetectionActivity.isRooted1 is called`);
        let result = this["isRooted1"]();
        console.log(`RootDetectionActivity.isRooted1 result=${result}`);
        return false;
    };    
});

Selanjutnya kita bisa spawn aplikasi AndroGoat menggunakan perintah:

1
frida -l inori.js -U -f owasp.sat.agoat

“owasp.sat.agoat” adalah nama proses yang bisa dicek menggunakan perintah frida-ps -Uai.

Ketika kita cek di AndroGoat, maka notifikasi yang muncul ketika kita cek adalah “Device is not rooted” yang menunjukkan bypass root detection kita berhasil.

Root Bypassed

Jadi teori sederhananya dalam melakukan bypass root detection adalah:

Inspeksi file .apk menggunakan Jadx > Cari fungsi root detection > Copy ke frida snippet > ubah nilai return menjadi false.

Study Case: Bypass iRoot Plugin

Oke, sekarang ke real case dimana aktifitas bypass root detection ini harus dilakukan ketika saya melakukan pentesting mobile apps salah satu client. Namun karena alasan privasi, saya tidak akan me-reveal nama aplikasi maupun tampilan aplikasinya.

Root detection pada aplikasi ini tidak bisa dibypass menggunakan script publik dari Frida CodeShare. Berikut hasil yang didapat ketika mencoba melakukan bypass dengan script antiroot dari Frida CodeShare.

Apps Killed

Intinya, ketika aplikasi di spawn menggunakan Frida, root masih terdeteksi dan aplikasi langsung force closed.

Selanjutnya kita cari function Root Detection menggunakan Jadx seperti yang sudah kita bahas sebelumnya.

searchbin

Root Check

Disini ketika tau bahwa aplikasi menggunakan plugin iRoot, saya mencoba public script dari Frida CodeShare namun ternyyata masih gagal.

iRoot

  • https://codeshare.frida.re/@JJK96/iroot-root-detection-bypass/

Singkat cerita, ketemulah function untuk mendeteksi root tersebut.

isRooted

Selanjutnya kita cari lagi dimana class u1.b dipanggil.

Search u1.b

Setelah ketemu, kita langsung copy ke frida snippet.

Copy to Frida

Final script:

1
2
3
4
5
6
7
8
9
10
11
12
Java.perform(function () {
   // iRoot Bypass
    let IRoot = Java.use("de.cyberkatze.iroot.IRoot");
      IRoot["execute"].implementation = function (str, jSONArray, callbackContext) {
      console.log(`IRoot.execute is called: str=${str}, jSONArray=${jSONArray}, callbackContext=${callbackContext}`);
      let result = this["execute"](str, jSONArray, callbackContext);
      console.log(`IRoot.execute result=${result}`);
      return false;
   };
});


Root bypassed.

Bypassed

Oke mungkin itu saja mengenai bypass root detection menggunakan Frida. Di artikel selanjutnya (jika saya sempat) kita akan membahas mengenai bypass SSL Pinning pada aplikasi.

Thanks buat Mas Firdy dan Mas Suhada serta kawan-kawan ZeroByte lainnya atas diskusi dan juga pencerahannya.

This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents
Trending Tags