본문 바로가기

2. Reversing (리버싱)/2) 개념 정리

[26.05.15] 개구리버싱 7주차 활동

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 재배치 동작 원리

  1. 프로그램 내 하드코딩된 주소 위치 탐색
  2. 해당 주소 값에서 ImageBase 값 차감 (Offset 계산)
  3. 실제 로딩된 주소(Actual Base) 값 더하기
  4. 최종 주소 계산 후 실행

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 수정 절차

  1. .reloc 섹션 데이터 제거
    .reloc 섹션 데이터를 NULL로 채워 삭제
  2. .reloc 섹션 헤더 제거
    섹션 헤더 영역을 NULL로 채움
  3. FILE HEADER 수정
    NumberOfSections 값 감소
  4. OPTIONAL HEADER 수정
    SizeOfImage 값에서 .reloc 섹션 크기 차감
  5. DllCharacteristics 수정
    IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 비트 제거