20, 22~24강 요약: 리버싱 및 PE 구조
1. 프로그램 압축 및 데이터 압축 방식
데이터 압축의 분류
• 비손실 압축 (Lossless Compression)
압축 해제 시 원본 데이터와 100% 동일하게 복원되는 방식
모든 파일 형식에 적용 가능
• 손실 압축 (Lossy Compression)
데이터 일부를 제거하여 압축률을 높이는 방식
주로 영상, 음성 등 멀티미디어 파일에서 사용
• 실행 압축 (Executable Compression)
EXE, DLL 등 실행 파일을 대상으로 하는 압축 방식
파일 크기 감소 또는 내부 코드 보호 목적
2. 데이터 변환 과정
• 인코딩 (Encoding)
원본 데이터를 전송, 저장 등 특정 목적을 위해 다른 형태의 데이터로 변환하는 과정
• 디코딩 (Decoding)
변환된 데이터를 다시 원본 데이터 형태로 복원하는 과정
3. 패커(Packer)와 프로텍터(Protector)
PE 패커 (Run-Time Packer)
실행 파일 전용 압축기
특징
• 실행 파일 크기 감소 목적
• 실행 시 메모리에서 디코딩 루프(Unpacking) 수행
• 언패킹 후 실제 코드 실행
취약점
• 메모리 덤프를 통해 실제 실행 코드 추출 가능
메모리 덤프(Memory Dump)
• 메모리에 올라간 코드 및 데이터를 그대로 추출하는 기술
대표 패커
• UPX
• ASPACK
• Upack
프로텍터 (Protector)
리버싱 방해를 목적으로 설계된 보호 도구
특징
• Anti-Reversing 기법 적용
• 난독화 및 가상화 기술 사용
• 보호 기능 추가로 인해 파일 크기가 증가하는 경우 많음
대표 프로텍터
• Themida
• VMProtect (VMP)
4. OEP (Original Entry Point) 탐색
OEP
패킹된 실행 파일에서 실제 프로그램 실행이 시작되는 지점
패킹된 프로그램 분석 시
언패킹 루틴을 지나 실제 코드 시작 위치(OEP) 탐색 필요
주요 명령어
PUSHAD (HEX 60)
• EAX부터 EDI까지 모든 범용 레지스터 값을 스택에 저장
POPAD (HEX 61)
• 스택에 저장된 레지스터 값을 다시 복원
특징
• PUSHAD → 언패킹 루틴 실행 → POPAD → 실제 코드 실행
• PUSHAD와 POPAD 사이 구간 분석을 통해 OEP 탐색 가능
5. PE 재배치 (Relocation)
개념
PE 파일이 프로세스 가상 메모리에 로드될 때
기본 ImageBase 주소에 다른 모듈이 이미 존재할 경우
비어있는 다른 주소로 프로그램을 재배치하는 과정
적용 대상
• DLL
• SYS
• ASLR 적용 EXE
PE 재배치 동작 원리
- 프로그램 내 하드코딩된 주소 위치 탐색
- 해당 주소 값에서 ImageBase 값 차감 (Offset 계산)
- 실제 로딩된 주소(Actual Base) 값 더하기
- 최종 주소 계산 후 실행
Base Relocation Table
재배치가 필요한 주소 정보를 저장하는 테이블
위치
IMAGE_NT_HEADERS
→ OPTIONAL_HEADER
→ DataDirectory[5]
(Base Relocation Table)
6. Relocation 제거
목적
Windows 10 이후 기본 적용되는 ASLR(Address Space Layout Randomization) 기능 무력화
EXE 파일 분석 시 재배치 제거 작업 수행
Hex Editor 수정 절차
- .reloc 섹션 데이터 제거
.reloc 섹션 데이터를 NULL로 채워 삭제 - .reloc 섹션 헤더 제거
섹션 헤더 영역을 NULL로 채움 - FILE HEADER 수정
NumberOfSections 값 감소 - OPTIONAL HEADER 수정
SizeOfImage 값에서 .reloc 섹션 크기 차감 - DllCharacteristics 수정
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 비트 제거
'2. Reversing (리버싱) > 2) 개념 정리' 카테고리의 다른 글
| [26.05.22] 개구리버싱 8주차 활동 (0) | 2026.05.22 |
|---|---|
| [26.05.08] 개구리버싱 6주차 활동 (0) | 2026.05.08 |
| [26.05.01] 개구리버싱 4주차 활동 (0) | 2026.05.01 |
| [26.04.10] 개구리버싱 3주차 활동 (0) | 2026.04.10 |
| [26.04.03] 개구리버싱 2주차 활동 (0) | 2026.04.03 |