Base64 ์ ๋ฆฌ
Base64๋ 6๋นํธ์ฉ ๋ฌถ์ด์ ์ธ์ฝ๋ฉ ํ์ ๋ฐ๋ผ ํน์ ๋ฌธ์๋ก ๋งคํ๋ฉ๋๋ค. ๋ฐ๋ผ์ 3๋ฐ์ดํธ(24๋นํธ)์ ๋ฐ์ดํฐ๋ฅผ 4๊ฐ์ Base64 ๋ฌธ์๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.
์์ค์ด ๋นํธ์ ๋์๋๋ Ascii ์ฝ๋ ๋ฌธ์์ด, ์๋ซ์ค์ด Base64 ํ์ ํด๋นํ๋ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋๋ค. Base64๋ 3๋ฐ์ดํธ์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก, ์๋ณธ ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ๊ธธ์ด๊ฐ 3์ ๋ฐฐ์๊ฐ ์๋ ๊ฒฝ์ฐ ํจ๋ฉ์ ์ถ๊ฐํ๊ณ ‘=’ ์ผ๋ก ๋ํ๋ ๋๋ค.
ํ์ด ๋ฐฉ๋ฒ
flag_enc: IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa===
hint : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef
ํํธ๊ฐ 32๊ฐ์ ๋ฌธ์์ด์ธ ๊ฒ์ ๋ณด๊ณ 5bit๋ฅผ ๋ฌถ์ด์ ์ธ์ฝ๋ฉํ๋ ๊ฒ์ด ์๋๊น ์ถ์ธกํ ์ ์์ต๋๋ค.
ํ๋๊ทธ ํ์์ด DH{…} ์ผ ๊ฒ์ด๋ฏ๋ก ์์ ๊ฐ์ ์ ํ์ ์ค์ ์ ์๋ค.
ํ์ด ์ฝ๋
flag_enc = "IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa==="
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"
flag_binary = ""
# Base32 Table ์์ฑ
# {A:0, B:1, C:2, ... }
base32_table = {char : bin(i)[2:].zfill(5) for i, char in enumerate(chars)}
# flag_enc ๋ฅผ bit ์ด๋ก ๋ณํ
for i in range(0, len(flag_enc)) :
if flag_enc[i] == "=" :
flag_binary += "00000"
else :
flag_binary += base32_table.get(flag_enc[i])
# bit ์ด์ 8bit ์ฉ ascii ์ฝ๋๋ก ๋ณํ
flag_ascii = [ chr(int(flag_binary[i : i+8],2)) for i in range(0, len(flag_binary), 8)]
FLAG = "".join(flag_ascii)
print(FLAG)
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > ๐งฎ ์ํธํ ๐งฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dream Hack - Crypto] [LINE CTF 2021] babycrypto1 (2) | 2023.12.12 |
---|---|
[Dream Hack - Crypto] X-Time Pad (0) | 2023.12.09 |
[DreamHack - Crypto] uncommon_e (2) | 2023.11.22 |
[Dream Hack - Pwnable] baby-bof (0) | 2023.11.19 |
[Dream Hack - Crypto] RSA-wiener (0) | 2023.09.05 |