Post

[Frida Labs] 03 - Changing the Value of a Variable

Dalam kesempatan ini, kita akan mempelajari cara mengubah nilai variabel menggunakan Frida.

Sebagai studi kasus, kita akan menerapkannya pada aplikasi Challenge 0x3.apk, yang bisa diunduh dari sini.

0x1 - Prerequisites

  • Dasar reverse engineering menggunakan JADX.
  • Kemampuan untuk memahami kode Java.
  • Kemampuan untuk menulis kode Javascript.
  • Familiar dengan ADB.
  • Perangkat Android yang sudah di-root.

0x2 - Challenge 0x3

Mari kita jalankan aplikasinya.

Aplikasi Challenge 0x3 Aplikasi Challenge 0x3

Aplikasi memiki sebuah tombol dan TextView. TextView tersebut memberikan hint tentang flag. Tidak ada EditText untuk meng-input-kan apapun. Jika kita mengklik tombol tersebut, maka akan muncul pesan “TRY AGAIN”.

Mari kita analisis aplikasinya menggunakan JADX.

Reverse Engineering APK Reverse Engineering APK

Kali ini kita memiliki class tambahan, yaitu Checker.

Class Checker Class Checker

Pada class ini, terdapat variable integer statis bernama code yang diberi nilai 0. Selain itu, ada static method bernama increase(). Metode ini akan menambahkan 2 nilai ke variabel code ketika dipanggil. Metode ini tidak pernah dipanggil oleh aplikasi, jadi nilai dari variable code tidak akan berubah.

Mari kita perhatikan kode di MainActivity.

1
2
3
4
5
6
7
8
btn.setOnClickListener(new View.OnClickListener() { // from class: com.ad2001.frida0x3.MainActivity.1
            @Override // android.view.View.OnClickListener
            public void onClick(View v) {
                if (Checker.code == 512) {
                    byte[] bArr = new byte[0];
                    ...
                    ...
                }                

Ketika tombol diklik, aplikasi akan melakukan validasi apakah variabel code pada class Checker sama dengan 512. Jika kondisi ini terpenuhi, aplikasi akan memberikan pesan “You won”, mendekripsi flag, dan menampilkannya di TextView. Jika tidak, ia akan menampilkan pesan “TRY AGAIN”.

Terdapat dua cara utama yang bisa kita lakukan, yaitu:

  • Mengubah nilai variabel code menjadi 512.
  • Memanggil metode increase() sebanyak 256 kali.

0x3 - Changing the value of code variable

Untuk mendapatkan flag, kita perlu mengatur nilai dari variable code ke 512. Kita dapat melakukannya dengan mudah menggunakan Frida.

Berikut adalah template script untuk mengubah nilai variable menggunakan Frida:

1
2
3
4
5
6
Java.perform(function (){
 
    var <class_reference> = Java.use("<package_name>.<class>");
    <class_reference>.<variable>.value = <value>;

})

Mari kita sesuaikan kodenya.

  • Package: com.ad2001.frida0x3
  • Class: Checker
  • Variable: code
1
2
3
4
5
6
Java.perform(function (){
 
    var a = Java.use("com.ad2001.frida0x3.Checker");
    a.code.value = 512;

})

Mari kita jalankan script-nya.

1
➜ frida -U -f com.ad2001.frida0x3

Mengubah Nilai Variable Menggunakan Frida Mengubah Nilai Variable Menggunakan Frida

Sebelum script-nya dijalankan, jika kita mengklik tombolnya, maka akan muncul pesan “TRY AGAIN”. Sekarang, setelah setelah script-nya dijalankan, aplikasi akan menampilkan flag.

Bagaimana, mudah bukan? Mari kita coba cara yang kedua.

0x4 - Calling the increase() method

Pendekatalan lainnya adalah dengan memanggil metode increase() sebanyak 256 kali. Setiap pemanggilan meode ini akan menambah nilai dari variable code sebesar 2.

Sebelumnya kita telah mempelajari cara untuk memanggil static method di Frida, jadi untuk memanggil metode increase() berkali-kali, kita bisa menggunakan loop.

Mari kita buat script-nya.

  • Package: com.ad2001.frida0x3
  • Class: Checker
  • Method: increase()
1
2
3
4
5
6
7
8
9
10
Java.perform(function (){
 
    var a = Java.use("com.ad2001.frida0x3.Checker");

    for (var i = 1; i <= 256; i++) {
        console.log("Calling increase() method " + i + " times");
        a.increase();
    }

})

Tutup aplikasinya dan jalankan kembali menggunakan Frida.

1
➜ frida -U -f com.ad2001.frida0x3

Sekarang, jalankan script-nya.

Memanggil Metode Menggunakan Perulangan Memanggil Metode Menggunakan Perulangan

Bisa kita lihat, script tersebut akan memanggil metode increase() berulang kali dan nilai variable code akan menjadi 256. Ketika kita klik tombolnya, aplikasi akan menampilkan flag seperti yang kita harapkan.

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