Post

[Frida Labs] 04 - Creating a Class Instance

Dalam kesempatan ini, kita akan mempelajari cara membuat class instance menggunakan Frida.

Sebagai studi kasus, kita akan menerapkannya pada aplikasi Challenge 0x4.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 0x4

Mari kita jalankan aplikasinya.

Aplikasi Challenge 0x4 Aplikasi Challenge 0x4

Sederhana, tidak ada apa-apa. Mari kita dekompilasi menggunakan JADX.

Class MainActivity Class MainActivity

Tidak ada apa-apa di MainActivity. Mari kita lihat class Check.

Class Check Class Check

Terdapat metode get_flag(), yang berisi operasi XOR yang akan mendekode teks I]FKNtW@]JKPFA\\[NALJr menggunakan kunci 15. Meskipun kita bisa dengan mudah menyelesaikannya, seperti yang telah disebutkan sebelumnya, tujuan kita adalah untuk menjadi lebih mahir menggunakan Frida.

Metode ini tidak pernah dipanggil oleh aplikasi. Selain itu, metode ini memiliki argumen a, di mana jika nilai dari argumen a adalah 1337, maka flag akan didekode.

Jika diperhatikan, metode get_flag() ini merupakan instance method. Oleh karena itu, kita tidak bisa memanggil metode tersebut dengan cara yang sama seperti memanggil static method.

Baca lebih lanjut tentang perbedaan metode static dan instance di sini.

0x3 - Calling the get_flag()

Mari kita lihat bagaimana cara memanggil metode get_flag(). Seperti yang kita ketahui, ini bukan static method, jadi yang pertama kita harus lakukan adalah membuat instance dari class tersebut. Dengan menggunakan intance tersebut, kita akan memanggil metodenya. Berikut adalah kode Java yang sudah disesuaikan:

1
2
Check ch = new Check();
String flag = ch.get_flag(1337);

Fungsi ini akan mengembalikan sebuah string, jadi kita harus menyimpannya di variabel.

Berikut adalah tempalte script yang akan kita gunakan:

1
2
3
4
5
6
7
Java.perform(function (){
 
    var <class_reference> = Java.use("<package_name>.<class>");
    var <class_instance> = <class_reference>.$new(); //Class Object
    <class_instance>.<method>();   //Calling the method

})

Di Frida, untuk membuat instance dari class Java, kita bisa menggunakan metode $new(). Ini adalah metode spesifik dari Frida yang memungkinkan kita untuk menginstansiasi objek dari class tertentu.

Mari kita sesuaikan kodenya.

  • Package: com.ad2001.frida0x4
  • Class: Check
  • Function: get_flag
1
2
3
4
5
Java.perform(function (){
 
    var a = Java.use("com.ad2001.frida0x4.Check");

})

Mari kita buat instance-nya menggunakan metode $new().

1
2
3
4
5
6
Java.perform(function (){
 
    var a = Java.use("com.ad2001.frida0x4.Check");
    var a_obj = a.$new(); //Class Object

})

Sekarang, kita bisa dengan mudah memanggil metode get_flag().

1
2
3
4
5
6
7
8
Java.perform(function (){
 
    var a = Java.use("com.ad2001.frida0x4.Check");
    var a_obj = a.$new(); //Class Object
    var res = a_obj.get_flag(1337);   //Calling the method
    console.log("FLAG:" + res)

})

Mari kita jalankan script tersebut.

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

Mendapatkan Flag Dari Instance Method Mendapatkan Flag Dari Instance Method

Yey.. Kita mendapatkan flag.

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