본문 바로가기
메가IT아카데미 국기과정/리버싱과 악성코드 분석

[1-2] PE 파일 분석(PE 헤더)

by 한님폐하 2022. 9. 13.
  • 분석 파일 : calc.exe
  • 분석 도구 : PEview, HxD, CFF Explorer, OllyDbg

1. PE 구조

  • PE 헤더 : IMAGE_DOS_HEADER, MS-DOS Stub Program, IMAGE_NT_HEADERS, IMAGE_SECTION_HEADER
  • PE 바디 : 실제 데이터 정보가 있는 영역(text, data, rsrc, reloc)




2. IMAGE_DOS_HEADER

  • 64Byte(0x40)로 구성되어 있으며, 19개 필드로 구성되어 있다.
  • PE 파일 시그니처와 IMAGE_NT_HEADERS의 위치 정보를 갖고 있다.
  • e_magic : '5A4D' -> MZ -> PE 파일 시그니처를 의미한다.
  • e_ifanew : IMAGE_NT_HEADERS의 위치를 의미한다. (0x000000D8)
    • 0x000000D8에 5045(PE 파일 시그니처)를 확인할 수 있다.

 


3. MS-DOS Stub Program

  • 152Byte(0x98)로 구성되어 있다.
  • MS-DOS, Windows 3.1에서 실행하면 'This program cannot be run in DOS mode'를 출력하는 영역이다.




4. IMAGE_NT_HEADERS

  • 248byte(0xF8)로 구성되어 있다.
  • Signature
    • 4Byte(0x04)
    • PE 파일 시그니처
    • 50 45 00 00
  • IMAGE_FILE_HEADER
    • 20Byte(0x14)
    • CPU 정보, 섹션 수, 파일 생성/컴파일 시간, IMAGE_OPTIONAL_HEADER 크기, 파일 특성 정보들이 포함되어 있다.
    • Machine : CPU 별 고유 값(intel 386/x86 : 0x014C, intel 64 : 0x0200, AMD64 : 0x8664)
    • Number of Sections : 실행 파일이 갖고 있는 총 섹션 개수
    • Time Date Stamp : 파일 생성/컴파일된 시간
    • Size of Optional Header : IMAGE_OPTIONAL_HEADER의 크기(0x00E0 -> 224Byte)
    • Characteristics : PE 파일에 대한 특정 정보를 나타내는 플래그
      • 0x0002 IMAGE_FILE_EXECUTABLE_IMAGE PE 파일을 의미한다.
      • 0x0100 IMAGE_FILE_32BIT_MACHINE 32bit PE 파일을 의미한다.
      • 0x2000 IMAGE_FILE_DLL DLL 파일을 의미한다.
  • IMAGE_OPTIONAL_HEADER
    • 224Byte(0xE0)
    • 표준 필드, NT 추가 필드, DataDirectory 배열 정보들이 포함되어 있다.
      • 표준 필드 : 실행 파일 로드 및 실행에 사용되는 정보이다.
      • 표준 필드 영역 : Magic ~ Base of Code
      • NT 추가 필드 : 윈도우 링커/로더가 요구하는 정보이다.
      • NT 추가 필드 영역 : Base of Data ~ Loader Flags
      • DataDirectory 배열 영역 : Number of Data Directories
    •  Magic : IMAGE_OPTIONAL_HEADER 시그니처
      • 0x010B : 32bit PE 파일
      • 0x020B : 64bit PE 파일
    • Size of Code : text 섹션의 크기(0x52E00)
    • Address of Entry Point : 파일이 메모리에서 시작되는 주소(0x12D6C)
      • PE 로더가 실행을 개시할때 사용하는 RVA 주소이며, text 섹션 내의 특정 번지 주소가 된다.
      • 이 필드의 값은 프로그램이 처음으로 실행될 코드를 담고 있는 EP(entry Point) RVA 주소이다.

 

[참고] RVA, VA

  • RVA
    • PE 파일이 가상 주소 공간 내에서 로드된 후 이미지의 시작 주소에 대한 상대 주소이다.
    • PE 시작 주소에서 어느정도 떨어져 있는지를 계산할 수 있다.
  • VA
    • 가상 메모리 주소 공간에서 프로세스의 절대 주소이다.
    • VA 계산식
      • VA = ImageBase 주소 + RVA 주소
      • VA = 0x01000000 + 0x00012D6C = 0x01012D6C
  • Base of Code : 실행 코드의 위치를 의미한다. 첫번째 섹션이 시작되는 RVA 주소이다.
  • Base of Data : 첫번째 데이터 섹션이 시작되는 RVA 주소이다.
  • Image Base : PE 파일이 로드되는 가상 메모리의 주소이다.
    • DLL/EXE 파일 -> User 메모리 영역인 '0x00000000 ~ 0x7FFFFFFF'에 로드
    • SYS 파일 -> 커널 메모리 영역인 '0x80000000 ~ 0xFFFFFFFF'에 로드
    • DLL 파일/윈도우 제공 EXE 파일 : 0x01000000
    • 그 외 EXE 파일 : 0x00400000
  • Section Alignment : 메모리 상에서 섹션의 최소 단위(File Alignment 보다 커야한다.)
    • 0x1000 -> 4096byte
  • Subsystem : 프로그램 파일 유형
    • SYS 파일과 같은 디바이스 파일
    • Windows GUI 환경 프로그램
    • CMD 기반 콘솔 프로그램
  • DLL Characteristics : 시스템 보호 기능(ASLR, DEP, SHE...) 사용 유무 플래그
  • ASLR 기능 : 0x0040 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
  • Number of Data Directories : IMAGE_DATA_DIRECTORY 구조체 배열
    • 각각의 배열 항목(16개)마다 RVA(4byte), Size(4byte)로 구성되어 있다.
      • EXPORT Table : Export 섹션 시작 주소 및 크기 정보
      • IMPORT Table : Import 섹션 시작 주소 및 크기 정보
      • RESOURCE Table : Resource 섹션 시작 주소 및 크기 정보
      • BASE RELOCATION Table : Relocation 섹션 시작 주소 및 크기 정보