๋ฐ์ํ
๋ฌธ์ ํด์
- flag.png ๋ฅผ ์ ๊ณต๋ ์ฝ๋๋ก ์ํธํํ์ฌ encfile ์ ์์ฑํ์๋ค.
- png ํ์ผ์ 128byte ๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด์ utf-8๋ก ์ธ์ฝ๋ฉ ๋ ์ํธํ ํ์ผ์ ์์ฑํ๋ค.
- ์ํธํ๋ ํ์ผ์ byte ๋จ์๋ก ์ฝ์ด์ ๋ค์ ์ผ์ชฝ์ผ๋ก 128byte ๋งํผ ๋ฐ์ด bin ํ์ผ์ ์์ฑํ๋ค.
์ฝ๋ ํด์
# ์ด๊ธฐ 0๋ถํฐ 255๊น์ง์ ์ซ์๋ฅผ 16์ง์๋ก ํํํ ๋ฆฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
# print(hex_list)
# 'flag.png' ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ๋ชจ๋๋ก ์ด์ด์ ๋ด์ฉ์ ์ฝ์ด์ต๋๋ค.
with open('flag.png', 'rb') as f:
plain_s = f.read()
# 'plain_s' ๋ฐ์ดํธ ์ํ์ค๋ฅผ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฆฌ์คํธ๋ก ๋ง๋ญ๋๋ค.
plain_list = [hex(i)[2:].zfill(2).upper() for i in plain_s]
# print(plain_list)
# ์ํธํ๋ ๊ฐ์ ์ ์ฅํ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ด๊ธฐ๊ฐ์ผ๋ก ์ธ๋ฑ์ค ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
enc_list = list(range(len(plain_list)))
# ๊ฐ๊ฐ์ 16์ง์ ๋ฌธ์์ด์ ๋ํด์ ์๋์ ์์
์ ์ํํฉ๋๋ค.
for i in range(len(plain_list)):
hex_b = plain_list[i] # ํ์ฌ 16์ง์ ๋ฌธ์์ด
index = hex_list.index(hex_b) # ํด๋น 16์ง์ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ต๋๋ค.
enc_list[i] = hex_list[(index + 128) % len(hex_list)] # ์ํธํ๋ ๊ฐ์ ๊ณ์ฐํ๊ณ ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค.
# ์ํธํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๊ฒฐํฉํฉ๋๋ค.
enc_list = ''.join(enc_list)
# 'encfile'์ด๋ผ๋ ํ์ผ์ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ์ด์ด์ ์ํธํ๋ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
with open('encfile_test', 'w', encoding='utf-8') as f:
f.write(enc_list)
ํ์ด ์ฝ๋
# 0๋ถํฐ 255๊น์ง์ ์ซ์๋ฅผ 16์ง์๋ก ํํํ ๋ฌธ์์ด ๋ฆฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
hex_list = [hex(i)[2:].zfill(2).upper() for i in range(256)]
print(hex_list)
# 'encfile' ํ์ผ์ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ์ฝ๊ธฐ ๋ชจ๋๋ก ์ด๊ณ ๋ด์ฉ์ 'enc_s'์ ์ ์ฅํฉ๋๋ค.
with open('encfile', 'r', encoding='utf-8') as f:
enc_s = f.read()
# 'enc_s'์ ๋ด์ฉ์ ๋ ๊ธ์์ฉ ๋์ด ๋ฆฌ์คํธ๋ก ๋ง๋ญ๋๋ค.
enc_list = [enc_s[i:i+2] for i in range(0, len(enc_s), 2)]
# ๋์ฝ๋ฉ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ 'dec_list'๋ฅผ ์์ฑํฉ๋๋ค.
dec_list = list(range(len(enc_list)))
# 'enc_list'์ ๊ฐ ์์์ ๋ํด ๋ฐ๋ณตํฉ๋๋ค.
for i in range(len(enc_list)):
# ํ์ฌ ๋ ๊ธ์ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ 'hex_list'์์ ์ฐพ์ต๋๋ค.
index = hex_list.index(enc_list[i])
# ์ธ๋ฑ์ค๋ฅผ 128์ ๋นผ๊ณ ๋ฆฌ์คํธ ๊ธธ์ด๋ก ๋๋ ๋์ฝ๋ฉํฉ๋๋ค.
dec_list[i] = hex_list[(index - 128) % len(hex_list)]
# ๋์ฝ๋ฉ๋ ์ธ๋ฑ์ค ๋ฆฌ์คํธ๋ฅผ 16์ง์๋ก ๋ณํํ์ฌ ๋ฐ์ดํธ ๊ฐ์ฒด๋ก ๋ง๋ญ๋๋ค.
dec_s = bytes(int(dec_list[i], 16) for i in range(len(dec_list)))
# ๋ฐ์ด๋๋ฆฌ ์ฐ๊ธฐ ๋ชจ๋๋ก 'decfile.png' ํ์ผ์ ์ด๊ณ ๋ฐ์ดํธ ๊ฐ์ฒด๋ฅผ ์๋๋ค.
with open('decfile.png', 'wb') as f:
f.write(dec_s)
๊ฒฐ๊ณผ
๋ฐ์ํ
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > ๐งฎ ์ํธํ ๐งฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dream Hack - Crypto] chinese what? (0) | 2023.09.04 |
---|---|
[Dream Hack - Crypto] ICM2022 (0) | 2023.09.04 |
[Dream Hack - Crypto] darimchal_001 (0) | 2023.09.04 |
[Dream Hack - Crypto] Robot Only (0) | 2023.09.02 |
[WebHacking] #1 old-1 (1) | 2022.10.26 |