본문 바로가기
reversing

NT header

by 코끼리_땃쥐 2022. 5. 13.
반응형

NT header                                                                                                     

 

NT header 구조체 IMAGE_NT_HEADER

 typedef struct _IMAGE_NT_HEADERS{
     DWORD Signature;     // PE signature  :  50450000 ("PE"00)
     IMAGE_FILE_HEADER FileHeader;
     IMAGE_OPTIONAL_HEADER32 OptionalHeader;
 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

위 구조체는 32bit 용, 64bit용은 세번째 멤버가 IMAGE_OPTIONAL_HEADER64 임

 

 IMAGE_NT_HEADER 구조체는 3개의 멤버로 되어있음

제일 첫 멤버는 Signature로서 50450000h ("PE"00) 값을 가집니다. (변경불가)

그리고 Fileheader와 OptionalHeader 구조체 멤버가 있음.

 

IMAGE_NT_HEADER - IMAGE_FILE_HEADER                                                                              

 

파일의 개략적인 속성을 나타내는 IMAGE_FILE_HEADER 구조체입니다.

typedef struct _IMAGE_FILE_HEADER {
    WORD Machine;
    WORD NumberOfSections;
    DWORD TimeDateStamp;
    DWORD PointerToSymbolTable;
    DWORD NumberOfsymbols;
    WORD SizeOfOptionalHeader;
    WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

IMAGE_FILE_HEADER 구조체에서 아래 4가지 멤버가 중요함

1. Machine 2. NumberOfSections 3. SizeOfOptionalHeader 4. Characteristics

 

1. Machine 

Machine 넘버는 CUP별로 고유한 값이며 32bit Intel 호환칩은 14Ch의 값을 가집니다.

 

2. NumberOfSections 

PE 파일은 코드, 데이타, 리소스 등이 각각의 섹션에 나뉘어서 저장됨

NumberOfSections는 바로 그 섹션의 갯수를 나타냄

 

이값을 반드시 0보다 큼

 

정의된 섹션 갯수보다 실제 섹션이 적다면 실행 에러가 발생,

정의된 섹션 갯수보다 실제 섹션이 많다면 정의된 갯수만큼만 인식됨.

 

3. SizeOfOptionalHeader

IMAGE_NT_HEADER 구조체의 마지막 멤버는 IMAGE_OPTIONAL_HEADER32 구조체임

SizeOfOptionalHeader 멤버는 바로 이 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 나타냄.

 

IMAGE_OPTIONAL_HEADER32는 C언어의 구조체이기 때문에 이미 그 크기가 결정되어 있음

그런데 Windows 의 PE Loader 는 IMAGE_FILE_HEADER의 SizeOfOptionalHeader 값을 보고 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 인식함

 

IMAGE_DOS_HEADER의 e_lfanew 멤버와 IMAGE_FILE_HEADER의 SizeOfOptionalHeader 멤버 때문에

일반적인(상식적인) PE파일 형식을 벗어나는 일명 '꽈배기' PE 파일(PE Patch) 이 만들 수있음

 

4. Characteristics

파일의 속성을 나타내는 값, 실행이 가능한 형태인지(executable or not)

혹은 DLL 파일인지 등의 정보들이 bit OR 형식으로 조합됨

 

 

 

 

출처 : https://reversecore.com/20?category=216978

반응형

'reversing' 카테고리의 다른 글

테크 맵  (0) 2022.05.26
API 후킹  (0) 2022.05.26
PE DOS Header  (0) 2022.05.12
PE File Format  (0) 2022.04.25
Hook ? (훅 이란 ?)  (0) 2022.02.24

댓글