๐ชฎ ROT128 Write Up
1. ๋ฌธ์ ์ค๋ช ํ์ธ ํ ํ์ผ ๋ค์ด๋ก๋
2. ๋ค์ด๋ฐ์ rot128.py ํ์ผ ์คํ ํ ์ฝ๋ ๋ถ์
โ hex_list ์ด๊ธฐํ
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
์ฝ๋ | ์ค๋ช |
range(256) | 0๋ถํฐ 255๊น์ง์ ์ซ์ ์์ฑ |
hex(i) | ์ ์ i๋ฅผ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํ |
[2:] | '0x' ์ ๊ฑฐ ๋๋จธ์ง ๋ถ๋ถ์ ๊ฐ์ ธ์ด |
zfill(2) | ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ 2๋ก ์ค์ |
upper() | ํด๋น ๋ด์ฉ ๋๋ฌธ์๋ก ๋ณํ |
โก ์๋ณธ flag.png ํ์ผ ์ฝ๊ธฐ
with open('flag.png', 'rb') as f:
ใ
คใ
คplain_s = f.read()
++ flag.png ํ์ผ์ ์ด์ง ๋ชจ๋('rb': read binary)๋ก ์ด์ด์ ๋ด์ฉ์ plain_s์ ์ ์ฅ
โข plain_list ์ด๊ธฐํ
plain_list = [hex(i)[2:].zfill(2).upper() for i in plain_s]
++ plain_s์ ์๋ ๊ฐ ๋ฐ์ดํธ๋ฅผ 16์ง์๋ก ๋ณํํ์ฌ ๋ฆฌ์คํธ์ ์ ์ฅ
โฃ ์ํธํ ๋ฆฌ์คํธ ์์ฑ ๋ฐ ์ด๊ธฐํ
enc_list = list(range(len(plain_list)))
โค ์ํธํ ๋ฃจํ ์ํ
for i in range(len(plain_list)):
ใ
คใ
คhex_b = plain_list[i]
ใ
คใ
คindex = hex_list.index(hex_b)
ใ
คใ
คenc_list[i] = hex_list[(index + 128) % len(hex_list)]
์ฝ๋ | ์ค๋ช |
hex_b = plain_list[i] | ํ์ฌ ๋ฐ์ดํธ์ 16์ง์ ํํ |
index = hex_list.index(hex_b) | hex_b๊ฐ hex_list์์ ์ด๋์ ์์นํ๋์ง ํ์ |
hex_list[(index + 128) % len(hex_list) | hex_list์์ index์ 128์ ๋ํจ + ๋ฆฌ์คํธ ๊ธธ์ด๋ก ๋๋ ๋๋จธ์ง์ ํด๋นํ๋ ๊ฐ ์ ์ฅ |
โฅ ์ํธํ ๋ฆฌ์คํธ๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ๋ณํ
enc_list = ''.join(enc_list)
โฆ ์ํธํ๋ ํ์ผ ์ฐ๊ธฐ
with open('encfile', 'w', encoding='utf-8') as f:
ใ
คใ
คf.write(enc_list)
++ 'encfile' ํ์ผ์ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ์ด๊ณ , ์ํธํ๋ ๊ฐ์ ํ์ผ์ ๊ธฐ๋ก
3. FLAG๊ฐ ์๋ png ํ์ผ ์์ฑ์ ์ํ ์ฝ๋ ์์ฑ
def decrypt(hex_str):
ใ
คใ
คhex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
ใ
คใ
ค# ๋ฌธ์์ด์ 2๊ฐ์ฉ ์๋ผ ๋ฆฌ์คํธ๋ก ๋ณํ
ใ
คใ
คenc_list = [hex_str[i:i+2] for i in range(0, len(hex_str), 2)]
ใ
คใ
ค# ๋ณตํธํ๋ ๊ฐ์ ์ ์ฅํ ๋ฆฌ์คํธ ์ด๊ธฐํ
ใ
คใ
คdec_list = list(range(len(enc_list)))
ใ
คใ
ค# ์ํธํ ๊ณผ์ ์ญ์ผ๋ก ์ํ
ใ
คใ
คfor i in range(len(enc_list)):
ใ
คใ
คใ
คใ
คhex_b = enc_list[i]
ใ
คใ
คใ
คใ
คindex = hex_list.index(hex_b)
ใ
คใ
คใ
คใ
คdec_list[i] = hex_list[(index - 128) % len(hex_list)]
ใ
คใ
ค# ๋ฆฌ์คํธ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ
ใ
คใ
คdec_str = ''.join(dec_list)
ใ
คใ
ค# 16์ง์ ๋ฌธ์์ด์ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ก ๋ณํ
ใ
คใ
คdecoded_data = bytes.fromhex(dec_str)
ใ
คใ
คreturn decoded_data
def main():
ใ
คใ
ค# encfile ์ฝ๊ธฐ
ใ
คใ
คwith open('/content/encfile', 'r', encoding='utf-8') as f:
ใ
คใ
คใ
คใ
คenc_str = f.read()
ใ
คใ
ค# ์ํธํ๋ ๋ฌธ์์ด์ ๋ณตํธํํ์ฌ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ก ์ป๊ธฐ
ใ
คใ
คdecrypted_data = decrypt(enc_str)
ใ
คใ
ค# ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ 'flag.png' ํ์ผ๋ก ์ ์ฅ
ใ
คใ
คwith open('/content/flag.png', 'wb') as f:
ใ
คใ
คใ
คใ
คf.write(decrypted_data)
if __name__ == "__main__":
ใ
คใ
คmain()
++ ์ฝ๋ Flow ์ฐธ๊ณ
--> https://today-loui.tistory.com/64
4. Google Colab์์ ์์ฑํ ์ฝ๋ ์คํ --> flag.png ํ์ผ์ด ์์ฑ๋จ
์ข์ธก์ด ์ฝ๋ ์คํ ์ , ์ฐ์ธก์ด ์คํ ํ
5. flag.png ํ์ผ ์คํ --> FLAG ๋ฐ๊ฒฌ
'โ๏ธ Capture The Flag (CTF)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[UWSP Pointer Overflow CTF 2023] Unquestioned and Unrestrained Write Up (0) | 2023.11.12 |
---|---|
[Cake CTF 2023] Country DB - 92 Write Up (0) | 2023.11.11 |
[CSAW CTF 2023] Baby's First Write Up (0) | 2023.09.16 |
[Patriot CTF 2023] Python XOR Write Up (0) | 2023.09.09 |
[DownUnder CTF 2023] ๐ Write Up (0) | 2023.09.04 |