PE(Portable Executable) file format

2024. 5. 6. 17:06·Hacking/Window
728x90
반응형

Definition | 정의

윈도우 운영체제에서 사용되는 실행 파일 형식을 의미함 ex) exe 파일

PE format : 윈도우 로더가 실행 가능한 코더를 관리하는데 필요한 정보를 캡슐화한 데이터 구조체

Portable Executable File Format : 옮겨지더라도 파일이 실행가능하도록 만들어진 포맷

→ 프로그램을 빌드할 때 파일 실행시 필요한 정보들을 PE헤더에 명시해주곤 함

 

종류

실행계열 : exe, scr

라이브러리 계열 : DLL, OCX, CPL, DRV

드라이버 계열 : SYS, VSD

오브젝트 계열 : OBJ

 

PE파일의 구조

 

https://m.blog.naver.com/PostView.nhn?blogId=jjscan&logNo=220742583133&proxyReferer=https:%2F%2Fwww.google.com%2F

Dos Header

알씨 9.22의 Dos Header

e_magic값 : 해당 파일이 PE 파일인지 아닌지 확인해주는 영역 →시작 부분이 4D 5A여야함

--> Dos Signature 값이 존재함

[IMAGE_DOS_HEADER 구조체]

https://jeongzero.oopy.io/ea359704-1d23-479f-96b0-ac4014c0cda5

  • 구조체 크기 0x 40
  • e_magic 변수 : 2byte
  • e_lfanew 변수 : NT header의 시작 주소 표시 (4byte - 가변적)

알씨 9.22 파일을 참고하면 e_lfanew는 00 00 01 00(리틀엔디안)이다

 

Dos Stub

  • DOS Header의 다음 주소부터 NT Header 시작 전까지 영역

알씨 9.22

window 32에서 돌아가야한다는 것을 나타냄

 

NT Header (IMAGE_NT_HEADERS)

typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;                 // PE Signature
    IMAGE_FILE_HEADER FileHeader; 
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
  • Signature : 50 45 00 00 byte로 NT Header 구조체의 시작을 알림

알씨 9.22

  • 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;
  • Machine : 해당 파일이 동작 가능한 머신의 종류 → 알씨 9.22는 0x014c (리틀엔디안) Intel x86호환 CPU
  • NumberOfSections : PE 파일이 가지고 있는 Section의 개수 → 알씨 9.22는 0x000B 총 11개
  • TimeDateStamp : 파일을 빌드한 시간 (4byte)
  • PointertoSymbolTable : 심볼테이블을 가리키는 포인터 (4byte)
  • NumberofSymbols : 심볼의 개수 (4byte)
  • SizeofOptionalHeader : IMAGE_OPTIONAL_HEADER 구조체의 크기(2byte)  → 알씨 9.22는 0x00E0 (224 byte)
  • Characteristics : 현재 파일의 형식을 알려줌 (실행파일 / DDL / 시스템 /재배치 여부) (2byte) → 알씨 9.22는 0x818E 

<Characteristics 참고 WinNT.h>

#define IMAGE_FILE_RELOCS_STRIPPED            0x0001 // Relocation info stripped from file.
#define IMAGE_FILE_EXECUTABLE_IMAGE        0x0002 // File is executable (i.e. no unresolved externel references).
#define IMAGE_FILE_LINE_NUMS_STRIPPED        0x0004 // Line nunbers stripped from file.
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED        0x0008 // Local symbols stripped from file.
#define IMAGE_FILE_AGGRESIVE_WS_TRIM        0x0010 // Agressively trim working set
#define IMAGE_FILE_LARGE_ADDRESS_AWARE        0x0020 // App can handle >2gb addresses
#define IMAGE_FILE_BYTES_REVERSED_LO        0x0080 // Bytes of machine word are reversed.
#define IMAGE_FILE_32BIT_MACHINE            0x0100 // 32 bit word machine.
#define IMAGE_FILE_DEBUG_STRIPPED            0x0200 // Debugging info stripped from file in .DBG file
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP    0x0400 // If Image is on removable media, copy and run from the swap file.
#define IMAGE_FILE_NET_RUN_FROM_SWAP        0x0800 // If Image is on Net, copy and run from the swap file.
#define IMAGE_FILE_SYSTEM                0x1000 // System File.
#define IMAGE_FILE_DLL                    0x2000 // File is a DLL.
#define IMAGE_FILE_UP_SYSTEM_ONLY            0x4000 // File should only be run on a UP machine

즉 0x818E => 32bit word machine & Bytes of machine word are revsersed & file is executable  ...

  • OptionalHeader - 224byte
typedef struct _IMAGE_OPTIONAL_HEADER {
          //
          // Standard fields.
          //
          WORD    Magic;
          BYTE    MajorLinkerVersion;
          BYTE    MinorLinkerVersion;
          DWORD   SizeOfCode;
          DWORD   SizeOfInitializedData;
          DWORD   SizeOfUninitializedData;
          DWORD   AddressOfEntryPoint;
          DWORD   BaseOfCode;
          DWORD   BaseOfData;
          //
          // NT additional fields.
          //
          DWORD   ImageBase;
          DWORD   SectionAlignment;
          DWORD   FileAlignment;
          WORD    MajorOperatingSystemVersion;
          WORD    MinorOperatingSystemVersion;
          WORD    MajorImageVersion;
          WORD    MinorImageVersion;
          WORD    MajorSubsystemVersion;
          WORD    MinorSubsystemVersion;
          DWORD   Win32VersionValue;
          DWORD   SizeOfImage;
          DWORD   SizeOfHeaders;
          DWORD   CheckSum;
          WORD    Subsystem;
          WORD    DllCharacteristics;
          DWORD   SizeOfStackReserve;
          DWORD   SizeOfStackCommit;
          DWORD   SizeOfHeapReserve;
          DWORD   SizeOfHeapCommit;
          DWORD   LoaderFlags;
          DWORD   NumberOfRvaAndSizes;
       IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
  } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
  • Magic (Signature) : 0x010B - IMAGE_OPTIONAL_HEADER 구조체임을 나타냄 (64bit인 경우 0x020B)

알씨 9.22

  • MajorLinkerVersion & MinorLinkerVersion → 알씨 9.22는 0x02 / 0x19
  • SizeofCode :코드 영역의 크기(텍스트 section) → 알씨 9.22는 0x00764000 
  • SizeOfInitializedData & SizeOfUninitalizedData → 알씨 9.22는 0x003E6200 / 0x00000000
  • AddressOfEntryPoint : 프로그램이 메모리에서 실행되는 시작 지점→ 알씨 9.22는 0x00764E78 + imagebase
  • ImageBase : PE파일이 로딩되는 시작 주소 → 알씨 9.22는 0x00001000
  • SectionAlignment : 메모리 상에서 섹션의 최소 단위
  • FileAlignment : 파일 상에서 섹션의 최소 단위
  • SizeOfImage : PE파일이 메모리에 로딩되었을 때 가상메모리에서의 PE의 크기
  • SizeOFHeader : PE헤더 전체 크기
728x90
반응형

'Hacking > Window' 카테고리의 다른 글

[Mitigation] Window VS Linux  (0) 2024.11.27
MuseScore DoS Vulnerability Write Up  (2) 2024.07.18
[Fuzzing] WinAFL을 이용한 개념정리  (2) 2024.05.05
BitLocker  (0) 2024.02.06
SAM(Security Account Manager)  (1) 2024.02.03
'Hacking/Window' 카테고리의 다른 글
  • [Mitigation] Window VS Linux
  • MuseScore DoS Vulnerability Write Up
  • [Fuzzing] WinAFL을 이용한 개념정리
  • BitLocker
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OS
    AI
    Linux
    Tree
    WinAFL
    Web
    Graph
    DataStructure
    ComputerArchitecture
    Mac
    UTM
    DeepLearning
    Sort
    Search
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
PE(Portable Executable) file format
상단으로

티스토리툴바