๐ฅ๋ชฉํ:์ฝ๋์์ง ๋ฒ ์ด์ง L01 ๋ฌธ์ ๐ฅ
Basic RCE L01: HDD๋ฅผ CD-Rom์ผ๋ก ์ธ์์ํค๊ธฐ ์ํด์๋ GetDriveTypeA์ ๋ฆฌํด๊ฐ์ด ๋ฌด์์ด ๋์ด์ผ ํ๋๊ฐ
๋ฌธ์ ๋ค์ด๋ก๋ -> zip ์์ถ ํด์
๋น๋ฐ๋ฒํธ: codeengn
ํ์ผ ์คํ ํ -> Make me think your HD is a CD-Rom
Nah.... This is not a CD-Rom Drive!
-> ์ฌ๊ธฐ๊น์ง ์ ์ ์๋ ์
(1) CD-Rom์ผ๋ก ์ธ์ํ๊ฒ ๋ฐ๊ฟ์ผํ๋ค.
(2) GetDriveTypeA์ ๋ฆฌํด ๊ฐ์ ๊ตฌํด์ผ ํ๋ค.
(3) ํ์ผ์ ์คํํ๋ฉด, ํ๋ฉด ์ฐฝ์ด ์๊ธด๋ค. (๋ฉ์์ง ๋ฐ์ค ํจ์ ์ฌ์ฉ)
ํ์ผ์ X64dbg์ ๋๋ ค๋ณด๋ ค๊ณ ํ๋๋ฐ, ๋ฐ์
"์ด ํ์ผ์ ๋๋ฒ๊น
ํ๊ธฐ ์ํด์ x32dbg๋ฅผ ์ฌ์ฉํฉ๋๋ค!" ๋ผ๋ ๊ธ์ด ๋์๋ค.
x32dbg๋ฅผ ์ด์ฉํด์ ์ญ์ญ ๋ด๋ ค๊ฐ๋ฉด์ ์ฝ์ด๋ณด์,,,,
๊ณ์ ์ฝ๋ ์ค, GetDriveTypeA ํจ์๊ฐ ๋ณด์ฌ์, ํจ์ ๋ด๋ถ ์ง์
์ !Break Point๋ฅผ ๊ฑด๋ค.
๋ฐ์ ๋ถ๋ถ ๋ณด๋ฉด CMP eax, esi๊ฐ ์๋ค.
cmp eax, esi
je 01.40103D
cmp๋ ๋น๊ต๋ฅผ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ eax, esi๋ฅผ ๋น๊ตํ์ฌ ๋ฉ์์ง ์ฐฝ์ ํ๋ฉด์ ๋์ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ๋ ์ ๋ด์ผํ๋ค.
eax์ esi๋ฅผ ๋น๊ตํ์ ๋, ๋ค๋ฅด๋ฉด(jne) 40103D ์ฃผ์๋ก ์ด๋ํ๋ค.
ESI = EAX ๊ฐ = ok ๋ฉํธ ์ถ๋ ฅ
๋ค๋ฅด๋ฉด(jne) = not CD-Rom ๋ฉ์์ง ๋ฐ์ค ํ๋ฉด์ ๋จ๋ฉด์, 40103D์ฃผ์๋ก ์ด๋
EAX ๊ฐ๊ณผ ESI ๊ฐ์ด ๊ฐ๊ฒ ๋์ด์ผ Ok๋ฉํธ๊ฐ ๋์ค๋ฉฐ,
GetDriveType A ๋ถ๋ถ ์ง๋๋ฉด EAX = 3
-> EAX = 3์ด๋ฏ๋ก, 3๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ ๊ตฌ๊ธ๋ง ํด๋ดค๋ค.
๊ฒฐ๊ณผ ์ฌ์ง์ ์๋์ ๊ฐ๋ค.
-> ๋ฐ๋ผ์, 5๋ก ์ฝ๋๋ฅผ ๋ฐ๊ฟ์คฌ๋๋
Ok, I really think that your HD is a CD-ROM! :P ๋ก ์๋ฆผ์ฐฝ์ด ๋จ๋ฉด์ ๋ฌธ์ ํด๊ฒฐ :0
----------References