티스토리 뷰
이번에는 PE Header 구조 두번째 글입니다.
혹시 바로 들어오신 분들은 아래 첫번째 글 부터 읽어보시는 것을 추천드리겠습니다.
2018/05/08 - [Analysis/Reversing] - PE Header 구조 정리글 첫번째
자, 그럼 바로 이어서 IMAGE_OPTIONAL_HEADER 부터 설명해 보겠습니다.
첫번째 글 2.3에 이어서 연속되어 설명하므로 2.4로 넘버링하겠습니다.
2.4 IMAGE_OPTIONAL_HEADER
PE 구조체 중 가장 크기가 큰 구조체이며 많은 정보를 학습해야 하는 구조체입니다. 파일 실행에 필수적인 값을 가지는 것들이 많아 이 값들이 잘못 되어있다면 정상 실행 되지 않습니다.
1. Magic / Address of Entry Point
가장 처음 있는 Magic은 32와 64구조체에 따라 10B, 20B의 값을 가집니다. 다음으로 Address Of Entry Point는 우리가 알고 있는 EP, 즉 최초의 실행 코드의 시작 주소로 매우 중요한 값입니다.
2. ImageBase
메모리의 로딩될 때 시작 주소의 값이 있는 ImageBase가 있으며 일반적으로 EXE파일의 값은 00400000 입니다. 또한 ImageBase와 Address Of Entry Point의 값을 합친 것이 EIP 레지스터값입니다.
3. Section Alignment / File Alignment
Section Alignment는 메모리에서의 섹션의 크기의 최소 단위로 메모리에 로딩될 때 각각의 섹션이 크기가 1000의 배수가 되어야 한다는 의미이며 File Alignment는 파일에서의 섹션의 최소 단위로 파일에서 섹션의 크기가 200의 배수가 되어야 한다는 의미입니다.
4. Size of Image
Size of image를 살펴보면 14000이라는 값을 있는데 이는 파일이 메모리에 로딩되었을 때 가상 메모리에서 PE가 차지하는 크기를 나타냅니다. 실제 파일의 크기와 메모리에 로딩된 크기는 다를 수 있고 이는 섹션의 File Alignment와 Section Alignment의 값이 다르기 때문에 달라 지는 것입니다.
5. Size of Header
Size of Header는 PE header의 전체 크기를 나타내는 것으로 이 값은 File Alignment값의 배수여야합니다. 또한 파일 시작지점에서 이 값만큼 떨어진 위치 이후에 첫번째 섹션이 위치합니다.
6. Subsystem
Subsystem 구조체는 값에 따라 시스템 드라이버 파일은 1, GUI실행 파일은 2, CUI실행 파일은 3으로 구분하게 해줍니다.
7. Number Of Data Directories / Data Directories
Number Of Data Directories는 Data Directory의 구조체 배열의 개수를 나타내고 Data Directories에서 배열들은 Import와 Export, TLS table등 각 항목마다 테이블 정보를 갖고 있습니다.
2.5 SECTION_HEADER
앞에서 자주 등장하던 Section들의 속성을 정의한 것이 Section Header입니다. Code, data, rsrc등을 나누어 각 섹션마다 보관하고 특성, 접근 권한 등을 다르게 설정하기 때문에 이를 통해 섹션마다 특징을 알아낼 수 있습니다.
Section header 구조체의 배열이다. 이 구조체에서 중요한 부분은 다섯 가지로 나머지 부분은 사용되지 않습니다.
1. Virtual Size
메모리에서 섹션이 차지하는 크기로 로딩된 크기를 말합니다.
2. RVA (Virtual Address)
메모리에서 섹션의 시작 주소로 이 값은 Section Alignment의 정의된 값에 맞게 결정됩니다.
3. Size of Raw Data
파일에서 섹션이 차지하는 크기로 이 값은 일반적으로 Virtual Size와 다른 값을 가지고 이 것은 메모리에 로딩된 섹션과 파일에서의 섹션의 크기가 다르다는 의미입니다.
4. Pointer to Raw Data
파일에서 섹션의 시작 위치로 File Alignment의 정의된 값에 맞게 결정됩니다.
5. Characteristics
실행, 읽기, 쓰기 등의 특징에 대한 고유의 값들을 조합(bit OR)으로 이루어집니다.
Name 항목에 대하여 추가적으로 설명하면 Name에 대한 규칙이 없기 때문에 어떠한 값을 넣거나 NULL값 또한 가능하기 때문에 참고용일 뿐 정보로 활용하기는 어렵습니다.
'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
- AirCrack
- C언어
- pe header
- pingoption
- 기초
- PE
- Network Ping
- printf
- 영화 해석
- PE 구조
- 리버싱
- reversing
- 정보처리기사실기
- PE 구조체
- OllyDbg
- linux ping
- 조커 해석
- VMware
- ping
- 올리디비지
- 악성코드
- 핑
- 정보보안기사
- PE header 구조
- ping 옵션
- 영화 조커
- peview
- aircrack-ng
- ping option
- 정보처리기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |