Kali ini kami akan membahas salah satu soal CTF FIT 2016 tentang reverseme, file dapat diunduh di link[
soal]. Karena keterbatasan waktu, soal ini belum sempat dijawab, kami akan mencoba untuk mengupas cara untuk mendapatkan flag dengan menggunakan radare2.
|
Gambar 1 : start r2 debug mode |
Dimulai dengan membuka reverseme menggunakan radare2 dalam debug mode dengan flag percobaan 12345678901234567890, mengapa flagnya seperti itu?, setelah kami telusuri panjang flag haruslah 20, ini terdapat pada fungsi main yang bisa anda jelajahi lebih lanjut, jalankan perintah 'aaa' untuk analyze dan 'afl' untuk melihat fungsi yang berada pada reverseme. Proses analisis akan kami mulai dengan fungsi main.
|
Gambar 2 : Analisis fungsi main |
Jalankan perintah 'pdf @ main' untuk melihat code pada fungsi main, kemudain kami menemukan bagian yang menarik seperti pada gambar dibawah ini.
|
Gambar 3 : String flagnya benar! |
|
|
Dimana sebelumnya terdapat pemanggilan fungsi memcmp. Maka kami mencoba menambahkan breakpoint pada alamat 0x00400813 dan melanjutkan proses debugging sampai ke breakpoint yang telah dibuat.
|
Gambar 4 : Breakpoint |
Agar lebih mudah masuk ke mode visual dengan 'Vpp'.
|
Gambar 5 : RAX RCX |
Perhatikan rax dan rcx sebelum pemanggilan memcmp, sama besarnya 0x14 atau 20 dalam desimal. Masih digambar yang sama nilai rax = 0x7ffd04336f94 dan rcx = 0x7ffd04336f60. Mari kita telusuri apa yang ada di alamat itu.
|
Gambar 6 : RAX RCX values |
Jika diperhatikan pola rcx seperti tidak asing lagi, yaitu 12345678901234567890 setelah ditambah beberapa operasi jadilah seperti itu. Sementara rax merupakan string yang akan dibandingkan, yang kemungkinan adalah flagnya. Maka kita simpan nilai hex yang terdapat pada @ rax.
|
Gambar 7 : rax value |
Simpan rangkaian hex '1d260b716f6e6d380b473a113a3b213e31444532' yang selanjutnya akan kita bedah menggunakan python.
Kemudian pertanyaan selanjutnya adalah ada operasi yang dilakukan sebelum masuk ke fungsi compare? jika sudah menemukan fungsi tersebut maka key ini dapat didecrypt dengan mudah.
|
Gambar 8 : Fungsi encrypt |
Jika ditelusuri ('VV @ main' pada radare) terdapat fungsi sebelum melakukan comparing, ternyata karakter tersebut diolah dengan operasi xor 0x55 kemudian ditambahkan 0xa. Maka untuk mendapatkan fungsi deskripsinya operasi tersebut dibalik menjadi char chiper - 0xa kemudian di xor dengan 0x55. Kira-kira seperti ini pada python.
|
Gambar 9 : Flag |
Setelah mendapat flag, mari kita verifikasi dengan cara memasukkan ke program reverseme.
|
Gambar 10 : Flag benar |
Selamat, flagnya benar!
FIT2016{TheRedBaron}
No comments:
Post a Comment