본문 바로가기

Secure Note

PE - 헤더분석

유용한 글 있기에 퍼왔습니다.


우리가 흔히 사용하고 있는 바이너리(실행) 類의 파일들은 대부분 exe, dll, ocx 등의 확장자를 가지고 있는데 우리가 궁극적으로 하고자하는 Reverse 라는 것은 결국...

이러한 바이너리 파일을 구해서 다시 원래의 소스코드 (逆 Compile 과정을 통해서) 수준까지 획득해내는 것이리라..

 

따라서 그동안 기법, 테크닉 등의 응용 측면에만 치우쳐 나름 Reverser 의 길을 가고 있다 자부하던 본인을 반성하며 다시 初心으로 돌아가서 파일의 기본 구성부터 살펴보고자 한다.

 

일단 PE (Portable Executable) 파일의 추상적인 구조를 먼저 살펴 보자.

 

 

        

 

위의 그림의 영역과 같이 여러개의 영역으로 나누어져 있는 것 같으나 크게 구분해보면,

CODE를 위한 영역과 DATA를 위한 영역으로 나눠져 있음을 알 수 있다.

하지만 좀더 자세하게 구분하게 되면,

(DOS header, DOS stub, PE Header ... 순)

 

 ● Executable Code Section, (.text)

 ● Data Section, (.data, .rdata, .bss)

 ● Resource Section, (.rsrc)

 ● Export Data Section, (.edata)

 ● Import Data Section, (.idata)

 ● Debug Information Section, (.debug)

 

이러한 각각의 영역은 파일이 실제 실행되는 순간에 메모리로 로딩이 되어질 때,

해당 영역 그대로 메모리의 주소를 할당하지 않고 실제 메모리에는 아래와 같이 Windows 의 페이지 기반의 가상메모리관리를 통해서 아래와 같이 우선적으로 4KB 의 메모리 페이지가 할당 된다.

 

 

(DOS header, DOS stub, PE Header ... 순, 갑자기 STUB이 사라졌다. -_-;;;)

머 여하튼 이제부터는 각각의 개별 헤더에 대해서 살펴보기로 하는데,

우선적으로 DOS header에 대해서 알아보자.

 

기본적으로 PE파일의 시작 부분은 DOs Header로 구성되어 있는데 크기는 64bytes로 되어 있고 각각의 구성요소는 아래 그림과 같다 .

 

 

여기서 가장 재미있는 부분은 마지막 항목(e_lfanew) 인데,

순서적으로 보자면 DOS Header 바로 다음에 나오는 부분은 DOS 의 stub 부분이고, 보통은 이부분이 실행되어야 하겠지만,

헤더의 마지막 DWORD 부분 (DWORD는 4 bytes임) e_lfanew 의 옵셋 위치로 이동하게 된다.

(DOS header,PE Header ... 순, 결국 STUB은 실행하지 않고 사라지게된다. -_-;;;)

 

즉 아래 그림에 의해서 DOS 헤더의 마지막 부분(D8 00 00 00) 은 실제 바이트의 역순서에 의하여 실제 옵셋 주소는 (00 00 00 D8)의 위치로 이동하게 된다는 것이다.  

따라서 DOS 헤더 이후에는 바로 PE의 헤더 부분인 HEX 값 (50 45 00 00) 의 위치가 실행되게 된다.

 

 

일단 PE 헤더에 대해서는 다음에 정리하도록 하고 위 부분만 다시 간단하게 정리하자면..

 [PE 파일의 구성요소 앞부분]

 DOS Header - DOS stub - PE HEader - PE section 으로 구성되고,

 DOS Header(64bytes)의 마지막 4바이트가 PE HEader의 시작 옵셋으로 이동하도록 함


출처 : http://blog.naver.com/mao0524/140028413604

'Secure Note' 카테고리의 다른 글

ADLER32  (0) 2011.07.30
Crypto는 아니지만,,, 소수찾기  (1) 2011.06.08
해킹 관련 용어  (1) 2011.03.29
base64  (0) 2011.03.22
PE파일 분석도구  (0) 2011.03.05