자료 저장소

기본적으로 PE 헤더는 3가지로 구성이 되어 있는데,

 

    

 

보통 PE 헤더의 시작인 '50 45 00 00' 의 DWORD 에 해당되는 것이 바로 Signature 이다.

그 다음에 이어지는 20bytes가 FileHeader 이고 마지막으로 OptionaHeader가 224bytes의 크기를 가진다.

 

    

 

위 Number of Sections는 실제 PE 파일 내에 몇개의 section이 있는지에 대한 개수를 나타내는 것인제... PE 파일의 시작지점에서 7 번째 바이트의 위치에 나타나 있다.

 

 

즉 나타나있는 값 3에 따라 3개의 section이 있고,

각 secion은 PE broswser 혹은 PEID를 통해서도 확인이 가능핟.

 

 

 

20 바이트의 파일 헤더 뒤에는 OptionalHeader 가 나타나게 되는데,

224 bytes 의 크기를 가지고 마지막 필드 부분은 128 bytes의 Data Directory로 되어 있다.

 

OptionalHeader는 아래와 같이 구성되어 있다.

 

    

 

헤더 중에서 가장 중요하고 눈에 띄는 것은 역시 "AddressOfEntryPoint" 프로그램의 시작위치(OEP)일것이고, 만약 해당 PE 파일이 Packing 이라두 되어 있을 경우에는 (악성 프로그램 혹은 protection이 되어 있는類) Packer에 의한 시작위치를 가리키게 되어 있을 것이다.

 

아래 HEXA에디터의 시작위치를 참조하여 실제 OllyDBG등으로 실행해보면 프로그램 Open 시에 시작 위치로 자동 배치된다.

 

 

ImageBase야 당연히  400000h 크기일것이고 (99%... -_-;)

그리고 DataDirectoy에 대해서는 별도로 설명을 해야 할 필요가 있어 보인다.

 

PE의 처음 시작 Signature (4bytes), FileHeader (20bytes), 그리고 OptionalHeader(224bytes)인데 앞에 96bytes 이후에 DataDirecotry 시작의 위치를 나타낸다.

(따라서 16바이트 단위로 구성된 Hexa 에디터에서 보면 12번째 위치(OptionalHeader시작으로부터 8*12=96부터 Data Directory 가 시작되고, 처음 8바이트는 Export Table관련, 그리고 이어서 14번째 위치(8*14=112)에 Import Table의 순으로 배치된다. )

 

DataDirectory는 다음번 강좌에 넣으려 했으나 그거 하나땜에 OptionalHeader를 두번에 나눠서 올리자니 살짝 귀찮기두 하구.. 여기서 계속 이어갈란다.  

DataDirectory는 단적으로 얘기하면 데이터 구조에 대한 위치와 크기에 대한 값을 저장하고 있다고 보면 되겠는데 아래의 예를 보면, LordPE와 HEXA값을 통해서 실제 DataDirectory에 사용되는 값을 볼 수 있다.

 

 

DataDirectoy에 0을 제외한 값이 있는 부분에 대해서 DWORD 단위로 끊어보면,

아래와 같이 LoredPE 프로그램에서 볼 수 있는 Directory값과 일치하는 것을 볼 수 있음.

 

 

 

 

일단 여기까지 PE Header를 끝내고다음 강좌에서 SECTION 부분으로 넘어가도록 하겠다.


 

'컴퓨터 기술 > PE 포맷' 카테고리의 다른 글

PE 파일 :: Imports 상세 분석(disk)  (0) 2011.02.25
PE 파일 :: Import Section 분석  (0) 2011.02.25
PE 파일 :: Sections 분석  (0) 2011.02.25
PE 파일 :: 분석 tool  (0) 2011.02.25
PE 파일 :: 헤더 분석(1)  (0) 2011.02.25
댓글 로드 중…

최근에 게시된 글