[Hero CTF v5] Hyper Loop Write Up
# Hyper Loop Write Up
1. ๋ฌธ์ ํ์ธ ํ ์ฒจ๋ถ ํ์ผ ๋ค์ด๋ก๋ --> ์ ๊ณต๋ Python ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ํ๋๊ทธ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฌธ์ ์์ ํ์ ํ ์ ์์๋ค.
2. hyper_loop.py ํ์ผ์ ์ด์ด ์ฝ๋ ๋ถ์
from os import urandom
flag = bytearray(b"Hero{????????????}")
assert len(flag) == 18
for _ in range(32):
for i, c in enumerate(urandom(6) * 3):
flag[i] = flag[i] ^ c
print(f"{flag = }")
"""
$ python3 hyper_loop.py
flag = bytearray(b'\x05p\x07MS\xfd4eFPw\xf9}%\x05\x03\x19\xe8')
"""
--> 18๋ฐ์ดํธ ๊ธธ์ด์ ํ๋๊ทธ ๋ฌธ์์ด์ ์์ฑํ๊ณ , 32๋ฒ ๋ฐ๋ณต. ๊ฐ ๋ฐ๋ณต์์ 18๋ฐ์ดํธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ 6๋ฐ์ดํธ ๊ธธ์ด์ ๋์๋ฅผ 3๋ฒ XOR ์ฐ์ฐํ์ฌ ๋ณํํ๋ ์ฝ๋
+ ์ต์ข ์ ์ผ๋ก๋ ๋ณํ๋ ์ํ์ 18๋ฐ์ดํธ ๋ฌธ์์ด์ด ์ถ๋ ฅ
3. ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ ํ์
: ํ๋๊ทธ ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ธ "Hero{" ์ ๋ณํ๋์ง ์์ ์ํ --> ์ด ๋ถ๋ถ์ ํ์ฉํ์ฌ ํ๋ฌธ์ ๋ณต๊ตฌํ ์ ์์
+ ์ฃผ์ด์ง '์ฝ๋์ 32๋ฒ ๋ฐ๋ณต'๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก 12๋ฐ์ดํธ์ ๋ฌธ์์ด์ 6๋ฐ์ดํธ ๊ธธ์ด์ ๋์๋ฅผ ์ด 2๋ฒ XOR ์ฐ์ฐํ๋ฉด ์ํธ๋ฌธ์ ํด๋ ํ ์ ์์
4. ํ๋ฌธ ๋ณต๊ตฌ๋ฅผ ์ํ ์คํฌ๋ฆฝํธ Lets_Solve.py ์์ฑ
from os import urandom
encrypted_flag = bytearray(b'\x05p\x07MS\xfd4eFPw\xf9}%\x05\x03\x19\xe8')
assert len(encrypted_flag) == 18
for _ in range(32):
for i, c in enumerate(urandom(6) * 3):
encrypted_flag[i] = encrypted_flag[i] ^ c
flag = str(encrypted_flag).replace("\\x", "").replace("'", "")
print("Hero{" + flag + "}")
โ ์ํธํ ๋ ํ๋๊ทธ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์์ฑํ ์ํธํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํ๋๊ทธ๋ฅผ ๋ค์ XOR ๋ฐฉ์์ผ๋ก ์ํธํ
โก ๋ฃจํ๋ ์ด 32๋ฒ ๋ฐ๋ณต๋๋๋ฐ, ๊ฐ ๋ฃจํ์์ urandom(6) ํจ์๋ฅผ ํธ์ถํ๋ฉฐ ๊ธธ์ด๊ฐ 6์ธ ๋๋ค ๋ฐ์ดํธ ์ํ์ค ์์ฑ
โข ์ํ์ค๊ฐ 3๋ฒ ๋ฐ๋ณต๋ ๋์ ๊ฐ ๋ฐ์ดํธ๋ ์ด์ ์ ์ํธํ๋ ํ๋๊ทธ์ XOR ์ฐ์ฐ ์ํ
+ ์ธ์ฝ๋ฉ ๊ณผ์ ์์ ๊ณ์ ์๋ฌ๊ฐ ๋ฌ์ผ๋, ๊ฒฐ๊ตญ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์๋ค.