악성 코드 분석 - PE 파일 구조
악성코드 분석 학습정리 — Part 2
PE(Portable Executable) 파일 구조
Windows 실행 파일의 내부 구조를 이해해야 악성코드를 분석할 수 있습니다. PE 구조의 모든 것을 정리합니다.
Windows에서 실행되는 모든 파일(.exe, .dll, .sys)은 PE(Portable Executable) 포맷을 따릅니다. PE 구조는 악성코드 분석의 가장 기본이 되는 지식으로, 이 구조를 모르면 정적 분석 자체가 불가능합니다.
PE 파일 = 책(Book)으로 비유하면 이해하기 쉽습니다.
책의 앞표지에는 제목·저자·ISBN이 있고 (DOS Header), 목차 페이지에는 각 챕터 위치가 있고 (섹션 헤더), 실제 내용이 챕터별로 나뉘어 있습니다 (섹션들). Windows는 이 "목차"를 읽어 파일을 메모리에 올리는 방법을 알아냅니다.
Dropper 분석 핵심: Lab01-04.exe의 경우 .rsrc 섹션의 BIN/101/1033 리소스 안에 또 다른 실행파일(MZ 시그니처 시작)이 숨겨져 있었습니다. Resource Hacker 도구로 이를 추출할 수 있습니다.
| 필드명 | 위치 | 의미 및 분석 활용 |
|---|---|---|
| e_lfanew | DOS Header 0x3C | PE 헤더 시작 오프셋. HxD에서 이 값을 읽어 이후 오프셋 계산에 사용 (Ctrl+G로 이동) |
| Time Date Stamp | FILE_HEADER | 컴파일 시간. 위조 가능하므로 참고값으로만 활용 |
| Subsystem | e_lfanew + 0x5C | 02 00 = GUI, 03 00 = Console. HxD에서 직접 수정 가능 (실습에서 직접 바꿔봄) |
| 섹션 이름 | 각 Section Header | UPX0/UPX1 → 패킹됨 / .text/.data → 정상 파일 |
| 엔트로피 | pestudio에서 확인 | 7.0 이상이면 암호화·압축(패킹) 가능성 높음 |
엔트로피(Entropy)란?
데이터의 "무질서도"입니다. 일반 텍스트는 특정 문자가 반복되어 엔트로피가 낮고, 압축/암호화된 데이터는 모든 바이트가 랜덤하게 퍼져 엔트로피가 높습니다.
.text 섹션의 엔트로피가 7.0 이상이면 패킹 의심 — "이 책의 내용이 암호화되어 있구나"라고 생각하면 됩니다.
IAT는 프로그램이 외부 DLL에서 빌려 쓰는 함수 목록입니다. 실행하지 않고도 악성코드의 기능을 예측하는 가장 강력한 단서로, 분석자라면 IAT부터 확인하는 것이 기본입니다.
IAT = 요리 재료 목록으로 생각하면 됩니다.
레시피에 "마취제, 독극물, 수면제"가 재료로 적혀있다면, 요리를 해보지 않아도 "이 음식은 위험하다"는 걸 알 수 있죠? IAT에 CreateRemoteThread나 URLDownloadToFileA가 있다면, 실행 전에도 "이 파일은 원격 코드 실행이나 다운로드를 한다"고 예측할 수 있습니다.
KERNEL32.dll
ADVAPI32.dll
WININET.dll
WS2_32.dll
IAT 최소화 기법 주의: Lab03-01.exe는 IAT에 ExitProcess 하나만 명시되어 있었습니다. 나머지 함수는 실행 중 LoadLibrary + GetProcAddress로 동적 로드합니다. IAT가 거의 비어있다면 동적 분석으로 실제 API 호출을 관찰해야 합니다.
PE 구조 분석 핵심 원칙
- PE 파일 = Windows 실행 파일의 표준 포맷 (.exe, .dll, .sys 모두 해당)
- DOS Header → PE Signature → FILE_HEADER → OPTIONAL_HEADER → 섹션들 순서
- e_lfanew: PE 헤더 위치 알려주는 포인터 (HxD에서 0x3C 오프셋에 있음)
- 엔트로피 7.0 이상 = 패킹 의심 / 섹션명 UPX0,UPX1 = UPX 패킹 확정
- IAT = 함수 임포트 목록 = 악성코드 기능 예측의 최강 단서
- IAT가 너무 적으면 동적 로드 기법 → 동적 분석으로 보완 필요
'보안 공부' 카테고리의 다른 글
| 악성 코드 분석 - 기초 동적 분석 (0) | 2026.05.28 |
|---|---|
| 악성 코드 분석 - 기초 정적 분석 (0) | 2026.05.28 |
| 악성 코드 분석 - 악성 코드 분석 개요 (0) | 2026.05.28 |
| 서버 관리자가 실수하기 쉬운SSH 설정 5가지 알아보기 (0) | 2026.05.11 |
| 파일 업로드 취약점 (0) | 2026.05.11 |