progrez.cloud

Write-Up CRYPTO Free Flag [WRECKIT 4.0]

13 April 2023

0x00 Challenge

Kita 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 Analyze


Jika 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 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 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}