๋ฌธ์ ๋ ์ฌ๊ธฐ์ ๋ค์ด๋ฐ์ ์ ์์ต๋๋ค. (์์ถ ํด์ ์ ๋น๋ฐ๋ฒํธ๋ codeengn ์
๋๋ค.)
๋ชฉํ๊ฐ : HDD๋ฅผ CD-Rom์ผ๋ก ์ธ์์ํค๊ธฐ ์ํ GetDriveTypeA์ ๋ฆฌํด๊ฐ
(GetDriveTypeA ํจ์๋? Win32 API ํจ์์ด๋ฉฐ ๋์คํฌ ๋๋ผ์ด๋ธ๊ฐ ์ด๋์, ๊ณ ์ , CD-ROM, RAM ๋์คํฌ ๋๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ธ์ธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋๋ผ์ด๋ธ์ ์ข ๋ฅ์ ๋ฐ๋ผ ํจ์์ ๋ฐํ ๊ฐ์ด ๋ฌ๋ผ์ง๋๋ค. -MSDN)
๋จผ์ ์คํ์ ์์ผ๋ณด๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ ๋ฉ์ธ์ง ๋ฐ์ค๊ฐ ๋น๋๋ค.
HDD ๋ฅผ CD-Rom ์ผ๋ก ์๊ฐํ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ํ๋ค์.
ํ์ธ์ ๋๋ฌ๋ด ์๋ค.
CD-Rom ๋๋ผ์ด๋ธ๊ฐ ์๋๋ผ๋ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋น๋๋ค.
์๋ง ์ผ๋ จ์ ๊ณผ์ ์ ํตํด CD-Rom ์ธ์ง ์๋์ง ํ์ธํ ๋ค์์ ์ฑ๊ณต/์คํจ๋ก ๋ถ๊ธฐํ ๊ฒ ์ ๋๋ค.
์ฌ๋ฆฌ๋๋ฒ๊ฑฐ๋ก ์ด์ด๋ณด๊ฒ ์ต๋๋ค.
ํ ๋์ ๋ค์ด์ค๋ ๊ฐ๊ฒฐํ ์ฝ๋์ ๋๋ค.
๋งจ ์ค๋ฅธ์ชฝ ์ฐฝ์ ํตํด Win32 API ์ ๋ฉ์ธ์ง๋ฐ์ค๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์๋ฌ ๋ฉ์ธ์ง๋ฐ์ค ์๋์ ์์ธกํ๋ ์ฑ๊ณต ๋ฉ์ธ์ง๋ฐ์ค๋ ์กด์ฌํ๋ค์.
์๋ฌ ๋ฉ์ธ์ง๋ฐ์ค ์ 401026 ์ฃผ์์ JE SHORT 01.0040103D ๋ช ๋ น์ ๋ด ์๋ค.
์์ ๋น๊ต๊ตฌ๋ฌธ์ ํตํด ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด 0040103D ์ฃผ์๋ก ์ ํํ๋ ๋ช ๋ น์ ๋๋ค.
(0040103D ์ฃผ์๋ ์ฑ๊ณต ๋ฉ์ธ์ง๋ฐ์ค ํธ์ถ ์ฃผ์๋ค์.)
๊ทธ๋ฌ๋ฏ๋ก ์ด ์กฐ๊ฑด ๋ถ๊ธฐ๋ฌธ์ ์คํํ๊ฒ ๋๋ฉด ์ฑ๊ณต ๋ฉ์ธ์ง๋ฐ์ค๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
์ ํ๋ฌธ ์์ ๋น๊ต๋ฌธ์ ๋ณด๊ฒ ์ต๋๋ค.
CMP EAX, ESI ๋ก ๋ ๋ ์ง์คํฐ ๊ฐ์ ๋น๊ตํฉ๋๋ค.
JE ๋ช ๋ น์ด๋ CMP ์ฐ์ฐ์ ํตํด ZF = 1 ์ด ๋๋ฉด ์ฑ๊ณตํ๋ ๊ฒ๋๋ค. (๋น๊ตํ๋ EAX ์ ESI ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ฑ๊ณตํฉ๋๋ค.)
์ผ๋จ ๋๋ผ์ด๋ธ ์ข ๋ฅ๋ฅผ ์ป๋ GetDriveTypeA ํจ์์ ๋ฆฌํด๊ฐ์ ์ค์ ์ ๋๊ณ ๋ด์ผ๊ฒ ์ฃ ?
์ HDD ๋ CD-Rom ์ด ์๋๋ ๊ทธ๋๋ก ์คํํ๋ค๊ฐ๋ ์คํจํ ๊ฒ ์ ๋๋ค.
GetDriveTypeA ํจ์ ํธ์ถ ๋ฐ๋ก ๋ฐ 0040101D ์ฃผ์์ [F2] ํค๋ก BP ๋ฅผ ๊ฑธ์ด๋๊ณ [F9] ํค๋ก GetDriveTypeA ํจ์๊น์ง ์คํํด๋ณด๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ ์ฐฝ์ด ๋จ๋ฉด ํ์ธ์ ๋๋ฌ์ค๋๋ค.
์ผ๋จ GetDriveTypeA ํจ์๊น์ง ์คํ๋์์ต๋๋ค.
ํจ์๋ ๋ฐํ๊ฐ์ EAX ๋ ์ง์คํฐ์ ์ ์ฅํ๊ณ ๋ฆฌํดํฉ๋๋ค.
ํนํ GetDriveTypeA ํจ์์ ๋ฐํ๊ฐ์ ํ์ฌ ๋๋ผ์ด๋ธ ์ข
๋ฅ๋ฅผ ๋ํ๋
๋๋ค.
ํ์ฌ ๋ ์ง์คํฐ ์ฐฝ์ ๋ณด๊ฒ ์ต๋๋ค.
GetDriveTypeA ํจ์ ์คํ ์งํ EAX ์ ๊ฐ์ด 3์ด ๋์์ต๋๋ค.
GetDriveTypeA ์ ๋ฐํ๊ฐ์ 3์ผ๋ก, ํ์ฌ ๋๋ผ์ด๋ธ๋ ํ๋ ๋์คํฌ ๋๋ ํ๋์ ๋๋ผ์ด๋ธ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. (MSDN - GetDriveTypeA)
์ ์ฌ์ง์ ๋ณด๋ฉด CMP ๋ก EAX ์ ESI ๋ ์ง์คํฐ๋ฅผ ๋น๊ตํ๊ธฐ ์ ์ ์ด๋ค์ ๋์์ผ๋ก ์ฆ๊ฐ์ฐ์ฐ์ ํ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
ESI ๊ฐ์ 0์ด๊ณ , 1์ ์ฆ๊ฐ์ํค๋ INC ๋ช ๋ น์ ์ธ ๋ฒ ๊ฑฐ์น๋ 3์ด ๋ฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก GetDriveTypeA ์ ๋ฆฌํด๊ฐ, 3์ ๊ฐ์ง๊ณ ์๋ EAX ๋ 1์ ๊ฐ์์ํค๋ DEC ๋ช ๋ น์ ๋ ๋ฒ ๊ฑฐ์ณ 1์ด ๋ฉ๋๋ค.
EAX = 3, ESI = 0 INC ESI // ESI = 1 DEC EAX // EAX = 2 INC ESI // ESI = 2 INC ESI // ESI = 3 DEC EAX // EAX = 1 EAX != ESI
์ฐ์ฐ ์งํ ๋ ์ง์คํฐ ์ฐฝ์ ๋ชจ์ต์ ๋๋ค.
EAX ์ ESI ๋ ๊ฐ์ด ๊ฐ์์ผ ์ฑ๊ณตํ๋๋ฐ EAX ๊ฐ์ด ESI ๊ฐ๋ณด๋ค 2๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ HDD ๋ฅผ CD-Rom ์ผ๋ก ์ธ์์ํค๊ธฐ ์ํ GetDriveTypeA ์ ๋ฐํ๊ฐ์ ๊ธฐ์กด ๋ฐํ๊ฐ์ธ 3๋ณด๋ค 2๊ฐ ๋ ํฐ 5๊ฐ ๋ฉ๋๋ค.
GetDriveTypeA ๋ฅผ ๋ฆฌํดํ ์งํ EAX ๊ฐ์ 5๋ก ๋๊ณ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค.
EAX = 5, ESI = 0 INC ESI // ESI = 1 DEC EAX // EAX = 4 INC ESI // ESI = 2 INC ESI // ESI = 3 DEC EAX // EAX = 3 EAX == ESI
์ด๋ ๊ฒ EAX ๊ฐ๊ณผ ESI ๊ฐ์ด ์ฆ๊ฐ์ฐ์ฐ์ ๊ฑฐ์น ํ ๋์ผํด์ ธ CMP ์ฐ์ฐ์ ํตํด ZF = 1 ์ด ๋๊ณ , 0040103D (์ฑ๊ณต ๋ฉ์ธ์ง๋ฐ์ค ์ฃผ์) ๋ก ์ ํํฉ๋๋ค.
[Ctrl + F2] ํค๋ก ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์์ ํ ํ GetDriveTypeA ํธ์ถ ๋ช ๋ น ๋ฐ๋ก ๋ฐ์ธ 0040101D ์ฃผ์์ BP ๋ฅผ ๊ฑธ๊ฒ ์ต๋๋ค.
[F9] ํค๋ก BP ๊น์ง ์คํํ ํ์ ๋ ์ง์คํฐ ์ฐฝ์ EAX ๊ฐ์ ๋๋ธํด๋ฆญํด 00000003 ์ด์๋ ๊ฐ์ 5๋ก ๋ฐ๊ฟ์ค ๋ค OK ๋ฒํผ์ ๋๋ฅด๊ณ ์คํํด์ค๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ด์ ๊ฐ์ด ์กฐ๊ฑด ๋ถ๊ธฐ๋ฌธ์ ์คํํด ์ฑ๊ณต ๋ฉ์ธ์ง๋ฐ์ค๊ฐ ๋ํ๋ฉ๋๋ค.
๋ฐ๋ผ์ HDD ๋ฅผ CD-Rom ์ผ๋ก ์ธ์ํ๊ฒ ๋ง๋๋ GetDriveTypeA ํจ์์ ๋ฆฌํด๊ฐ์ 5 ์ ๋๋ค.
'reverse engineering > CodeEngn' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CodeEngn] Basic RCE L06 ๋ฌธ์ ํ์ด (3) | 2020.12.06 |
---|---|
[CodeEngn] Basic RCE L05 ๋ฌธ์ ํ์ด (5) | 2020.12.05 |
[CodeEngn] Basic RCE L04 ๋ฌธ์ ํ์ด (2) | 2020.12.05 |
[CodeEngn] Basic RCE L03 ๋ฌธ์ ํ์ด (0) | 2020.12.03 |
[CodeEngn] Basic RCE L02 ๋ฌธ์ ํ์ด (0) | 2020.12.02 |