Kali ini saya akan berbagi Write Up dari salah satu soal di Cyber Jawa 2018 yang baru saja berakhir. Selamat membaca~
Langsung saja soal kali merupakan soal Reversing. Diberikan sebuah program ELF 64-bitnya not stripped yang bisa didownload disini.

Seperti yang terlihat diatas kita disuruh untuk memasukkan 20 angka yang kemudian dicek menggunakan perulangan yang mana jika setelah dicek nilai dari v7 adalah true atau 1 maka akan muncul string "Good numbers" dan flag. Jika nilai dari v7 selain itu maka akan muncul string "Bad numbers". Nah, untuk bisa membuat nilai v7 tetap 1 maka kita harus bisa memasukkan 20 angka yang sesuai dengan pengecekan. Kita coba jalankan dulu programnya.
Kita coba memasukkan 20 angka bebas dan hasilnya adalah string "Bad numbers". Hm, sekarang saat kita membuat program yang akan menghasilkan angka yang sesuai dengan pengecekan. Pertama, kita harus pahami dulu pengecekannya.
Pada perulangan pengecekan yang pertama tertulis seperti ini.
Yang artinya apa? Artinya jika nilai dari numbers[0] dan numbers[1] harus bernilai 1. Nah, nilai dari variabel numbers sendiri merupakan nilai dari inputan kita. Berarti angka pertama dan kedua kita harus bernilai 1.
Lanjut ke perulangan pada pengecekan yang kedua terlihat seperti ini
Selanjutnya jika nilai dari j lebih dari 1 yaitu 2 maka angka inputan kita akan dicek disini. Berarti nilai yang pertama dicek adalah numbers[2] atau inputan ke-3 kita. Perulangan tersebut mengecek apakah nilai dari numbers[j] tidak senilai dengan nilai numbers[j - 1] + numbers[j-2]. Kita ambil contoh inputan angka ke-3 kita berarti j = 2. Kita masukkan nilai j ke pengecekan diatas, maka hasilnya:
numbers[2] != numbers[1] + numbers[0].
Kita sudah tau sebelumnya bahwa nilai dari numbers[0] dan number[1] adalah 1. Kita coba masukkan nilai tersebut, hasilnya: numbers[2] != 1 +1. Artinya input ke 3 kita harus 2. Nah, jika kita perhatikan pola ini bisa diartikan bahwa nilai inputan kita adalah jumlah dari 2 inputan sebelumnya. Hm, sekarang langsung saja buat program sederhana yang akan menghasilkan 20 angka yang sesuai dengan pengecekan. Kali ini saya menggunakan pyhton. Kurang lebih program saya seperti ini:
Yang kalau dijalankan akan mengahasilkan 20 angka seperti dibawah ini:
Langsung saja kita jadikan hasil angka dari program yang kita buat menjadi inputan angka untuk program numbersnya menggukan pipe linux atau '|'.
Nah, miuncul string 'Good numbers' diikuti dengan flagnya.
Flag : CJ2018{l0g1c_t35t_!}
Sekian, terima kasih sudah menyimak sampai akhir. Silakan berikan kritik & saran kepada penulis, karena penulis juga masih belajar. :)







0 komentar:
Posting Komentar