[noxCTF 2018] – Guess The String

Challenge Description : Would you like to test your luck?
Let’s see if you can guess the correct string.

 

Diberikan File ELF-64 bit bernama GuessTheString, ketika dijalankan maka hasilnya adalah sebagai berikut :

Selanjutnya, dengan menggunakan IDA, saya mencoba untuk melakukan disassemble file tersebut, dengan hasil sebagai berikut :

dari hasil disassemble tersebut, terdapat function yang bernama check, ketika kita melakukan disassemble terhadap function check, hasilnya adalah sebagai berikut :

terdapat total 11 function check yang dilakukan dari eksekusi file tersebut. Selanjutnya, saya mencoba untuk melakukan disassemble dari semua function check tersebut satu per satu.

 

function check1 memvalidasi apakah string input memiliki panjang string 11 atau tidak.

 

function check2 memvalidasi apakah setiap karakter dari string input memiliki besar ASCII lebih dari 32 atau tidak.

 

function check3 memvalidasi agar karakter pertama dari string memiliki nilai ASCII != 66 atau ‘B’ dan hasil perkalian nilai ASCII karakter pertama dan ASCII karakter kedua harus menghasilkan angka 3478.

 

function check4 memvalidasi apakah hasil XOR ketiga karakter pertama menghasilkan nilai 49.

 

function check5 memvalidasi apakah huruf keempat memiliki nilai ASCII lebih besar dari huruf ketiga dan memvalidasi apakah kuadrat first byte huruf ketiga sama dengan kuadrat first byte huruf keempat.

 

function check6 memvalidasi apakah huruf kelima dan keenam memiliki nilai ASCII yang prima atau tidak dan melakukan pengecekan apakah hasil XOR huruf keempat dengan huruf kelima menghasilkan nilai 126

 

pada function check7, huruf ketujuh dari string input harus merupakan bilangan prima dan nilai ASCII nya harus bernilai 2 * ((ASCII bilangan ke-enam) -42))

 

pada function check8, karakter kedelapan harus memiliki nilai ASCII di antara 47-57 dan nilainya jika dilakukan operasi 4*(ASCII karakter ke 8 >> 2) memiliki hasil yang sama dengan nilai ASCII karakter kedelapan.

 

Pada function check9, akan dilakukan compare apakah karakter ke-9 sama dengan nilai AH ^ karakter kedelapan

 

Function check10 berfungsi untuk mengecek apakah karakter kesepuluh memiliki nilai ASCII sebesar 2 kali nilai ASCII karakter kesembilan atau tidak.

sedangkan function check11 menghasilkan hasil sebagai berikut :

 

Dari hasil-hasil di atas, maka dapat disimpulkan bahwa kita dapat menyusun string input sendiri yang sesuai dengan kondisi-kondisi pada setiap function check. Sehingga penyelesaian yang saya lakukan adalah sebagai berikut :

untuk function check3 dan check4, berikut ini code yang saya buat :

dan ketika dijalankan, maka kita mendapatkan hasil sebagai berikut :

string input : /JT

setelah itu, untuk function check5, berikut ini code yang saya buat :

string input : /JTl

Selanjutnya, untuk menjawab check6, berikut ini code yang saya buat :

string input : “/JTlC=” . Selanjutnya, untuk menjawab function 7, karena karakter kelima adalah “=”, dengan ASCII 61, maka kita dapat membuat code seperti di bawah ini :

string input : “/JTlC=&”. Selanjutnya, untuk menjawab function 8, berikut ini code yang saya buat :

dari hasil tersebut, kita dapat memilih karakter kedelapan antara 0,4, dan 8. Di sini, saya memilih karakter nol (‘0’). Sehingga string input menjadi “/JTlC=&0″. Setelah itu, untuk function check9, saya menggunakan breakpoint menggunakan gdb pada bagian cmp seperti gambar berikut :

dari hasil tersebut, input yang merupakan karakter ke-9 akan di compare dengan cl yang bernilai 0x22 yaitu karakter petik (“) atau bernilai 34 pada ASCII. Sehingga input string menjadi :”/JTlC=&0″”.

Selanjutnya, pada check10, kita harus memberikan input karakter kesepuluh senilai 2*34 = 68 sehingga karakter kesepuluh menjadi “D” dan string input menjadi : “/JTlC=&0″D”. dan untuk karakter ke-11 saya menggunakan cara yang sama seperti mencari karakter kesembilan seperti berikut :

dari hasil tersebut, input yang merupakan karakter ke-11 akan di compare dengan al yang bernilai 0x7a yaitu karakter “z” atau bernilai 122 pada ASCII. Sehingga kita berhasil mendapatkan semua karakter pada string input yaitu :

“/JTlC=&0″Dz”

Ketika dijalankan maka hasilnya sebagai berikut :

maka didapatkan flagnya, karena services ctf noxCTF sudah tidak available, saya mencari hasil flag nya dari https://github.com/OAlienO/CTF/tree/master/2018/noxCTF/Guess-The-String dengan hasil flag : noxCTF{A5semb1y_Is_Grea7}.

Leave a Reply

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