이번 글에서 알아볼 PE 구조의 영역은 DOS 영역이다.

이 영역은 윈도우 실행 파일을 DOS 모드에서 실행하려고 할 때 사용자에게 에러 메시지를 보여주기 위해 존재한다.

실제로 이 영역은 윈도우 실행파일이 윈도우에서 실행할 때에는 아무런 영향을 주지 않는 부분이어서 볼만한 내용이 많지는

않다.

DOS MZ Header와 DOS Stub Program 영역으로 이루어져 있는 이 DOS 영역에 대해서 자세히 알아보자.

[DOS MZ Header]
이 영역은 WinNT.h 헤더파일에 정의되어 있으며, 영역의 구조부터 알아보면 아래와 같다.

[그림 1 - DOS MZ Header의 구조체 구조]

여기서 눈여겨 볼 구조체 멤버는 e_magic과 e_lfanew 구조체 멤버이다.
다른 구조체 멤버들은 사용하지 않거나 PE 파일포맷 내에서는 사실상 의미가 없는 것들이다.

 - e_magic : 이 구조체 멤버는 DOS MZ Header의 맨 앞(PE 파일 맨 앞)을 나타내며 16진수로는 "4D 5A" 값을 가지고
                   아스키코드로 변환하면 "MZ" 라는 값을 가진다. 참고로 MZ는 도스를 최초로 설계한 사람 중 한명인
                   Mark Zbikowksi의 이니셜이라고 한다. 모든 윈도우의 실행파일은 MZ로 시작하기 때문에 이 값을 이용해  
                   실행파일을 찾을 수도 있다. 참고로 오프셋은 0x00 ~ 0x01
- e_lfanew : 이 구조체 멤버는 PE 파일의 머리 격인 IMAGE_NT_HEADER를 가리키는 오프셋 값을 가지고 있다.
                  참고로 오프셋은 0x3C ~ 0x3F

아래 이미지는 notepad.exe의 DOS MZ HEADER 영역을 보여준다.

[그림 2 - DOS MZ HEADER 영역]

이 두값만 올바르다면, 프로그램은 실행하는데 문제가 없다.


[DOS Stub Program]
이 부분은 사용자가 DOS 모드에서 윈도우용 실행파일을 실행 했을시 아래와 같은 문구를 출력해주기 위한 코드가 있는 부분이다.

"This Program connot be run is DOS mode" 

이 부분은 오프셋 0x40 ~ 0x7F 까지 이다.

[그림 3 - DOS Stub Program 부분]


'[+] Information > [-] RCE' 카테고리의 다른 글

PE 구조 (4)  (0) 2011.12.30
PE 구조 (3)  (0) 2011.12.30
PE 구조 (2)  (0) 2011.12.29
PE 구조 (1)  (0) 2011.12.29
Lena's Tutorial 11 상세 분석  (0) 2011.10.13

+ Recent posts