[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.
Sederhana, tidak ada apa-apa. Mari kita dekompilasi menggunakan JADX
.
Tidak ada apa-apa di MainActivity
. Mari kita lihat 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
Yey.. Kita mendapatkan flag.