이번 글에서 알아볼 PE 구조의 영역은 DOS 영역이다.
이 영역은 윈도우 실행 파일을 DOS 모드에서 실행하려고 할 때 사용자에게 에러 메시지를 보여주기 위해 존재한다.
실제로 이 영역은 윈도우 실행파일이 윈도우에서 실행할 때에는 아무런 영향을 주지 않는 부분이어서 볼만한 내용이 많지는
않다.
DOS MZ Header와 DOS Stub Program 영역으로 이루어져 있는 이 DOS 영역에 대해서 자세히 알아보자.
여기서 눈여겨 볼 구조체 멤버는 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 영역을 보여준다.
이 두값만 올바르다면, 프로그램은 실행하는데 문제가 없다.
이 부분은 오프셋 0x40 ~ 0x7F 까지 이다.
이 영역은 윈도우 실행 파일을 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 구조 (1) (0) | 2011.12.29 |
Lena's Tutorial 11 상세 분석 (0) | 2011.10.13 |