리버싱 - packing/unpacking

m0ng·2025년 6월 17일

개요

Packing은 실행 파일에 암호화, 압축, 인코딩 등의 기법을 적용하여 분석을 방해하는 기술입니다.
Unpacking은 이 보호 계층을 제거하고 원래 코드에 접근하는 과정입니다.


Packing의 목적

  • 악성 행위 은폐
  • 디지털 서명/시그니처 우회
  • 분석 지연 유도
  • 샌드박스/백신 탐지 회피

🔐 주요 Packing 기법

종류설명
압축 기반 (e.g. UPX)원시 코드를 압축 후 로더에서 압축 해제
암호화 기반본문을 암호화 후 실행 시 메모리에서 복호화
VM 기반코드를 가상 머신에서 실행 (VMProtect 등)
다단계 패킹여러 패커를 중첩 사용

🔎 Packed 파일 특징

  • .text 섹션에 실행 코드 없음
  • Entry Point가 .UPX0, .data 등 비정상 위치
  • Virtual SizeRaw Size가 맞지 않음
  • Import Table이 비어 있거나 짧음
  • Entropy(엔트로피) 값이 7 이상으로 비정상적으로 높음

도구: Detect It Easy (DIE), PEiD, Exeinfo PE


대표 패커 및 분석 예시

1️⃣ UPX Packed

  • upx -d <filename>으로 자동 해제 가능
  • 분석 툴: PEiD, x64dbg, Detect It Easy

2️⃣ Themida Packed

  • 강력한 보호 / anti-debugging 포함
  • 자동 해제 불가능 → 디버깅을 통한 수동 unpack 필요

🛠 Unpacking 실습 절차

🎯 목표: 원래 Entry Point(OEP)를 찾아 원본 복원

1. PE 구조 확인 → EntryPoint 주소 확인
2. 디버거(x64dbg)로 파일 실행
3. unpack 완료되는 지점에 Breakpoint 설정 (예: `VirtualAlloc`, `GetProcAddress`)
4. 메모리에 원래 코드 로드 후 OEP에서 `dump`
5. Import Table 복원 (Scylla, Import REConstructor 사용)

0개의 댓글