๐LEVEL 1 : Reversing
๋ฌธ์
์ด ๋ฌธ์ ๋ ์ฌ์ฉ์์๊ฒ ๋ฌธ์์ด ์ ๋ ฅ์ ๋ฐ์ ์ ํด์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ์ฌ correct ๋๋ wrong์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ด ์ฃผ์ด์ง๋๋ค.
ํด๋น ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ correct๋ฅผ ์ถ๋ ฅํ๋ ์ ๋ ฅ๊ฐ์ ์ฐพ์ผ์ธ์!
ํ๋ํ ์ ๋ ฅ๊ฐ์ DH{} ํฌ๋งท์ ๋ฃ์ด์ ์ธ์ฆํด์ฃผ์ธ์.
chall5.exe์ main ํจ์๋ฅผ ์ฐพ์ decompile ํ ๊ฒฐ๊ณผ
ํจ์ sub_140001000()
ํจ์ sub_140001000()์ ์ฝ๋๋ฅผ python์ผ๋ก ์์ฑํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค๋ ๊ฒ์ ํ ์ ์๋ค.
for i in range(23):
if (input[i+1] + input[i] != byte_140003000[i]):
return False
byte_140003000์๋ ์๋์ ๊ฐ์ ๊ฐ์ด ์ ์ฅ๋์ด์๋ค.
AD D8 CB CB 9D 97 CB C4 92 A1 D2 D7 D2 D6 A8 A5 DC C7 AD A3 A1 98 4C 00 00 00 00 00 00 00 00 00
flag๋ฅผ ๋ค์์ ๋ถํฐ ํ ๊ธ์์ฉ ๊ตฌํ๋ค, byte_140003000์ ์ ์ฅ๋ ๊ฐ๊ณผ ๋นผ๋ฉด flag๋ฅผ ์ป์ ์ ์๋ค.
value = ['AD', 'D8', 'CB', 'CB', '9D', '97', 'CB', 'C4', '92', 'A1', 'D2', 'D7', 'D2',
'D6', 'A8', 'A5', 'DC', 'C7', 'AD', 'A3', 'A1', '98', '4C']
result = []
prev_value = 0
for i in range(len(value)-1, -1, -1):
flag_value = int(value[i], 16) - prev_value
result.append(chr(flag_value))
prev_value = flag_value
flag = ''
for i in range(len(result)-1, -1, -1):
flag += result[i]
print(flag)
๋ฐ๋ผ์ flag๋ DH{All_l1fe_3nds_w1th_NULL}์ด๋ค.
๐LEVEL 1 : Reversing
๋ฌธ์
์ด ๋ฌธ์ ๋ ์ฌ์ฉ์์๊ฒ ๋ฌธ์์ด ์ ๋ ฅ์ ๋ฐ์ ์ ํด์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ์ฌ correct ๋๋ wrong์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ด ์ฃผ์ด์ง๋๋ค.
ํด๋น ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ correct๋ฅผ ์ถ๋ ฅํ๋ ์ ๋ ฅ๊ฐ์ ์ฐพ์ผ์ธ์!
ํ๋ํ ์ ๋ ฅ๊ฐ์ DH{} ํฌ๋งท์ ๋ฃ์ด์ ์ธ์ฆํด์ฃผ์ธ์.
chall6.exe์ main ํจ์๋ฅผ decomfile ํ ๊ฒฐ๊ณผ
ํจ์ sub_140001000()
ํจ์ sub_140001000()์ ์ฝ๋๋ฅผ python์ผ๋ก ์์ฑํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค๋ ๊ฒ์ ํ ์ ์๋ค.
for i in range(18):
if (byte_140003020[input[i]]!= byte_140003000[i]):
return False
์.. ใ
ใ
๋ byte_140003020์ ๋ชจ๋ ์ซ์๋ฅผ ๋ค ์ฝ๋๋ก ์ฎ๊ธธ ์๊ฐ์ด ์๋ค... flag๋ ๋์ผ๋ก ์ฐพ์๋ค. ์ซ์ 12๊ฐ๋ง ์ฐพ์ผ๋ฉด ๋๋ ์ด์ชฝ์ด ๋ ๋น ๋ฅด๋ค.
์๋ฅผ ๋ค์ด์, byte_140001000์ ์ฒซ๋ฒ์งธ ์ซ์๋ 0์ด๊ณ , 0์ byte_140003020์์ 83๋ฒ์งธ์ ์์นํ ์ซ์์ด๋ค. ๋ฐ๋ผ์ ์ฒซ๋ฒ์งธ ๊ธ์๋ char(82)์ธ R์ด๋ค. ์ด ์ง์ 12๋ฒ ํ๋ฉด flag๋ฅผ ์ป์ ์ ์๋ค.
๋ฐ๋ผ์ flag๋ DH{Replac3_the_w0rld}
๐LEVEL 1 : Reversing
๋ฌธ์
์ด ๋ฌธ์ ๋ ์ฌ์ฉ์์๊ฒ ๋ฌธ์์ด ์ ๋ ฅ์ ๋ฐ์ ์ ํด์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ์ฌ correct ๋๋ wrong์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ด ์ฃผ์ด์ง๋๋ค.
ํด๋น ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ correct๋ฅผ ์ถ๋ ฅํ๋ ์ ๋ ฅ๊ฐ์ ์ฐพ์ผ์ธ์!
ํ๋ํ ์ ๋ ฅ๊ฐ์ DH{} ํฌ๋งท์ ๋ฃ์ด์ ์ธ์ฆํด์ฃผ์ธ์.
chall8.exe์ main ํจ์๋ฅผ ์ฐพ์ decompile ํ ๊ฒฐ๊ณผ
ํจ์ sub_140001000
ํจ์ sub_140001000()์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ์
๋ ฅํ ๊ฐ๊ณผ -5๋ฅผ ๊ณฑํ ํ unsigned__int8๋ก ํ๋ณํ ํ ํ์ byte_140003000์ ๊ฐ๊ณผ ๋น๊ตํ๋ค.
์ฆ, 2^8(0-255)์ ๊ฐ๊ณผ -5๋ฅผ ๊ณฑํ ํ, ๋ค์ 8bit๋ง ์ป์ ํ์ byte_140003000์ ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒ์ brute forece ๋ฐฉ์์ผ๋ก ์ฐพ์์ผํ๋ค.
๋ฐ๋ผ์ flag๋ DH{Did_y0u_brute_force?}
rev-basic 8๋ก rev basic ๋ฌธ์ ์ write-up์ ๋ชจ๋ ์์ฑํ์๋ค. ๋ค์์ฃผ์๋ ๋ค๋ฅธ ๋ฆฌ๋ฒ์ฑ level-1 ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์์ผ๊ฒ ๋ค.