๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Tried. Failed. Logged.
๐Ÿ”’์ •๋ณด๋ณด์•ˆ/์‹œ์Šคํ…œ ๋ณด์•ˆ

์‹œ์Šคํ…œ ๋ณด์•ˆ - EXE ํŒŒ์ผ PE(Portable Executable) ๊ตฌ์กฐ ๋ถ„์„ํ•˜๊ธฐ

by Janger 2023. 10. 7.
728x90
PE(Portable Executable)์ด๋ž€?

Windows ์šด์˜์ฒด์ œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ด์ง„ ํŒŒ์ผ ํ˜•์‹์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ํŒŒ์ผ ํ˜•์‹์€ Windows ์šด์˜์ฒด์ œ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ, DLL, ๋“œ๋ผ์ด๋ฒ„ ๋“ฑ์— ํฌํ•จ๋œ๋‹ค. ๋ฆฌ๋ˆ…์Šค์—๋„ PE์™€ ๋น„์Šทํ•œ ํŒŒ์ผ ํ˜•์‹์ด ์žˆ์œผ๋ฉฐ ELF(Executable and Linkable Format)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

PE ํŒŒ์ผ ์ข…๋ฅ˜

1) ์‹คํ–‰ ๊ณ„์—ด : EXE, SCR

2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์—ด : DLL, OCX, CPL, DRV

3) ๋“œ๋ผ์ด๋ธŒ ๊ณ„์—ด : SYS, VXD

4) ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ ๊ณ„์—ด : OBJ

 

 

์‚ฌ์šฉ ๋ชฉ์ 

ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ ์žฌ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ PE์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์–ด๋”” ์ฃผ์†Œ์— ์ ์žฌ๊ฐ€ ๋ ์ง€์™€ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ์ •๋ณด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 

 

 

 

 

PE ํŒŒ์ผ ๊ตฌ์กฐ (Header + Sections)

https://www.researchgate.net/figure/Portable-executable-file-format_fig6_338355873

PE๋Š” ํฌ๊ฒŒ ํ—ค๋”์™€ ์„น์…˜(ํ˜น์€ ๋ฐ”๋””)์œผ๋กœ ๋‚˜๋‰œ๋‹ค. 

 

 

 

๋‹ค์Œ์€ ์„น์…˜์˜ ๊ตฌ์„ฑ๋“ค์ด๋‹ค. 

IMAGE_DOS_HEADER ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ์‹ค์ œ PE ํ—ค๋” ์œ„์น˜(IMAGE_NT_HEADER)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
MS-DOS Stub DOS ์šด์˜์ฒด์ œ์—์„œ ์œˆ๋„์šฐ์šฉ PE ํŒŒ์ผ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ณด์—ฌ์ค„ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. 
IMAGE_NT_HEADER 4 ๋ฐ”์ดํŠธ ์‹œ๊ทธ๋‹ˆ์ฒ˜(PE)์™€ 2๊ฐœ์˜ IMAGE_FILE_HEADER, IMAGE_OPTION_HEADER ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์‹ค์ œ PE ํŒŒ์ผ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋‹ค. 
.text ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. (๊ธฐ๊ณ„์–ด)
.data ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ฐ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. (์ฝ๊ธฐ ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์„น์…˜)
.rdata ์ฝ๊ธฐ ์ „์šฉ(Read-Only) ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. (์ƒ์ˆ˜ํ˜• ๋ณ€์ˆ˜, ๋ฌธ์ž์—ด ์ƒ์ˆ˜)
.bss ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ „์—ญ ๋ฐ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
.rsrc ๋ฆฌ์†Œ์Šค(Resource) ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. (๋‹ค์ด์–ผ๋กœ๊ทธ, ์•„์ด์ฝ˜, ์ปค์„œ ๋“ฑ)
.reloc ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ฃผ์†Œ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 
.edata ๋‚ด๋ณด๋‚ด๊ธฐ(Export) ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ
.idata ๊ฐ€์ ธ์˜ค๊ธฐ(Import) ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ(์ž„ํฌํŠธํ•  DLL๊ณผ API/ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์„น์…˜, IAT๊ฐ€ ์กด์žฌ)

 

์‚ฌ์šฉํ•œ ๋ถ„์„ ๋„๊ตฌ๋“ค

x64dbg, Stud_PE, PEview

 

ImageBase

PE ํŒŒ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์ฃผ์†Œ์ด๋‹ค. Windows NT์—์„œ ๊ธฐ๋ณธ ๊ฐ’์€ 0x00400000์ด๋‹ค. ImageBase๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ง€์ ์ด๊ณ  ์•ž์œผ๋กœ ๋‚˜์˜ฌ ๊ฐ€์ƒ ์ฃผ์†Œ๋“ค์˜ ๊ธฐ์ค€์ ์ด ๋œ๋‹ค. 

์•ž์œผ๋กœ ๋‚˜์˜ค๋Š” ์„น์…˜๋“ค์—๋Š” VirtualOffset์ด๋ผ๋Š” ์˜คํ”„์…‹์„ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ImageBase๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค. 

๋งŒ์•ฝ .text์˜ VirtualOffset ๊ฐ’์ด 00001000์ด๊ณ  ์ ˆ๋Œ€ ์ฃผ์†Œ๋ฅผ ๊ตฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ImageBase + .text์˜ VirtualOffset์„ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. 00400000 + 00001000 = 00401000

 

 

VA & RVA

VA(Virtual Address) : ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ˆ๋Œ€ ์ฃผ์†Œ

RVA(Relative Virtual Address) : ๊ธฐ์ค€(ImageBase)์œผ๋กœ๋ถ€ํ„ฐ ์ƒ๋Œ€ ์ฃผ์†Œ

 

ImageBase + RVA = VA

 

AddressOfEntryPoint

์‹คํ–‰ ํŒŒ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘๋œ ํ›„ ์ฝ”๋“œ ์‹œ์ž‘ ์ฃผ์†Œ๊ฐ€ ๋œ๋‹ค. EP์˜ RVA ์ฃผ์†Œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ์ฆ‰ ์ƒ๋Œ€ ์ฃผ์†Œ์ด๋‹ค. 

 

์˜ˆ๋ฅผ๋“ค์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด EntryPoint๊ฐ€ 000014E0์ผ ๊ฒฝ์šฐ ์—ฌ๊ธฐ๋‹ค ImageBase ๊ฐ’(00400000)์„ ๋”ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํ”„๋กœ๊ทธ๋žจ์˜ EntryPoint ์ ˆ๋Œ€ ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ( 00400000  + 000014E0 = 004014E0 )

 

 

 

.text Section

.text์—๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ์ €์žฅ์ด ๋œ๋‹ค. ์ž˜ ๋ณด๋ฉด pFile์ด 00000400์ธ๋ฐ ์ด๊ฑด RawOffset์„ ์˜๋ฏธํ•˜๊ณ  ์‹ค์ œ๋กœ ์‹คํ–‰ ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ์—๋Š” VirtualOffset(RVA)์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

x64dbg๋กœ ์ฝ”๋“œ ๋ถ€๋ถ„์— ๋งจ ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด ์ •๋ง 00401000(.text์˜ RVA์™€ ImageBase๊ฐ€ ๋”ํ•œ)์ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

.rdata Section

์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ์ž‘์„ฑํ•œ "What's your name?"์ด๋ผ๋Š” ์ŠคํŠธ๋ง๊ณผ "%s %d" ๊ฐ™์€ ํฌ๋งท๋„ ๋ณด์ธ๋‹ค. 

 

.idata Section

Import ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜๋Š” ์„น์…˜์ด๋‹ค.

.idata ์„น์…˜์€ ๋˜ IDT(Import Directory Table), INT(Import Name Table), IAT(Import Address Table)๋“ค๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. 

 

IAT์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ถˆ๋Ÿฌ์˜ค๋Š” DLL ํŒŒ์ผ๊ณผ API ํ•จ์ˆ˜๋“ค์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 

 

 

 

์ฐธ๊ณ : 

https://rninche01.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%8B%A4%ED%96%89%ED%8C%8C%EC%9D%BC-%EA%B5%AC%EC%A1%B0PE%ED%8C%8C%EC%9D%BC

 

์œˆ๋„์šฐ ์‹คํ–‰ํŒŒ์ผ ๊ตฌ์กฐ(PEํŒŒ์ผ)

1. ์œˆ๋„์šฐ ์‹คํ–‰ํŒŒ์ผ(PEํŒŒ์ผ) ๊ฐœ์š” 1.1 PEํŒŒ์ผ์ด๋ž€? PE(Portable Executable)ํŒŒ์ผ์€ ์œˆ๋„์šฐ ์‹คํ–‰ํŒŒ์ผ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์œˆ๋„์šฐOS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์‹คํ–‰ํŒŒ์ผํ˜•์‹์„ ์˜๋ฏธํ•˜๋ฉฐ UNIX์˜ COFF(Common Object File Format)์„ ๊ธฐ๋ฐ˜์œผ

rninche01.tistory.com

 

https://rednooby.tistory.com/33

 

[์•…์„ฑ์ฝ”๋“œ๋ถ„์„] PE (portable Executable) ๊ธฐ์ดˆ ๊ฐœ๋…์žก๊ธฐ

PEํฌ๋งท ์ด๋ž€?์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์‹คํ–‰ํŒŒ์ผ, DLL Object์ฝ”๋“œ, FON ํฐํŠธํŒŒ์ผ ๋“ฑ์„ ์œ„ํ•œ ํŒŒ์ผํ˜•์‹์ž…๋‹ˆ๋‹ค.OEํŒŒ์ผ์€ ์œˆ๋„์šฐ ๋กœ๋”๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์บก์Šํ™”ํ•œ ๋ฐ์ด

rednooby.tistory.com

 

https://learn.microsoft.com/ko-kr/windows/win32/debug/pe-format

 

PE ํ˜•์‹ - Win32 apps

์ด ์‚ฌ์–‘์€ Windows ์šด์˜ ์ฒด์ œ ์ œํ’ˆ๊ตฐ์— ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ(์ด๋ฏธ์ง€) ํŒŒ์ผ ๋ฐ ๊ฐœ์ฒด ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์€ ๊ฐ๊ฐ PE(์ด์‹ ๊ฐ€๋Šฅํ•œ ์‹คํ–‰ ํŒŒ์ผ) ๋ฐ COFF(๊ณต์šฉ ๊ฐœ์ฒด ํŒŒ์ผ ํ˜•์‹) ํŒŒ์ผ์ด๋ผ๊ณ  ํ•ฉ

learn.microsoft.com

 

728x90