티스토리 뷰

 PE Header

1. PE 란?

Portable Executable라는 의미를 가지는 PE는 애초에는 다른 운영체제에 이식성을 좋게 하려는 의도였으나 실제로는 운영체제 윈도우에서 사용되는 실행 파일, DLL, object 코드, FON 폰트 파일 등을 위한 파일 형식입니다. 윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데이터 구조체라고 할 수 있습니다.

 

PE 파일은 32bit 형태의 실행 파일을 의미하며 PE+ 또는 PE32+ 라고 부르는 64bit 형태의 실행 파일이 있습니다.

우리가 PE를 알아야 하는 가장 큰 이유로 윈도우의 PE 헤더에는 파일을 구성하는 다양한 정보가 있고 이를 통해 파일의 구조를 알 수 있다는 점이며 따라서 학습을 통해 구조에 대하여 이해하고 활용해보도록 하겠습니다.

 

2. PE 구조체

PE 구조를 파악하기 위해 notepad.exe파일을 다루도록 하는데 HxD로 보게 되면 Hex값이 어떤 값을 지정하는지 알기 어렵습니다.

따라서 PEview라는 프로그램으로 확인해보겠습니다.

 

 

PE view로 열어본 것입니다.

왼쪽에 보이는 PE 구조의 항목들과 오른쪽에 보이는 Hex값이 있습니다. 이제 하나의 항목마다 설명하도록 하겠습니다. 

 

2.1 IMAGE_DOS_HEADERS

 

 

 

우선 IMAGE_DOS_HEADER를 보면 DOS파일에 대한 하위 호환성을 고려해 만든 구조체입니다.

주목할 것은 Signature와 Offset to New EXE Header부분으로 MZ라는 DOS실행 파일은 설계한 마크 주비코브스키라는 사람의 이니셜을 따온 DOSSignature이고, 마지막 부분은 NT_HEADERS의 주소를 갖고 있습니다.

리틀 엔디안 표기로 값은 000000E0 이네.

 

2.2 MS-DOS Stub Program

 

다음은 DOS stub 구조체입니다.

DOS stub은 PE 구조체를 모르는 DOS에서 실행하는 코드가 들어있는 부분이며 윈도우 운영체제에서는 PE파일로 인식해 실행되지 않는 코드입니.

따라서 존재의 유무가 파일 실행의 중요하지는 않으며 notepad.exe에서는 DOS에서 실행시키면 This program cannot be run in DOS mode 라는 문자열을 출력하고 종료되는 역할을 합니.

 

2.3 IMAGE_NT_HEADERS

이제 실제 운영체제에서 실행되는 파일의 정보가 있는 부분으로 우선 세 가지로 나누어 보면 PE formatSignature PE, 그리고 File이 구동되는 장치와 파일의 섹션 개수, 생성 시간, 특징 등이 있는 IMAGE_FILE_HEADER, fileMagic, linker version, codedate의 크기, EP의 위치 메모리로 올라갈 때 크기 등의 정보가 있는 IMAGE_OPTIONAL_HEADER로 나눌 수 있겠습니다.

 

 

빨간 박스에 있는 부분은 Signature입니다.

NT구조체에서 가장 처음 보이는 PESignaturePE format이라는 의미입니.

 

 

다음으로는 IMAGE_FILE_HEADER 부분으로 캡쳐와 같이 아래에 중요한 부분들을 정리하였습니다.

 

 

 

1.     Machine / Time Date Stamp

File header에서 구조체는 실행 가능한 기기, CPU 고유의 값을 나타내는 machine과 빌드 시간이 있는 Time Date Stamp가 있는데 이는 개발 도구와 옵션에 따라 빌드 시간을 나타내지 않을 수도 있습니다.

 

2.     Number of Sections

Number of Sections에서의 0003은 앞으로 다룰 섹션들인 code, date, rsrc, rdate 등 파일이 나누어서 저장하는 섹션의 개수가 3개라는 의미이며 이 값은 0보다 커야 하며 실제 섹션과 정의된 섹션의 개수가 다르면 실행 에러가 발생합니.

 

3.     Size of Optional Header

Size of Optional Header 부분은 optional header 구조체의 크기를 나타내고 있는데 이 값을 이용해 일반적인 PE파일의 형식을 벗어난 파일을 만들 수 있습니다.

 

4.     Characteristics

Characreristics는 파일의 속성값으로 읽고 실행되고 등의 정보가 있습니다.

 

글이 아무래도 너무 길면 읽기 힘들어지고 사실 이제부터 중요한 부분을 하는 거라 다음 글에 작성하도록 하겠습니다. 다음글은 IMAGE_OPTIONAL_HEADER와 SECTION_HEADER에 대해서 설명하도록하겠습니다.

 

2018/05/08 - [Analysis/Reversing] - PE Header 구조 정리글 두번째

'Analysis > Reversing' 카테고리의 다른 글

PE Header 구조 정리글 두번째  (0) 2018.05.08
Lena's tutorial 1 (Key File ReverseMe)  (0) 2018.05.03
olly dbg 단축키  (0) 2018.05.03
입문자를 위한 ollydbg 기초 실습  (0) 2018.05.01
정적 분석과 동적 분석이란?  (0) 2018.05.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함