나만의 메모노트

[리버싱 핵심원리] PE File Format (2) 본문

Security/Reversing

[리버싱 핵심원리] PE File Format (2)

sp3arm4n 2021. 8. 1. 02:10

notepad.exe를 대상으로 Hex editor를 통해 바이너리 코드를 살펴보며 PE File Format 이해하기

notepad.exe 바이너리

Dos Header

  • 초기 PE File Format
    • Microsoft가 널리 사용되던 DOS 파일에 대한 하위 호환성을 고려하여 제작
    • PE Header의 첫 부분은 DOS EXE Header, 이후 IMAGE_DOS_HEADER 구조체로 확장
  • IMAGE_DOS_HEADER 구조체
    • 크기 : 40h (64byte)
    • 주요 멤버
      • e_magic : DOS signature (4D5A 👉 ASCll값으로 "MZ"를 의미함)
      • e_lfanew : NT Header의 offset을 표시
        • NT Header 구조체의 위치를 가리킴
        • 파일에 따라 가변적인 값을 가짐

IMAGE_DOS_HEADER 구조체
notepad.exe DOS Header

Dos Stub

  • Dos Header 아래에 위치
  • Dos Stub의 존재 여부는 옵션이며 크기는 일정하지 않음
    • Dos Stub이 없어도 파일 실행에 문제 없음
  • Dos Stub은 코드와 데이터의 혼합으로 이루어져 있음
  • File offset 40 ~ 4D 영역은 16bit 어셈블리 명령어
    • 32bit Windows OS에선 PE 파일로 인식되어 해당 명령어가 실행되지 않음
    • notepad.exe 파일을 DOS 환경에서 실행하거나, DOS용 디버거를 이용해서 실행하면 해당 코드를 실행시킬 수 있음
      • DOS EXE 파일로 인식

notepad.exe DOS Stub