Hack The Planet

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

reverse engineering/CodeEngn

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

cyalume 2020. 12. 9. 23:57

๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์••์ถ• ํ•ด์ œ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” codeengn ์ž…๋‹ˆ๋‹ค.)

 

๋ชฉํ‘œ๊ฐ’ : ํ”„๋กœ๊ทธ๋žจ์˜ stolenbyte

 

stolenbyte ๋ž€?

 

๋”๋ณด๊ธฐ

ํ›”์ณ์ง„ ๋ฐ”์ดํŠธ๋ผ๋Š” ์˜๋ฏธ๋กœ, ์›๋ณธ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ถ„์„ ํŒจ์ปค๊ฐ€ ์ƒ์„ฑํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ฒ•.

๋งŒ์•ฝ ์ด๋ฅผ ๋ณต๊ตฌํ•˜์ง€ ์•Š๊ณ  ๋คํ”„๋ฅผ ๋–  ๋ฒ„๋ฆฌ๋ฉด OEP ์ฝ”๋“œ ์ผ๋ถ€๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์ •์ƒ์ ์ธ ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

POPAD ์™€ OEP๋กœ์˜ ์ ํ”„๋ฌธ ์‚ฌ์ด์— ์—ฐ์†๋œ PUSH ๋ช…๋ น์–ด๊ฐ€ ์ด stolenbyte ์ด๋‹ค.

 

์‹คํ–‰์„ ์‹œ์ผœ๋ด…๋‹ˆ๋‹ค.

 

 

 

OK๋ฅผ ๋ˆŒ๋Ÿฌ์ค์‹œ๋‹ค.

 

 

 

 

ํ‚ค ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•œ ํ›„ ์„ฑ๊ณต/์‹คํŒจ๋กœ ๋ถ„๊ธฐํ•˜๋Š” ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

์ฐพ์•„์•ผ ํ•  ๊ฐ’์€ stolenbyte ์ด๋‹ˆ ํฌ๋ž™์€ ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

stolenbyte ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑธ ๋ณด๋‹ˆ ํŒจํ‚น์ด ๋˜์–ด์žˆ๊ฒ ๊ตฐ์š”.

PEid๋กœ  UPX ํŒจํ‚น์ด ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

PUSHAD ๋ช…๋ น์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐํด๋ฆญ -> Search for -> All comands ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด POPAD ๋ช…๋ น์–ด๋ฅผ ์ฐพ์•„๋ด…์‹œ๋‹ค.

 

 

 

 

์–ด๋ ต์ง€ ์•Š๊ฒŒ OEP ๋กœ ์ด๋™ํ•ด์ค์‹œ๋‹ค.

POPAD ๋ฐ‘ OEP๋กœ ์ ํ”„ํ•˜๋Š” ๊ตฌ๋ฌธ์— [F2] ๋กœ BP๋ฅผ ๊ฑธ๊ณ , [F9] ์œผ๋กœ BP๊นŒ์ง€ ์‹คํ–‰์„ ํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ ๋’ค [F8] ๋กœ JMP ๋ช…๋ น์„ ์‹คํ–‰ํ•ด OEP ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ OEP ์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

OEP ์˜ ๋ฐ”๋กœ ๋ฐ‘์—์„œ MessageBoxA ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ ์ด ๋ถ€๋ถ„์ด ์šฐ๋ฆฌ๊ฐ€ ๋ดค๋˜ 'ํ‚คํŒŒ์ผ ํ™•์ธํ•˜๋ ค๋ฉด OK๋ฅผ ๋ˆŒ๋Ÿฌ๋ผ' ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„์ผ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ธ์ž๋กœ 0 ํ•˜๋‚˜๋งŒ์ด ์ „๋‹ฌ๋˜๋„ค์š”.

๋ญ”๊ฐ€ ์ด์ƒํ•˜์ฃ ?

 

MSDN ์—์„œ MessageBoxA ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ์ฐพ์•„๋ด…์‹œ๋‹ค.

 

MessageBox ํ•จ์ˆ˜?

 

๋”๋ณด๊ธฐ
MessageBox ํ•จ์ˆ˜์˜ ์ธ์ž : 

hWnd

์œ ํ˜•: HWND

๋ฉ”์‹œ์ง€ ์ƒ์ž์˜ ์†Œ์œ ์ž ์ฐฝ์— ๋Œ€ํ•œ ํ•ธ๋“ค. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ NULL์ธ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์ƒ์ž์— ์†Œ์œ ์ž ์ฐฝ์ด ์—†์Œ.



lpText

์œ ํ˜•: LPCTSTR

ํ‘œ์‹œํ•  ๋ฉ”์„ธ์ง€. ๋ฌธ์ž์—ด์ด ๋‘˜ ์ด์ƒ์˜ ์ค„๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ๊ฐ ์ค„ ๊ฐ„์— ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด ๋ฐ/๋˜๋Š” ๋ผ์ธํ”ผ๋“œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.



lpCaption

์œ ํ˜•: LPCTSTR

๋Œ€ํ™” ์ƒ์ž ์ œ๋ชฉ. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ NULL์ธ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ œ๋ชฉ์€ ์˜ค๋ฅ˜.



uType

์œ ํ˜•: UINT

๋Œ€ํ™” ์ƒ์ž์˜ ๋‚ด์šฉ ๋ฐ ๋™์ž‘. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ ๊ทธ๋ฃน์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Œ.

๋ฉ”์‹œ์ง€ ์ƒ์ž์— ํ‘œ์‹œ๋œ ๋‹จ์ถ”๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•จ.



-์ถœ์ฒ˜ MSDN-

๋ถ„๋ช… ์ด ํ•จ์ˆ˜๋Š” 4๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ, MessageBox ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „ ์Šคํƒ์œผ๋กœ 0์ด๋ผ๋Š” ๊ฐ’ ๋งŒ์„ ์ „๋‹ฌํ•˜์ฃ ?

OEP์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด๋ณด๋ฉด ์ธ์ž ์„ธ ๊ฐœ๊ฐ€ ๋ชจ์ž๋ž๋‹ˆ๋‹ค.

์•„๋งˆ ๋‚˜๋จธ์ง€ ์„ธ ๊ฐœ์˜ PUSH๋œ ์ธ์ž๋“ค์ด stolenbyte ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์„ธ ๊ฐœ์˜ PUSH ๋ช…๋ น์€ ๋ชจ๋‘ 12 byte ์ž…๋‹ˆ๋‹ค.

OEP์˜ ์œ„์—๋„ 12๊ฐœ์˜ NOP ๋ช…๋ น์ด ์žˆ๊ณ , ์ด๋Š” ์ด 12 byte ์ž…๋‹ˆ๋‹ค.
์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์ด ๊ฐ™์ฃ ?

์—ฌ๊ธฐ๊ฐ€ stolenbyte ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์ผ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๋””๋ฒ„๊ฑฐ๋ฅผ ์žฌ์‹œ์ž‘ํ•ด POPAD ์™€ OEP๋กœ์˜ JMP๋ฌธ ์‚ฌ์ด์— PUSH ๋œ ๊ฐ’๋“ค์„ ์ฐพ์•„๋ด…์‹œ๋‹ค.

์•„๋งˆ ๊ทธ ๊ฐ’๋“ค์ด MessageBox ํ•จ์ˆ˜์˜ ์ธ์ž์ผ ๊ฒ๋‹ˆ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ POPAD ์™€ JMP ์‚ฌ์ด์— ์„ธ ๊ฐœ์˜ ๊ฐ’์ด PUSH ๋˜๋„ค์š”.

์ด๋“ค์ด MessageBox ํ•จ์ˆ˜์˜ ์ธ์ž์ด์ž stolenbyte ์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

ํ•œ ๋ฒˆ ํŒจ์น˜ํ•ด๋ณผ๊นŒ์š”?

๊ทธ๋Œ€๋กœ ๋คํ”„๋ฅผ ๋–  ๋ฒ„๋ฆฌ๋ฉด MessageBox ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๊ฐ€ ๋ชจ์ž๋ผ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์ € PUSH ๋ช…๋ น๋“ค์„ OEP ์•ž์— ์˜ฎ๊ฒจ์™€ ์ค๋‹ˆ๋‹ค.

 

 

 

 

00401000 ์ฃผ์†Œ๋ถ€ํ„ฐ [Space] ํ‚ค๋กœ ๋ช…๋ น์„ ์ˆ˜์ •ํ•œ ๋’ค ์–ด์…ˆ๋ธ”์„ ํ•ด ์ค๋‹ˆ๋‹ค.

์ฐจ๋ก€๋Œ€๋กœ PUSH 0, PUSH 00402000, PUSH 00402012 ์œผ๋กœ ์ˆ˜์ •ํ•ฉ์‹œ๋‹ค.

์ฒ˜์Œ ์šฐ๋ฆฌ๊ฐ€ ๋ณด์•˜๋˜ ๋ฉ”์„ธ์ง€๋ฐ•์Šค์— ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ž๊ฐ€ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

์ด์ œ ๋คํ”„๋ฅผ ๋œฐ ๊ฒ๋‹ˆ๋‹ค.
OEP ๊ฐ€ 0040100C ์ด์˜€์ง€๋งŒ ์ˆ˜์ •์„ ํ†ตํ•ด 00401000 ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Ollydump ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•  ๋•Œ, Entry Point ์˜ Modify ๊ฐ’์„ 100C ์—์„œ 1000 ์œผ๋กœ ๋ฐ”๊ฟ”์ค€ ๋’ค Dump ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

 

 

 

 

์ด ํŒŒ์ผ์„ ๋””๋ฒ„๊ฑฐ๋กœ ์—ด์–ด๋ด…์‹œ๋‹ค. 

์ •์ƒ์ ์œผ๋กœ ํŒจ์น˜๋˜์–ด ์‹คํ–‰ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ POPAD ๋’ค์—์„œ OEP ์•ž์œผ๋กœ ์˜ฎ๊ธด ์ฝ”๋“œ๊ฐ€ ํŒจ์ปค์— ์˜ํ•ด ์ด๋™๋œ ์ฝ”๋“œ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Stolenbyte ๋Š” ์œ„์˜ ๋ถ‰์€์ƒ‰ ๋ฐ•์Šค ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ธ 6A0068002040006812204000 ์ž…๋‹ˆ๋‹ค.

 

Stolenbyte = 6A0068002040006812204000

 

 

 

 

์ฝ”๋“œ์—”์ง„์˜ Auth ๋ฅผ ์ด์šฉํ•ด ์ธ์ฆํ•ด๋ด…์‹œ๋‹ค.