리버싱

2부 13장 PE File Format(3)

오브의 별 2022. 4. 24. 10:12
반응형

안녕하세요, 오브입니다.

오늘은 NT Header에 대해 알아보겠습니다.

https://staraube.tistory.com/51?category=548043 

 

2부 13장 PE File Format(1)

안녕하세요, 오브입니다. 오늘은 PE 파일의 기본구조와 VA, RVA에 대해 알아보겠습니다. PE File Format 13.1. 소개 PE 파일: Windows 운영체제에서 사용되는 실행 파일 형식. 기존 UNIX에서 사용되는 COFF 기

staraube.tistory.com

https://staraube.tistory.com/52?category=548043 

 

2부 13장 PE File Format(2)

안녕하세요, 오브입니다. 오늘은 PE 헤더의 많은 구조체 중 DOS Header와 DOS Stub에 대해 알아보겠습니다. https://staraube.tistory.com/51?category=548043 PE File Format 13.3. PE 헤더 13.3.1. DOS Header D..

staraube.tistory.com

 

PE File Format

13.3.3. NT Header

  • NT header 구조체 IMAGE_NT_HEADERS
typedef struct _IMAGE_NT_HEADERS { 
DWORD Signature; // PE Signature 50450000 (“PE"00) 
lMAGE FILE HEADER FileHeader; 
lMAGE_OPTIONAL_HEADER32 OptionalHeader; 
} lMAGE_NT_HEADERS32 , *PlMAGE_NT_HEADERS32;
  • IMAGE_NT_HEADERS 구조체는 3개의 멤버로 이루어짐
  • 크기: F8
  1. Signature: 50450000h로 “PE”00 값
  2. FileHeader
  3. Optional Header

 

13.3.4. NT Header-File Header

  • IMAGE_FILE_HEADER: 파일의 개략적인 속성 나타냄
typedef struct _IMAGE_FILE_HEADER { 
WORD Machine; 
13 PE File Formal 149 
WORD NumberOfSections; 
DWORD TimeDateStamp; 
DWORD PointerToSymbolTable; 
DWORD NumberOfSymbols; 
RD SizeOfOptionalHeader; 
ORD Characteristics; 
} 1MAGE_F1LE_HEADER, *PlMAGE_F1LE_HEADER;
  • IMAGE_FILE_HEADER는 Machine, NumberOfSections, SizeOfOptionalHeader, Characteristics 멤버가 중요

1. Machine

  • CPU 별로 고유한 값이며 32비트 Intel x86 호환 칩은 14C의 값을 가짐

2. NumberOfSections

  • 섹션의 개수를 나타냄
  • 반드시 0보다 커야하고 정의된 섹션 개수와 실제 섹션이 다르면 실행 에러 발생

3. SizeOfOptionalHeader

  • lMAGE_NT_HEADERS 구조체의 마지막 멤버는 IMAGE_OPTIONAL_HEADER32 구조체인데 이 구조체의 크기 나타냄
  • IMAGE_OPTIONAL_HEADER32는 C언어의 구조체이기 때문에 그 크기가 정해져있음
  • 근데 Windows의 PE 로더는 SizeOfOptionalHeader 값을 보고 IMAGE_OPTIONAL_HEADER32 값 결정
  • PE32+ 형태의 파일인 경우 IMAGE_OPTIONAL_HEADER64 구조체 사용

4. Characteristics

  • 파일의 속성을 나타내는 값으로 실행 가능한 형태인지 혹은 DLL 파일인지 등의 정보들이 bit OR 형식으로 조합
  • PE 파일 중 Characteristics 값에 0002h가 없는 경우: .obj와 같은 object 파일 및 resource DLL 같은 파일
  • IMAGE_ FILE_HEADER의 TimeDateStamp: 파일의 실행에 영향을 미치지 않는 값. 해당 파일의 빌드 시간을 나타낸 값
  • 개발 도구에 따라서 이 값을 셋팅해주는 도구가 있고 아닌 도구가 있음.
반응형