progrez.cloud

Write-Up CRYPTO Free Flag [WRECKIT 4.0]

13 April 2023

<code>0x00</code> Challenge

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.


<code>0x01</code> Analyze


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


<code>0x02</code> PROgrammer is PROblem Solver


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>