[ångstromCTF 2019 ] – i_like_it

Challenge Description : Now I like dollars, I like diamonds, I like ints, I like strings. Make Cardi like it please.

 

Dari link tersebut, diberikan executable file bernama i_like_it. Setelah file tersebut dijalankan / di-execute maka file tersebut akan meminta input sebagai berikut :

ketika dilakukan input secara acak “asdsadas” maka file tersebut akan mengeluarkan output “Cardi don’t like that.”. Setelah itu, saya mencoba untuk melihat strings yang terdapat pada file tersebut menggunakan fungsi strings pada terminal yang menghasilkan :

didapatkan string “okrrrrrrr” setelah string : “I like the strings that i’m thinking of” yang berarti kemungkinan besar string yang diinginkan sebagai input adalah “okrrrrrrr”. Setelah dicoba dengan input “okrrrrrrr”, output yang dihasilkan adalah sebagai berikut :

file tersebut kemudian akan meminta input yang berisi 2 integer yang dipisahkan dengan spasi. Jika diberikan input acak, maka akan menghasilkan output “Cardi don’t like that.” seperti gambar berikut :

Untuk mengetahui integer apa saja yang perlu di input, maka saya menggunakan gdb untuk melakukan disassemble terhadap fungsi mainnya. Setelah itu, ditemukan beberapa fungsi yang memberikan clue terhadap 2 angka yang seharusnya di-input setelah fungsi scanf pada gambar berikut ini :

function pertama jika di breakdown akan berjalan sebagai berikut :

  • mov edx,DWORD PTR [rbp-0x38] -> memasukkan integer pertama ke register edx
  • mov eax,DWORD PTR [rbp-0x34] -> memasukkan integer kedua ke register eax
  • add eax,edx -> menjumlahkan integer yang terdapat pada eax dan edx dan memasukkannya ke eax
  • cmp eax,0x88 -> melakukan compare / membandingkan hasil penjumlahan dengan 0x88.

pada function berikut, maka didapatkan bahwa 2 angka / integer yang di-input harus memiliki hasil penjumlahan yang sama dengan 0x88 atau 136 pada desimal jika kita mengubah hexadecimal ke bilangan desimal.

pada function kedua, jika di breakdown maka akan berjalan sebagai berikut :

  • mov edx,DWORD PTR [rbp-0x38] dan mov eax,DWORD PTR [rbp-0x34] -> sama seperti function pertama
  • imul eax,edx -> melakukan operasi perkalian integer pada eax dengan integer pada edx dan memasukkan hasil perkalian ke eax.
  • cmp eax,0xec7 -> membandingkan hasil perkalian dengan 0xec7 yang senilai dengan 3783 pada bilangan desimal.

Dari fungsi pertama dan kedua, diketahui bahwa 2 integer yang di-input harus menghasilkan angka 136 ketika dijumlahkan dan menghasilkan angka 3783 ketika dikalikan. Sedangkan function ketiga akan berjalan sebagai berikut :

  • mov edx,DWORD PTR [rbp-0x38] dan mov eax,DWORD PTR [rbp-0x34] -> sama seperti function pertama dan kedua
  • cmp edx,eax -> membandingkan integer pada eax dengan edx
  • jl 0x4008ab <main+261> -> memastikan bahwa integer pada edx < integer pada eax

dari function ketiga makan dapat disimpulkan : bahwa 2 integer yang di-input harus menghasilkan angka 136 ketika dijumlahkan dan menghasilkan angka 3783 ketika dikalikan serta angka pertama harus lebih kecil dibandingkan angka kedua.

 

untuk mencari angka tersebut, saya membuat program yang berfungsi untuk mencari faktor dari 3783 dan menjumlahkan kedua hasil faktor tersebut dan menjumlahkan kedua bilangan faktor seperti gambar berikut.

setelah di-compile: maka angka yang dihasilkan adalah :

setelah di-input pada file tersebut maka akan dihasilkan flag sebagai berikut :

flag yang didapatkan adalah “actf{okrrrrrrr_39_97}

Leave a comment

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