Nah di soal ini kita di kasih satu file ELF buat kita reverse, jadi si elf ini bakal nge print key nya jika password yang kita masukin sama dengan password yang telah kita tentukan, simple.
Buat yang butuh soalnya buat latihan bisa check di download di : DISINI
Pertama yang saya lakukan adalah check file itu sendiri (Pas pertama kan gak tau ini file apaan) :
Yarp, kita dapet, ternyata file ELF 32 bit, Nah sesudah itu, tadinya saya mau coba static analysis dulu, tapi karena kayaknya programnya simple(sebenernya males sih) jadi langsung aja buka GDB terus debugging.
ini hasil dari disassemble fungsi main dari file nya :
Nah dari situ udah keliatan langsung, di address 0x0804851f ada pembandingan(cmp) dan di bawahnya ada instruksi jne(Jump if not equal).
di sini kita udah tau bahwa password yang kita masukan udah ada di register eax, kemudian di bandingkan dengan variable $0x111a7, kalo tidak sama(password salah) maka instruksi selanjutnya bakal loncat(jumping) ke address 0x804853d.
Disini ada dua cara supaya kita bisa dapat key nya tanpa tau password yang sebenarnya, yaitu :
Disini, saya menggunakan cara yang kedua.
- Kita bisa overwrite isi dari register eax dengan nilai dari variable tadi ketika proses pembandingan
- Kita bisa melakukan jumping langsung melewati instruksi jne dengan mengoverwrite nilai dari register eip dengan address sesudah instruksi jne.
Hal yang pertama saya lakukan adalah memasang breakpoint di address 0x0804851f supaya program bisa berhenti pada address itu.
Kita bakal diminta password terlebih dahulu(ada pemanggilan fungsi scanf) itu bisa diisi dengan nilai apapun.
nah dari sini kita bisa melakukan jumping untuk melewati instruksi cmp dan jne dengan cara mengoverwrite nilai dari register eip.
Setelah itu kita bisa melanjutkan program dengan command c pada gdb.
Program akan memberikan kita Flagnya ^_^ tanpa harus mengetahui password nya.
No comments:
Post a Comment