← 목록으로

PE 포맷 내부 구조: Windows 실행 파일 뜯어보기

[Rev] 리버싱 · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-20 03:11:15 · 조회 4

ELF를 다뤘던 것과 비슷하게, 윈도우 실행 파일(PE, Portable Executable) 리버싱을 시작하려면 이 포맷 구조부터 이해해야 한다. exe, dll, sys 전부 이 포맷을 쓴다.

전체 구조

DOS Header (MZ) → DOS Stub → PE Header (NT Headers) → Section Headers → Sections (.text, .data, .rdata, .rsrc, ...)

Import Table — 어떤 API를 쓰는지 알아내는 창

프로그램이 어떤 DLL의 어떤 함수를 쓰는지가 Import Table(보통 .rdata에 병합됨)에 다 나열되어 있다. 악성코드 분석에서 이 테이블을 제일 먼저 본다 — WinExec, VirtualAlloc, InternetOpenUrl 같은 함수가 임포트되어 있으면 뭘 하려는 프로그램인지 감이 온다.

# CLI로 Import Table 빠르게 확인
objdump -x binary.exe | grep "DLL Name"
# pefile(Python)로 스크립트화
import pefile
pe = pefile.PE('binary.exe')
for entry in pe.DIRECTORY_ENTRY_IMPORT:
    print(entry.dll, [imp.name for imp in entry.imports])

실전 도구

Import Table에 정상적이지 않은 조합(예: 일반 문서 뷰어인데 WinExec와 URLDownloadToFile을 같이 임포트)이 보이면 그 자체가 강한 악성 지표가 된다.

리버싱 카테고리의 글 (10/11)

  1. 리버싱이란 무엇인가: 정적 분석 기초
  2. 어셈블리어 읽기 기초 (x86-64)
  3. 동적 분석: 디버거로 실행 흐름 추적하기
  4. 안티 디버깅 / 안티 리버싱 기법과 우회
  5. 패킹과 언패킹: 실행 파일을 압축/암호화해서 숨기기
  6. Frida로 동적 계측/후킹하기
  7. 안드로이드 앱 리버싱: APK 분석 기초
  8. iOS 앱 리버싱 기초
  9. 크랙미(Crackme) 실습 방법론
  10. PE 포맷 내부 구조: Windows 실행 파일 뜯어보기
  11. 코드 난독화 해제: Control Flow Flattening 분석하기
← 크랙미(Crackme) 실습 방법론 코드 난독화 해제: Control Flow Flattening 분석하기 →