[Imaginary CTF Round 12] – Too Old

Codingan Soal:

penjelasan soal:

Soal ini menggunakan key yang digenerate random, lalu setiap karakter flag akan di xor dengan hasil key AND 255 dan ditambahkan ke output. Setelah itu, key akan dikuadratkan dan diambil 8 angka dari index ke-4 sampai 12 menjadi key baru.

Keynya berkisaran 10000000 hingga 100000000, jika kita bruteforce satu per satu maka totalnya adalah 90000000 kombinasi dan itu cukup berat. Mari kita persempit pencariannya.

Petunjuk pertama yang bisa kita gunakan adalah format flag, yaitu “ictf{“ atau jika dalam decimal: [105, 99, 116, 102, 123].

Dari soal, kita tahu bahwa key yang original hanya digunakan untuk karakter pertama flag, karena sisanya key akan berubah. Maka dari itu, coba kita bruteforce key dari 10000000 – 10000255 untuk mencari output yang hasilnya “b’\xe6’” (karakter pertama pada output).

Ternyata key yang cocok dengan output e6 adalah 10000015, namun ini bukan key yang sebenarnya. Key ini bila di-increment dengan 256 akan tetap menghasilkan e6 pada karakter pertama output. Jadi rangenya adalah 90000000/256 = 351563, sudah cukup kecil untuk melakukan bruteforce.

Jadi yang perlu dilakukan adalah kita mencari key yang sebenarnya dengan me-looping keynya dari 10000015 hingga 100000000 dan di-increment 256, encrypt per karakter sesuai format flag, lalu cari apakah ada yang hasilnya sama dengan e649fd7458 (nilai hex dari format flag yang diencrypt). Berikut codingannya:

Prosesnya cukup cepat, hasilnya key yang original telah kita temukan bernilai 36670095. Setelah itu, gunakan keynya untuk me-reverse codingannya.

output:

Flag: ictf{f0r_l00p5_r1ght_th3r3_4nd_3v3ryWh3r3}

Leave a Reply

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