Top Hat Sec mempublish sebuah challenge tentang reverse engineering yang cocok untuk pemula yang ingin belajar dan mengenal tentang reversing. Challenge yang dibuat THC kali ini adalah kita harus menebak magic number yang ada diaplikasi crackme2, kira-kira seperti ini tampilannya.
|
Gambar 1 : Crackme2 |
File challenge dapat di download pada link ini :
Crackme2[*]
Langsung saja, langkah yang pertama adalah mengamati alur dari aplikasi itu sendiri. Sebelumya, download aplikasi debugger seperti ollydbg , immunity debugger, dll. sesuai dengan selera masing-masing, yang saya gunakan pada saat ini adalah immunity debugger. Tidak lupa baca juga artikel tentang
assembly language paling tidak sampai paham pengunaan general purpose register, karena jika kita berbicara tentang reverse engineer, pasti akan menemui bahasa "aneh" yang satu ini.
|
Gambar 2 : Proses ketika tebakan angka salah |
Dari percobaan diatas, secara singkat alur dari program tersebut dapat digambar di bawah ini :
|
Gambar 3 : Flowchart |
Flowchart pada gambar 3 merupakan hasil analisis sederhana terhadap perilaku aplikasi tersebut. Untuk melihat lebih dalam lagi, perlu menggunakan debugging tool.
|
Gambar 4 : Immunity Debugger Start |
Lanjut ke analisa aplikasi melalui immunity debugger, run crackme2 step by step (F8) atau bisa juga dengan klik tanda panah pada gambar 4, dan amati perlakunya.
|
Gambar 5 : Breakpoint 1 |
Perhatikan, pada saat pointer menunjuk address 00401290 (highlight biru), aplikasi memanggil fungsi di alamat crackme2.00401000 dan menampilkan output seperti gambar sebelah kanan. Untuk lebih jelas proses apa yang dipanggil, follow (tekan enter) address 00401000.
|
Gambar 6 : Follow |
Supaya bisa melanjutkan proses analisis, pasang breakpoint (tekan F2) pada address 00401000, re-run immunity dan lanjutkan step (F8).
|
Gambar 7 : Breakpoint 2 |
Pada address 004010F8, aplikasine loncat lagi ke address crackme2.0046A894, maka perlu dipasang breakpoint lagi, kemudian follow address 0046A894.
|
Gambar 8 : Breakpoint 3 |
Sampai disini (0046A894), Terlihat tanda dari crackme yang dijalankan, dari ASCII yang ada, dapat disimpulkan ketika magic number salah, maka print [FAIL], jika magic number yang kita masukkan benar, maka print [SUCCESS]. Pertanyaanya adalah, apa kondisi yang menyatakan bahwa x input adalah magic number?. Pasang breakpoint (F2), pada address 0046A894, kemudian lanjut lagi step by step (F8), jangan lupa untuk di re-run.
|
Gambar 9 : 0046A8CA User Input |
0046A8CA, Call crackme2.00446864. output yang ditampilkan aplikasi meminta input magic number, sebagai contoh saya masukkan angka 88 dan perhatian step selanjutnya yaitu PUSH EDX. Jadi hasil input yang dimasukkan (88) dimasukkan ke register EDX.
Dan dapat dilihat pada gambar 10, nilai EDX sekarang adalah 00000058. 58? padahal input yang dimaukkan tadi adalah 88. Tidak ada yang salah dengan ini, 58 yang ada di EDX merupakan bilangan HEX, maka jika 58 diconvert ke decimal maka hasilnya 88. (silahkan dicek
www.asciitohex.com)
|
Gambar 11 : CMP |
Step selanjutnya setelah PUSH EDX adalah CMP nilai yang ada di [EBP-C] dengan 15E. Apa itu CMP? (silahkan dibaca di
CMP artikel) yang menarik disini adalah bilangan yang dibandingkan dengan value dari [EBP-C]. Nilai dai [EBP-C] ternyata bilangan yang sudah dimasukkan 88 (0x58). nilai ini yang dibandingkan 15E, dan jika kita convert ke decimal maka 15E=350. Perhatikan instruksi selanjutnya JE crackme.0046A92B, apa itu JE? (
baca). Sedikit saya jelaskan, JE (Jump Equal) artinya jika hasil compare 0x58 sama denngan 0x15E maka loncat ke address 0046A92B, yang artinya magic number yang seharunya dimasukkan adalah 15E atau 350.
|
Gambar 12 : Success |
Ada apa di jump address 0046A92B, langsung saja di follow, seperti gambar diatas, terdapat ASCII code "[SUCCESS]". Setelah mengetahui magic number yang seharunya dimasukkan, mari ita coba lagi tanpa debugger.
|
Gambar 13 : 350, Success |
And yes, 350, Success.
Sekian, semoga bermanfaat.
No comments:
Post a Comment