Kita diberikan soal dengan deskripsi seperti berikut:
Di mana pada soal tersebut terdapat clue yaitu <code>Bi UNTUK BINERRRRR!!!</code> dan <code>password is BiHB32R13</code> dan disertakan juga file soal.secret.
Jika kita lihat, file soal.secret berisi kombinasi angka biner
Jika diperhatikan, dari clue di atas kita bisa dengan mudah menebak bahwa <code>BiHB32R13</code> adalah kombinasi metode konversi dan enkripsi dengan penjabaran
Bi = Biner H = Hexa B32 = Base32 R13 = Rot13
Jadi, tugas kita adalah melakukan konversi dan dekripsi berdasarkan urutan dan metode enkripsi tersebut, lalu menemukan flag-Nya
Mari kita buat program untuk melakukan tugas mencari flag-Nya. Kita akan menggunakan bahasa pemrograman Python untuk melakukan konversi dan dekripsi yang dibutuhkan.
Pertama, kita buat function untuk melakukan konversi dari <code>Binary String</code> menjadi karakter <code>ASCII</code>.
def Bi(bins):
bits=[]
for i in range(int(len(bins)/8)): i*=8 ; bits.append(bins[i:i+8]);
return ''.join([chr(int(bit, 2)) for bit in bits])
Lalu, tahap selanjutnya untuk proses konversi dari bilangan <code>Hexadecimal</code>.
def H(hex):
hbit=[]
for i in range(int(len(hex)/2)): i*=2 ; hbit.append(hex[i:i+2]);
return ''.join([chr(int(bit, 16)) for bit in hbit])
Selanjutnya untuk proses decode <code>Base32 Hash</code>. Untuk itu kita perlu import library <code>base64</code> terlebih dahulu.
def B32(hash): return base64.b32decode(hash)
Dan terakhir adalah proses dekripsi <code>Rot13 cipher</code>.
def R13(cipher):
plain = ''
for c in str(cipher):
if (ord(c) > 64 and ord(c) < 91): plain += chr((ord(c)-64+13)%26+64)
elif (ord(c) > 96 and ord(c) < 123): plain += chr((ord(c)-96+13)%26+96)
else : plain+=c
return plain
Silahkan analisis sendiri tiap baris kode functions di atas!
Selanjutnya tinggal kita panggil seluruh function di atas untuk mengubah isi file soal.secret tadi menjadi string flag.
x = open(sys.argv[1]).read() print(R13(B32(H(Bi(x)))))
Run It & Voilaa, you got the Flag ~
<code>WRECKIT40{CRYPTO_tolongin_aku_dong!!,_kurangPemanasan_hehehe}</code>