progrez.cloud

Write-Up REV Free Flag [WRECKIT 4.0]

13 April 2023

0x00 Challenge


Soal kali ini adalah soal kategori Reverse Engineering atau Reversing. Soal kali ini menyertakan sebuah file source code dengan bahasa C.



Jika kita lakukan compile dan running, programnya akan meminta untuk memasukkan flag-Nya.



Dan jika kita salah menginput flag, maka program akan menyatakan "bukan" seperti pada gambar tersebut. Lalu, bagaimana cara agar kita bisa mengetahui flag-Nya?


0x01 REV for Reversing


Pertama, kita coba lihat seperti apa isi source code nya.



Bisa kita lihat bahwa terdapat array yang berisi nilai-nilai integer. Sepertinya itu adalah kumpulan bilangan decimal dari karakter-karakter ascii. Jadi, kita bisa coba konversi bilangan-bilangan decimal tersebut menjadi bentuk karakter ascii kembali dengan script python berikut:

c = [119, 74, 101, 91, 107, 81, 116, 44, 16, 99, 20, 107, 76, 41, 127, 122, 20, 118, 71, 71, 80, 125, 82, 117, 17, 118, 84, 44, 20, 118, 127, 44, 84, 44, 83, 44, 78, 71, 78, 43, 87, 122, 73, 43, 127, 126, 82, 113, 69, 118, 68, 116, 89, 101]

print(''.join([chr(x) for x in c]))


Namun, output yang dihasilkan tidak diinginkan


Hhmmm ~

Sepertinya kita perlu memeriksa kembali source code nya.


0x02 XOR is Exclusive


Jika diperhatikan, terdapat beberapa validasi terhadap inputan yang dimasukkan



Validasi pertama mengharuskan panjang flag adalah 54. Jumlah ini sama seperti jumlah bilangan pada array sebelumnya.



Lalu selanjutnya dilakukan pengecekan terhadap setiap karakter pada inputan. Jika index karakter bernilai ganjil, maka karakter pada index tersebut harus bernilai sama dengan nilai pada array di index tersebut yang sudah di-XOR dengan 24. Namun, jika index karakter bernilai genap, maka karakter pada index tersebut bernilai sama dengan nilai pada array di index tersebut yang di-XOR dengan 32.


Jadi, sebelum kita lakukan konversi dari bilangan decimal pada array tadi ke dalam bentuk ASCII, kita harus lakukan operasi XOR terlebih dahulu pada tiap bilangan pada array. Dengan ketentuan bilangan dengan index ganjil di-XOR dengan 24, dan bilangan dengan index genap di-XOR dengan 32.


Kita bisa ubah script python sebelumnya dengan menambahkan beberapa baris kode berikut

for i,x in enumerate(c):
   if   (i%2==1) : print(chr(x^24), end='')
   elif (i%2==0) : print(chr(x^32), end='')


Jka dijalankan maka akan menghasilkan output



Dan jika kita input flag tersebut ke dalam program challenge tadi



& Voilaaa ~
The Flag is WRECKIT40{4sl1_b4ng_perm1nt44n_4t4s4n_n3wbi3_friendly}