๐Ÿ“Œ UPX ํŒจํ‚น ์ „๊ณผ ํ›„์˜ PE Format ๋น„๊ต

๋น„๊ต์ 

  1. PE header์˜ ํฌ๊ธฐ๋Š” ๋™์ผ
  2. ์„น์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ (".upx0",".upx1")
  3. ".upx0"์˜ RawDataSize=0
  4. EP๋Š” ".upx1"์— ์œ„์น˜
  5. .rsrc๋Š” ๊ฑฐ์˜ ๋ณ€ํ•˜์ง€ ์•Š์Œ

์••์ถ•ํ•ด์ œ ๊ณผ์ •

  1. ์••์ถ•๋œ ์ฝ”๋“œ๋ฅผ ์ฒซ๋ฒˆ์งธ ์„น์…˜์— ํ’€์–ด๋ฒ„๋ฆฐ๋‹ค.
  2. ์••์ถ•ํ•ด์ œ ์ฝ”๋“œ์™€ ์••์ถ•๋œ ์›๋ณธ ์ฝ”๋“œ๋Š” ๋‘๋ฒˆ์งธ ์„น์…˜์— ์กด์žฌ

๐Ÿ“Œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณด๋Š” UPX ํŒจํ‚น ํ•ด์ œ ๊ณผ์ •


1. ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด EDX์˜ ๊ฐ’์„ ํ•œ ๋ฐ”์ดํŠธ ์”ฉ ์ฝ์–ด์„œ EDI์— ์ž…๋ ฅํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.


2. ํ•ด๋‹น ์ฝ”๋“œ์— 1๋ฒˆ๋ณด๋‹ค ํฐ Loop๋ฌธ์ด ์žˆ๋‹ค. ์ด Loop๋ฌธ์€ ์••์ถ•ํ•ด์ œํ•œ ์ฝ”๋“œ์˜ ๊ฐ’์„ ์ฐจ๋ก€๋กœ EDI๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฒซ๋ฒˆ์งธ ์„น์…˜์— ์ ๊ณ  ์žˆ๋‹ค. ์ด Loop๋ฌธ์ด ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์••์ถ•๋œ ์ฝ”๋“œ๋“ค์ด ์ฒซ๋ฒˆ์งธ ์„น์…˜์— ๋‹ค ์ ํ˜”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


3. ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด CALL/JMP ๋ช…๋ น์–ด์˜ destination ์ฃผ์†Œ๋ฅผ ์›๋ž˜ ์ฃผ์†Œ๋กœ ๋ณต์›์‹œํ‚จ๋‹ค.



4. ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด IAT๋ฅผ ์„ธํŒ…ํ•œ๋‹ค. ESI + 13000์ด๋ฏ€๋กœ 01014000์— ์„ธํŒ…๋˜๋ฉฐ, ํ™•์ธํ•ด๋ณด๋ฉด API ๋ฌธ์ž์—ด์ด ์ €์žฅ๋˜์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


5. ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด pushad์— ๋Œ€์‘๋˜๋Š” popad๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ์ฝ”๋“œ ๋์˜ 0100739D๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” OEP(Original Entry Point)๋กœ ์›๋ณธ ์ฝ”๋“œ์˜ ์‹œ์ž‘์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

PUSHAD : 8๊ฐœ์˜ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ (EAX-EDI)์˜ ๊ฐ’์„ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค.
POPAD : PUSHAD ๋ช…๋ น์— ์˜ํ•ด ์Šคํƒ์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์—๊ฒŒ ์ž…๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด.

0๊ฐœ์˜ ๋Œ“๊ธ€