Hack The Planet

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค, cyalume์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

reverse engineering/CodeEngn

[CodeEngn] Basic RCE L01 ๋ฌธ์ œํ’€์ด

cyalume 2020. 12. 2. 18:39

๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์••์ถ• ํ•ด์ œ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 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 ์ž…๋‹ˆ๋‹ค.