본문 바로가기
Reversing/리버싱 핵심 원리

[리버싱 핵심 원리] 14장, 실행 압축

by Y06 2020. 10. 31.

14장, 실행 압축

14.1_데이터 압축

데이터 압축 : 큰 용량을 작은 용량으로 적절한 압축 알고리즘을 사용하여 크기를 줄이는 것

- 데이터 손실 없이 100% 원래대로 복원할 수 있으면 비손실 압축, 원래대로 복원할 수 없다면 손실 압축이라고 한다.

 

1. 비손실 압축(Lossless Data Compression)

: 파일 크기를 줄여서 보관 및 이동에 용이하도록 하여는 목적으로 사용

- 7-zip, 빵집과 같은 압축 프로그램을 이용하여 파일을 압축하는 경우

- 대표적인 비손실 압축 알고리즘 : Run-Length, Lempel-Ziv, Huffman 등

- 많은 알고리즘이 있지만 적어놓은 3개의 알고리즘만 이해하면 나머지는 쉽게 이해가 가능함

- ZIP, RAR 등도 근본 압축 개념은 결국 Run-Length, Lemple-Ziv, Huffman이며, 추가로 자신들만의 특별한 노하우가 적용되어 있음

 

2. 손실 압축(Loss Data Compression)

: 파일에 의도적으로 손상을 주어서 그 대가로 압축률을 높이는 목적으로 사용

- 주로 멀티미디어 파일들(jpg, mp3, mp4)은 대부분 손실 압축기법 사용

- 특성상 원본으로 되돌릴 수 없음

- 사람의 눈과 귀가 거의 알아차리지 못하는 수준에서 데이터의 손상을 입음

- 예를 들면 mp3 파일에서는 사람의 가청 주파수 범위(20~20000Hz)를 벗어나는 영역을 의도적으로 제거시켜서 데이터의 크기를 줄임

 

14.2_실행 압축

: 실행 파일을 대상으로 파일 내부에 압축해제 코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행시키는 기술

 

- 실행 압축된 파일은 PE 파일이고, 내부에 원본 PE 파일과 decoding 루틴이 존재함

- EP(Entry Point) 코드 decoding 루틴이 실행되면서 메모리에서 압축을 해제시킨 후 실행됨

 

항목 일반 압축 실행 압축
대상 파일 모든 파일 PE 파일(exe, dll, sys)
압축 결과물 압축(zip, rar) 파일 PE 파일(exe, dll, sys)
압축 해제 방식 전용 압축해제 프로그램 사용 내부의 decoding 루틴
파일 실행 여부 자체 실행 불가 자체 실행 가능장점
장점 모든 파일에 대해 높은 압축율로 압축 가능 별도의 해제 프로그램 없이 바로 실행 가능
단점 전용 압축 프로그램이 없으면 해당 압축 파일을 사용할 수 없음 실행할 때마다 decoding 루틴이 호출되기 때문에 실핼시간이 아주 미세하게 느려짐

- 실행 압축이 일반 압축과 비교하여 두드러진 차이점: PE 파일의 실행 가능

- 일반 PE 파일을 실행 압축 파일로 만들어주는 유틸리티를 패커라 함

- 또한, 좀 더 Anti-Reversing 기법에 특화된 패커를 프로텍터라 함

 

1. 패커

:  PE 패커란 실행 파일 압축기

- 정확한 명칭은 Run-Time 패커로, PE 파일 전용 압축기

 

1) 사용 목적

(1) PE 파일의 크기를 줄이고자 하는 목적

- 큰 장점: 파일의 크기가 작다, 네트워크로 전송하기 좋고 보관하기에도 좋음

 

(2) PE 파일의 내부 코드와 리소스를 감추기 위한 목적

- 패커를 사용하는 또 다른 이유: PE 파일 내부의 코드와 리소스(문자열, API name string)등을 감출 수 있음

- 압축된 데이터는 알아보기 힘든 형태의 바이너리로 저장되기 때문에 파일 그 자체로 놓고 보면 내부 코드와 리소스를 감춰주는 효과

 

2) 사용 현황

- 실행 압축의 개념은 DOS 시절부터 존재

>> 당시 PC 속도가 빠르지 못하여 파일이 실행될 때마다 압축을 해제시키는 과정이 큰 오버헤드로 작용했기 때문에 쓰이지 않음

- 지금의 PC 속도는 빨라서 실행 압축된 파일이나 원본 파일이나 사용자는 실행 시간 파이를 느낄 수 없을 정도가 됨

- 최근 실행 압축은 유틸리티, 패치 파일, 일반 프로그램 등에 널리 사용

 

3) 패커 종류

(1) 평범한 PE 파일을 만들어 내는 순수한 의도의 패커

(2) 원본 파일을 크게 변형하고, PE 헤더를 심하게 훼손시키는 약간 불순한 의도의 패커

>> 여기서 말하는 불순한 의도의 패커는 전문적으로 악성 프로그램(Virus, Trojan, Worm 등)에서 사용

 

2. 프로텍터

: PE 프로텍터란 PE 파일을 'Reverse Code Engineering'으로부터 보호하기 위한 유틸리티

- 즉, 단순히 일반적인 패커처럼 실행 압축을 해주는 것만이 아니라 리버싱을 막기 위한 다양한 기법이 추가됨

- 프로텍터들로 인해 압축된 PE 파일들의 크기는 오히려 원본 PE 파일보다 커지는 경향이 있음

 

1) 사용목적

(1) 크래킹 방지

: 자신이 만든 프로그램이 크랙되어 불법으로 사용되는 것을 막기 위해서

 

(2) 코드 및 리소스 보호

: 프로텍터는 PE 파일 자체를 보호하며 또한 파일이 실행되었을 때 프로세스 메모리를 보호하며 덤프를 뜨지 못하게 함. 따라서 비교적 안전하게 자신의 코드와 리소스를 보호할 수 있음

 

2. 사용 현황

- 보안 프로그램들이 많이 사용함

EX) 온라인 게임을 설치하면 자동으로 같이 설치되는 보안 프로그램들이 있음. 게임 보안 프로그램은 게임 해킹 툴의 실행을 방지함. 악의적인 게임 크래커들은 이러한 보안 프로그램을 어떻게든지 크랙해서 게임핵을 만들어서 금전적인 이익을 취함 

>> 보안 프로그램들은 크랙 방지를 위해서 프로젝터를 사용하여 자신을 보호함

- 일반적인 악성코드(Trojan, Worm)에서도 많이 사용

- AV 제품의 진단을 막거나 늦추기 위해 프로젝터를 사용함

>> 일부 프로젝터는 다양한 코드를 제공하기 때문에 매번 다른 모양의 코드가 형성되므로 AV 제품에서 진단하기 까다로워짐

 

3. 프로젝터 종류

- 공개용 프로그램과 상용 프로그램이 있음. 전문적으로 악성코드에서만 사용되는 프로젝터들도 있음

 

14.3_실행 압축 테스트

14.3.1_notepad.exe와 notepad_upx.exe 파일 비교

- PE 헤더 크기는 동일함

- 섹션 이름 변경 ( .txt -> UPX0, .data -> UPX1 )

- 첫 번째 섹션의 RawDataSize = 0 (파일에서의 크기: 0)

- EP는 두 번째 섹션에 위치

- 리소스 섹션의 크기는 거의 변하지 않음