[NewarkAcademyCTF2019] – Keygen

 

Pada Soal Keygen, kita diberikan file “keygen-1”.

Setelah mendapatkan file, saya coba untuk menjalankannya terlebih dahulu..

Karena ini keygen jadi untuk menjalankannya harus dengan input “./keygen-1 “inputkey(atau kalau gambar diatas saya input abc)” “.

Setelah menjalankan program, saya check info filenya di untuk mengetahui informasi tentang programnya.

filenya 32-bit stripped binary(ELF).

Karena kita belum mengetahui kondisi yang diinginkan oleh program tersebut , maka saya mencoba menggunakan ltrace (command yang berfungsi sebagai library call tracer yaitu dengan running program tapi dengan tampilan yang detail(menampilkan line code yang error jika program tidak dapat dijalankan).

Bisa dilihat bahwa dalam program tersebut terdapat strlen pada tempat input.

Jadi saya mencoba untuk input string sebanyak 5, 10 , 15 sampai 20 untuk melihat respond program.

Pada saat saya input string sebanyak 5 dan 10, dia hanya menampilkan report yang sama seperti gambar diatas . Tetapi pada saat saya input string sebanyak 15 , dia menampilkan report yang berbeda….

Karena perbandingan sedang memeriksa kesetaraan antara substring dan string asli, tidak ada perubahan terjadi. Satu-satunya cara ini mungkin adalah jika string dimulai dengan nactf{. Oleh karena itu, program ini memeriksa apakah string yang dimasukkan dimulai dengan string target.

Dan karena string itu tampak seperti awalan dari potongan string flag yang kita cari.

pada sub_804928C ( view dengan IDA) saya mendapat :
0x80492cb: mov eax,DWORD PTR [ebp+0x8]
0x80492ce: add eax,0xe
0x80492d1: movzx eax,BYTE PTR [eax]
0x80492d4: cmp al,0x7d

String key sedang memuat dengan menjalankan instruksi pertama (ebp + 0x8 adalah lokasi dari string). Pointer ini kemudian dipindahkan sepanjang 14 byte dan nilainya dimuat kembali sebagai satu byte melalui perintah “movzx”, ini secara efektif memperpanjang byte untuk masuk ke dalam register 32-bit. Byte terakhir dibandingkan dengan 0x7d (“}” di ascii).

Pada saat saya check pada main function program, saya menemukan function yang mencari char dengan 3 step yang berbeda yaitu :

Uppercase: “@” -> “[”
Lowercase: “`” -> “{”
Numbers: “/” -> “:”

Sekarang, mencari tahu apa yang terjadi dengan local_c dan local_8 perlu waktu, saya mencoba menjalankannya beberapa kali dengan gdb di mana saya melihat bahwa output ke fungsi ini dikembalikan melalui eax dan ebx.

Ini sangat membingungkan sampai saya menemukan perintah “CDQ” ada di alamat 0804921c. Perintah ini menggandakan ukuran dari nilai yang ada di eax dan menempatkan overflow di ebx! Ini, oleh karena itu, berarti program ini mengembalikan nilai(tunggal) besar.Dan setelah melihat hampir keseluruhan function main , saya mencoba membuat code untuk menyelesaikan hexnya.

Code ini cukup sederhana untuk mengidentifikasi karena menambah nilai yang berbeda per jenis karakter.Dan Dengan sedikit analisa, saya dapat menemukan nilai target untuk fungsi ini.

nilai yang dibagi di antara eax dan ebx.Dan juga kita telah mengetahui bahwa assembly pada(function keygen-1) di bawah ini memeriksa equal(kesetaraan) dan XOR.

Analisa pada function2 ( keygen-1) , saya mendapat 0x1371fcaacf98 (target value)

Dan karena kita telah mendapat informasi yang cukup, saya pun mencoba code untuk menyelesaikan problem math diatas (saya juga menambahkan code sebelumnya / seperti gambar diatas tetapi dengan sedikit tambahan kondisi.

Setelah dijalankan,

Saya mendapat string ditulis vertical dan kalau saya rapikan akan seperti ini  “wsWxhZEG”(atas ke bawah) dan “GEZhxWsw”(bawah ke atas).

Karena diawal (waktu saya menggunakan command “./keygen-1 AAAAAAAAAAAAAAA” dia menampilkan string “nactf{” yang besar kemungkinanya adalah format awal dari flag, jadi saya mencoba input key dengan menggunakan 2 string yang telah saya dapat.

 

ternyata string pertama menampilkan output yang sama seperti sebelumnya(invalidkey).

Setelah itu , saya mencoba string kedua.

Dan ternyata string kedua yang saya input mengeluarkan output berbeda yaitu “key valid”.

Jadi bisa saya simpulkan bahwa nactf{GEZhxWsw} adalah flagnya.

 

 

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *