무민이의 반반무많이

PE 파일의 구조와 이해 ③ 본문

Reversing/Basic

PE 파일의 구조와 이해 ③

M00min 2016.09.22 23:03

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)


PE 파일의 구조와 이해 ① : http://moomini.tistory.com/93

PE 파일의 구조와 이해 ② : http://moomini.tistory.com/94

PE 파일의 구조와 이해 ③ : http://moomini.tistory.com/95

PE 파일의 구조와 이해 ④ : http://moomini.tistory.com/96


■ Section Header

- 각 Section의 속성을 정의한 것

- 여러개의 Section 구조로 만들면서 안정성 확보

- 크게 Code, Data, Resource로 구분

 Code : Execute, Read 권한

 Data : No-Execute, Read, Write 권한

 Resource: No-Execute, Read 권한

typedef struct _IMAGE_SECTION_HEADER {

    BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // IMAGE_SIZEOF_SHORT_NAME = 8Byte

    union {

        DWORD PhysicalAddress;

        DWORD VirtualSize;

    } Misc;

    DWORD VirtualAddress;

    DWORD SizeOfRawData;

    DWORD PointerToRawData;

    DWORD PointerToRelocations;

    DWORD PointerToLinenumbers;

    WORD NumberOfRelocations;

    WORD NumberOfLinenumbers;

    DWORD Characteristics;

} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

(위의 표에서 빨간 표시 된 5개 외에는 사용되지 않음)

- Name : 8Byte Section 이름 (이름에 대한 기준은 없다.)

- VirtualSize : 메모리에서 Section이 차지하는 크기

- VirtualAddress : 메모리에서 Section의 시작 주소(RVA) → SectionAlignment에 따라 결정

- SizeOfRawData : 파일에서 섹션이 차지하는 크기

- PointerToRawData : 파일에서 Section의 시작 위치 → FileAlignment에 따라 결정

- Characteristics : Section의 속성(Bit OR)

#define IMAGE_SCAN_CNT_CODE                   0x00000020 // Section contains code

#define IMAGE_SCAN_CNT_INITIALIZED_DATA     0x00000040 // Section contains initialized data
#define IMAGE_SCAN_CNT_UNINITIALIZED_DATA 0x00000080 // Section contains uninitialized data

#define IMAGE_SCAN_MEM_EXECUTE              0x20000000 // Section is executable

#define IMAGE_SCAN_MEM_READ                   0x40000000 // Section is readable

#define IMAGE_SCAN_MEM_WRITE                  0x80000000 // Section is writeable


■ AddressOfEntryPoint의 RVA, VA, File Offset 구하기

- Address Of Entry Point's RVA = 0x739D

- Address Of Entry Point's VA = 0x739D + Image Base

0x739D + 0x01000000

= 0x0100739D

- 0x739D < (.text Section's RVA + .text Sections' Virtual Size)

- 0x739D = 0x00001000 + 0x639D

- Address Of Entry Point's File Offset = .text Section's File Offset + 0x639D

= 0x679D

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

PE 파일 줄이기(Tiny PE) ①  (0) 2016.10.03
PE 파일의 구조와 이해 ④  (0) 2016.09.23
PE 파일의 구조와 이해 ③  (0) 2016.09.22
PE 파일의 구조와 이해 ②  (0) 2016.09.21
PE 파일의 구조와 이해 ①  (0) 2016.09.20
PE(Portable Executable) 파일  (0) 2016.09.19
0 Comments
댓글쓰기 폼