Hack The Planet

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

reverse engineering/CodeEngn

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

cyalume 2021. 1. 30. 23:40

 

์ฝ”๋“œ์—”์ง„ ์‚ฌ์ดํŠธ

 

๋ชฉํ‘œ๊ฐ’ : ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ)

 

์‹คํ–‰์„ ์‹œ์ผœ๋ณด๋ฉด ๋ช‡ ์ดˆ ๋’ค ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

 ์ด ์‹œ๊ฐ„์„ ์ง์ ‘ ์ธก์ •ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šฐ๋‹ˆ ๋ถ„์„์„ ํ•ด ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

 

 

PEiD๋กœ ์—ด์–ด๋ณด๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด UPX๋กœ ํŒจํ‚น๋˜์–ด์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋””๋ฒ„๊ฑฐ๋กœ ์—ด์–ด๋ณผ๊ฒŒ์š”.

 

 

pushad ๋ช…๋ น์ด ๋ณด์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ upx ํŒจํ‚น์ด๋‹ˆ ๊ฐ„๋‹จํžˆ ์–ธํŒจํ‚น ํ•ด ์ค๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

์–ธํŒจํ‚น ๋ฐฉ๋ฒ• 

[Ctrl + F]๋กœ popad ๋ช…๋ น์„ ์ฐพ์€ ๋’ค ๊ทธ ์ฃผ์†Œ๋กœ ์ด๋™ํ•œ๋‹ค.

popad ๋ช…๋ น ๋ฐ‘ OEP๋กœ jmpํ•˜๋Š” ๋ช…๋ น์„ ์ฐพ์€ ๋’ค, ํ•ด๋‹น ๋ช…๋ น์— BP๋ฅผ ๊ฑธ๊ณ  F9์œผ๋กœ ์‹คํ–‰ํ•ด์ค€๋‹ค.

F8 ํ‚ค๋ฅผ ํ•œ๋ฒˆ ๋ˆŒ๋Ÿฌ ์••์ถ•ํ•ด์ œ๋œ ์›๋ณธ ์ฝ”๋“œ๋กœ ์ด๋™ํ•œ๋‹ค.

์•„๋ž˜๋Š” ์›๋ณธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ๊ทธ๋ƒฅ ์‹คํ–‰ํ•ด๋ณผ๊นŒ์š”?

 

 

์•ˆํ‹ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•์ด ์ ์šฉ๋˜์—ˆ๋„ค์š”.
๋””๋ฒ„๊ฑฐ์— ์˜ฌ๋ ค ์‹คํ–‰ํ–ˆ์„ ๋•Œ์™€ ์ผ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
๋งˆ์น˜ ๋ฒ ์ด์ง 4๋ฒˆ ๋ฌธ์ œ์ฒ˜๋Ÿผ์š”.
4๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” IsDebuggerPresent ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ์ •์ƒ, ๋˜๋Š” ๋””๋ฒ„๊น… ๋‹นํ•จ์œผ๋กœ ๋ถ„๊ธฐํ–ˆ์—ˆ์ฃ .

๊ทธ๋Ÿผ 19๋ฒˆ ๋ฌธ์ œ๋„ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋””๋ฒ„๊ฑฐ๋ฅผ ํƒ์ง€ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์€ ๋‹ค์Œ, ๊ทธ ๋ฐ”๋กœ ๋ฐ‘ ๋ถ„๊ธฐ์ ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋„˜์–ด๊ฐ€ ๋ณผ๊ฒŒ์š”.

IsDebuggerPresent ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„ BP๋ฅผ ๊ฑธ๊ณ  ๊ฐ„๋‹จํžˆ ์šฐํšŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ๋ฐ”์˜ ์ „ํ™”๊ธฐ ๋ชจ์–‘ ์•„์ด์ฝ˜์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์ด๋Š” ์˜ฌ๋ฆฌ๋””๋ฒ„๊ฑฐ์˜ All intermodular calls์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ € ๋งŽ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ค‘์—์„œ IsDebuggerPresent๋ฅผ ์†์ˆ˜ ์ฐพ๊ธฐ๋Š” ์–ด๋ ค์šธ ๋“ฏํ•ฉ๋‹ˆ๋‹ค.

 

 

ํ•˜๋‹จ์˜ Search ์ฐฝ์—์„œ ์ฐพ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•ด์ค๋‹ˆ๋‹ค.

 

 

๊ฝค๋‚˜ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ๋ถ€๋ถ„์„ ์šฐํด๋ฆญํ•œ ํ›„, Set breakpoint on all calls to IsDebuggerPresent ์„ ๋ˆŒ๋Ÿฌ ๋ชจ๋“  IsDebuggerPresent ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์— BP๋ฅผ ๊ฑธ์–ด์ค๋‹ˆ๋‹ค.

 

 

๋‹ค์‹œ ํ•จ์ˆ˜ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ด…์‹œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ข…๋ฃŒ ์ „๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•ด์•ผ ํ•˜๋‹ˆ, ์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.
sleep ํ•จ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์œ ๋… timeGetTime ํ•จ์ˆ˜์— ๋ˆˆ์ด ๊ฐ‘๋‹ˆ๋‹ค.
์ฒ˜์Œ ๋ณด๊ฑฐ๋‚˜ ์ž˜ ๋ชจ๋ฅด๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‚˜์™”์„ ๋•Œ๋Š” MSDN์„ ์ด์šฉํ•ด ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” MSDN์—์„œ ์„ค๋ช…ํ•œ timeGetTime์ž…๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

timeGetTime ํ•จ์ˆ˜

์œˆ๋„์šฐ๊ฐ€ ์‹œ์ž‘๋˜์–ด์„œ ์ง€๊ธˆ๊นŒ์ง€ ํ๋ฅธ ์‹œ๊ฐ„์„ 1/1000 ์ดˆ (milliseconds) ๋‹จ์œ„๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜.


์•„๋งˆ ์ด ์นœ๊ตฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™์•„์š”.

์šฐํด๋ฆญ -> Set breakpoint on all calls to timeGetTime์œผ๋กœ ๋ชจ๋“  timeGetTime์— BP๋ฅผ ๊ฑธ์–ด์ค๋‹ˆ๋‹ค.

 

 

 

 

F9 ํ‚ค๋กœ ์‹คํ–‰ํ•ด๋ณด๋ฉด IsDebuggerPresent ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ jne ๋ช…๋ น์„ je๋กœ ๋ฐ”๊ฟ” ์šฐํšŒํ•ด์ค„๊ฒŒ์š”.

 

 

์ €๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ step-over, step-in ํ•˜๋ฉฐ ์ฐพ์•˜์ง€๋งŒ, ๊ฐ„๋‹จํžˆ MessageBoxW ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์—ฌ๋Ÿฟ ํ™•์ธํ•ด๋ณด๋ฉด์„œ ๋นจ๋ฆฌ ํ’€์ดํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

40EA13 ํ•จ์ˆ˜๋ฅผ step-over ํ•˜๋ฉด ๋ฉ”์‹œ์ง€ ๋ฐ•์Šค๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

 

์ด ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ step-in ํ•ด ๋ด…๋‹ˆ๋‹ค.

 

 

ํ•˜๋‚˜์”ฉ step-over ํ•ด ๋ณด๋ฉด, ์–ด๋Š ์ง€์ ์—์„œ ๋‹ค์‹œ ๋ฉ”์„ธ์ง€๋ฐ•์Šค๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

 

40B21A ์ฃผ์†Œ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…ํ•ด๋ด…์‹œ๋‹ค.

 

 

40BCC0 ์ฃผ์†Œ ๋ช…๋ น์— ๋‹ค์‹œ step-in ํ•ด ์ค๋‹ˆ๋‹ค.

 

 

45E05F ์ฃผ์†Œ ๋ช…๋ น ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ์ค๋‹ˆ๋‹ค.

 

 

๋ฉ”์‹œ์ง€ ๋ฐ•์Šค๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ MessageBoxW ํ•จ์ˆ˜ ์œ—๋ถ€๋ถ„์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์–ด๋”˜๊ฐ€์— timeGetTime ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๋“ฏํ•ฉ๋‹ˆ๋‹ค.

444D8F ์ฃผ์†Œ์—์„œ ํ•จ์ˆ˜๊ฐ€ ์Šคํƒ์— push ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋จผ์ € ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

19.sub_444C3A ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค.

 

 

timeGetTime ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์œˆ๋„์šฐ๊ฐ€ ์‹œ์ž‘๋œ ์‹œ๊ฐ„์„ ๋ฐ›์•„์˜จ ํ›„, ์ด๋ฅผ esi์— ์˜ฎ๊ฒจ์ค๋‹ˆ๋‹ค.

๋‹ค์‹œ timeGetTime ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค, esi์™€ ํ˜„์žฌ timeGetTime์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ธ eax๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

eax ๊ฐ’์ด esi ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด 444D38 ์ฃผ์†Œ๋กœ ์ ํ”„ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ๊ฐ€ ๋ณผ๊นŒ์š”?

 

 

eax-esi = ์ฒซ timeGetTime ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ๋ถ€ํ„ฐ ๋‘ ๋ฒˆ์งธ timeGetTime ํ•จ์ˆ˜ ํ˜ธ์ถœ๊นŒ์ง€ ๊ฒฝ๊ณผ๋œ ์‹œ๊ฐ„์ด๋ฉฐ, ์ด๋ฅผ ebp+4 ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฐ’๊ณผ ๋น„๊ตํ•˜๊ณ , eax ๊ฐ’์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ ํ”„ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ebp+4 ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋‹ˆ, ebp+4 ์ฃผ์†Œ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋ช‡ ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ ํ›„ ์ข…๋ฃŒ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

follow in dump ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ’์„ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค.

 

 

70 2B ๋ผ๋Š” ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ฆฌํ‹€ ์—”๋””์–ธ์ด๊ธฐ ๋•Œ๋ฌธ์— 2B 70 ์œผ๋กœ ๋ฐ”๊ฟ” ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2B70์€ 10์ง„์ˆ˜๋กœ 11120์ด๋‹ˆ, ์ด ํ”„๋กœ๊ทธ๋žจ์€ 11120 ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ ํ›„ ์ข…๋ฃŒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

์ด ๊ฐ’์„ CodeEngn Auth๋กœ ์ธ์ฆํ•ด๋ด…์‹œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ : 11120