0x00 ChallengeKita diberikan soal dengan deskripsi seperti berikut:
Di mana pada soal tersebut terdapat clue yaitu Bi UNTUK BINERRRRR!!! dan password is BiHB32R13 dan disertakan juga file soal.secret.
0x01 AnalyzeJika kita lihat, file soal.secret berisi kombinasi angka biner
Jika diperhatikan, dari clue di atas kita bisa dengan mudah menebak bahwa BiHB32R13 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
0x02 PROgrammer is PROblem SolverMari 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 Binary String menjadi karakter ASCII.
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 Hexadecimal.
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 Base32 Hash. Untuk itu kita perlu import library base64 terlebih dahulu.
def B32(hash): return base64.b32decode(hash)
Dan terakhir adalah proses dekripsi Rot13 cipher.
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 ~
WRECKIT40{CRYPTO_tolongin_aku_dong!!,_kurangPemanasan_hehehe}