리버싱 엔지니어링/리버싱 핵심 원리
14 실행 압축
흰싸라기
2022. 3. 25. 00:00
데이터 압축
- 파일(또는 데이터)는 내부가 바이너리(0 또는 1)로 되어있어 이를 적절한 압축 알고리즘을 사용해 크기를 줄일 수 있다.
비손실 압축
: 비손실 압축(Lossless Data), 압축된 파일을 100% 원래대로 복원할 수 있음
- 파일(데이터) 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적으로 사용됨.
- 파일 사용 시 해당 압축을 해제하여 사용
- 데이터의 무결성이 보장되어야함
- 데이터의 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것 → 데이터가 변하지 않고 유지되어야한다.
- ex) 7-zip, 빵집 과 같은 압축 프로그램
- 대표적인 비손실 압축 알고리즘 : Run-Length, Lempel-Ziv, Huffman (추가 조사 필요)
- ZIP, RAR 등의 압축 파일 포맷의 근본 압축 개념 (추가로 자신들만의 노하우를 적용)
손실 압축
: 손실 압축(Loss Data), 원래대로 복원할 수 없음
- 의도적인 손상을 주어서 그 댓가로 압축률을 높이는 목적
- ex) 멀티미디어 파일(jpg, mp3, mp4)
- 사람의 눈과 귀가 거의 알아차리지 못하는 수준에서 데이터에 손상을 입힘
- mp3의 핵심 알고리즘 : 사람의 가청 주파수 범위(20~20,000Hz)를 벗어나는 영역을 의도적으로 제거
실행 압축
: 실행 파일(PE)을 대상으로, 파일 내부에 압축해제 코드를 포함하여 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행시키는 기술.
일반 압축과 실행 압축 비교
항목 | 일반 압축 | 실행 압축 |
대상 파일 | 모든 파일 | PE 파일(exe, dll, sys) |
압축 결과물 | 압축(zip, rar) 파일 | PE 파일(exe, dll, sys) |
압축해제 방식 | 전용 압축해제 프로그램 사용 | 내부의 decoding 루틴 |
파일 실행 여부 | 자체 실행 불가 | 자체 실행 가능 |
장점 | 모든 파일에 대해 높은 압축률로 압축 가능 | 별도의 해제 프로그램 없이 바로 실행 가능 |
- 실행 압축은 자체 실행이 가능한 것이 특징
- 일반 PE 파일을 실행 압축 파일로 만들어주는 유틸리티 → 패커
패커(Packer)
: 실행 파일 압축기, 정확한 명칭은 Run-Time 패커로 PE 파일 전문 압축기
① 사용목적
- PE 파일의 크기를 줄이는 목적
- PE 파일의 내부 코드와 리소스를 감추기 위한 목적
- 압축된 데이터는 알아 보기 힘든 형태의 바이너리로 저장되기 때문에 내부 코드와 리소스(문자열, API name string)를 감춰주는 효과
② 사용 현황
- 패치파일, 일반 프로그램 등에 널리 사용됨
③ 패커 종류
- 평범한 PE 파일을 만들어 내는 패커와 원본 파일을 크게 변형하고, PE 헤더를 심하게 훼손시키는 불순한 의도의 패커로 나눌 수 있음
- 불순한 의도의 패커는 악성프로그램에서 사용됨
- ex) Virus, Trojan, Worm 등
프로텍터
: PE 파일을 리버싱으로 부터 보호하기 위한 유틸리티
- 일반적인 패커처럼 실행 압축을 해주는 것만이 아니라 리버싱을 막기위한 다양한 기법이 추가됨
- 기법 : Anti-Debugging, Anti-Emulating, Code Obfuscating, Polymorphic Code, Garbage Code, Debugger Detection 등
- 원본 PE 파일보다 커지는 경향이 있음
- 디버깅하기 매우 어려움
① 사용목적
- 크래킹 방지
- 코드 및 리소스 보호
- 프로텍터는 파일이 실행되었을 때 프로세스 메모리를 보호하여 덤프를 뜨지 못하게 함
② 사용 현황
- 보안 프로그램
- 게임 보안 프로그램 → 게임 해킹툴
- 프로텍터를 지속적으로 바꾼다면 더 효과적
- 게임 보안 프로그램 → 게임 해킹툴
③ 프로텍터 종류
- 공개용 프로그램 : UltraProtect, Morphine 등
- 상용 프로그램 : ASProtect, Themida, SVKP 등
- 또는 전문적으로 악성 코드에서만 사용되는 프로그램도 존재
실행 압축 테스트
: PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소(RVA)와 파일 옵셋을 매핑
① cmd 창에서 upx 실행
- 작업 폴더로 이동 후 upx 입력

② notepad.exe 파일 실행 압축
- notepad.exe를 작업 폴더에 복사한 후 진행
- 명령어 upx -o notepad_upx.exe notepad.exe

③ 압축 확인 (64KB -> 48KB)

④ 일반 압축과 비교

- 일반적인 ZIP 압축보다 압축률이 떨어짐→ PE 파일이기 때문에 PE 헤더 및 압축해제 코드를 추가해야하기 때문