기초 악성 코드 분석 3
1. PE 파일
1.1 PE(Portable Executable) 파일이란?
- Windows 운영체제에서 실행 가능한 파일 형식
- .exe, .dll, .sys 등 다양한 확장자를 가짐
- Microsoft에서 정의한 실행 파일 구조로, 내부에 코드, 데이터, 리소스 등을 포함
1.2 주요 구조
- DOS Header (IMAGE_DOS_HEADER)
- 마지막 필드인 e_lfanew는 PE Header 위치 가리킴
- PE Header (IMAGE_NT_HEADERS)
- 두 부분으로 나뉨:
- File Header: 머신 타입, 섹션 수, 타임스탬프 등
- Optional Header: 실제로는 필수, 진입점 주소, 이미지 크기, 섹션 정렬 정보 등 포함
- Section Table (IMAGE_SECTION_HEADER)
- 코드(.text), 데이터(.data), 리소스(.rsrc) 등 실제 내용의 위치/크기 정보
- 각 섹션이 메모리와 파일에서 어떻게 배치될지를 정의
- 각 섹션 (Sections)
- .rsrc: 리소스 (아이콘, GUI, 문자열 등)
1.3 악성코드 분석 관점에서 왜 중요할까?
- 악성코드는 PE 구조를 조작하거나 위장하여 보안 시스템을 우회
- *진입점(EntryPoint)**을 바꾸거나, 섹션을 숨기거나 추가하여 악성 행위를 숨김
- Import Table을 분석하면 어떤 함수(API)를 사용하는지 확인 가능 → 악성 행위 추정 가능
- *Packers(압축기)**는 PE 구조를 난독화하여 분석을 어렵게 만듦
1.4 분석 도구 예시
- PE-bear, CFF Explorer, Detect It Easy(DIE): PE 구조 보기
2. Packer
2.1 Packer(패커)란?
- 실행 파일(PE 등)의 크기를 줄이거나 코드 분석을 어렵게 만들기 위해 파일을 압축/암호화하는 도구 또는 기법
2.2 패커의 목적
목적 | 설명 |
보호 | 지적 재산 보호, 리버싱 방지 |
압축 | 실행 파일 크기 축소 (배포 목적) |
은폐 | 악성코드의 탐지 회피, 정적 분석 방해 |
위장 | 정상 실행 파일처럼 보이게 위장 (안티바이러스 우회) |
2.3 패커 작동 방식
- 원본 코드(페이로드)를 압축/암호화
- *로더(Stub 또는 Shellcode)**를 추가
- 실행 시, 메모리에서 원본 코드 복호화 & 실행
- 결과적으로 분석자는 실제 악성 행위가 담긴 코드를 처음에는 볼 수 없음
2.4 악성코드 분석에서의 패커 특징
분석 시 흔히 나타나는 징후 | 설명 |
Entry Point가 .text가 아님 | 보통 .text 섹션 외부에 있음 |
난독화된 Import Table | API 호출 정보를 숨김 |
이상한 섹션 이름 | .upx, .petite, .aspack 등 패커 이름 사용 |
디버깅/가상환경 탐지 코드 포함 | 안티 분석 기능 |
2.5 대표적인 패커 종류
패커 이름 | 특징 |
UPX | 가장 흔하고 오픈소스 / 쉽게 언패킹 가능 |
Themida | 강력한 난독화와 안티 디버깅 기능 |
ASPack | 비교적 경량화 / 분석 저해 목적 사용 |
MPRESS | 고밀도 압축, 가벼움 |
2.6 패커 탐지 & 언패킹 도구
도구 | 기능 |
Detect It Easy (DIE) | 패커 탐지 및 분석 |
PEiD | 고전적인 패커 탐지 도구 |
UPX -d | UPX 언패킹 |
x64dbg, OllyDbg | 수동 언패킹 디버깅 |
UnpacMe, Any.Run | 온라인 동적 분석 환경 |