๐ฅ๋ชฉํ: ์ฝ๋์์ง ๋ฒ ์ด์ง L04 ๋ฌธ์ ๐ฅ
Basic RCE L04: ์ด ํ๋ก๊ทธ๋จ์ ๋๋ฒ๊ฑฐ ํ๋ก๊ทธ๋จ์ ํ์งํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๋ค. ๋๋ฒ๊ฑฐ๋ฅผ ํ์งํ๋ ํจ์์ ์ด๋ฆ์ ๋ฌด์์ธ๊ฐ.
๋ฌธ์ ๋ค์ด๋ก๋ -> zip ์์ถ ํด์
๋น๋ฐ๋ฒํธ: codeengn
์ํฉ: ๋๋ฒ๊ฑฐ๋ฅผ ํ์งํ๋ ํจ์์ ์ด๋ฆ ์ฐพ๊ธฐ
ํ์ผ ์คํ ํ -> ์๋์ ๊ฐ์ ์ฐฝ์ด ๋จ๋๋ "์ ์์ ์"์ด ๊ณ์ ๋ํ๋๋ค.
x32dbg์ ํ์ผ ์คํ ํ๋ฉด
X32dbg๋ก ๋ณด๋ฉด, ์๋ ์ฌ์ง๊ณผ ๊ฐ์ "๋๋ฒ๊น
๋นํจ"์ด ๊ณ์ ๋ฌ๋ค.
์ฐฝ์ ๋ซ๊ณ ๊ณ์ ์ฝ์ด๋ณด์...
call dword ptr ds: [<&IsDebuggerPresent>] ๋ถ๋ถ = ๋๋ฒ๊ฑฐ ํ์ง
431024: "๋๋ฒ๊น
๋นํจ \n"
43101c: "์ ์ \n"
์ฐพ์๋ค :) ์ ๋ถ๋ถ๋ถํฐ ์ฝ์ด๋ณด์.
์ค๊ฐ์ breakpoint๋ฅผ ๊ฑธ์ง ์์์ ๋ค์ ์ฐพ์๋ค.. ๋ค์๋ถํฐ๋ ๊ผญ ๊ฑธ๋๋ก ํ์..!
call dword ptr ds: [<&sleep>]
cmp esi, esp
IsDebuggerPresent๊ฐ ์คํ ์ EAX = 0 -> ์คํ ํ, EAX = 1
์ฆ, IsDebuggerPresent ํจ์๋ฅผ ํตํด์
EAX๊ฐ = 1์ด๋ฉด ๋๋ฒ๊น
๋นํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ฌ "๋๋ฒ๊น
๋นํจ" ์ถ๋ ฅ
EAX๊ฐ = 0์ด๋ฉด ์ ์ ์ถ๋ ฅ
-> EAX๊ฐ์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์ ์ ์ถ๋ ฅ๋๋ค.
๋ฐ๋ผ์, ๋๋ฒ๊ฑฐ๋ฅผ ํ์งํ๋ ํจ์์ ์ด๋ฆ์ IsDebuggerPresent
----------References