14장 실행 압축
데이터 압축
어떤 형태의 파일(또는 데이터)이라도 내부는 바이너리로 되어있기 때문에 적절한 압축 알고리즘을 사용하여 크기를 줄일 수 있다.
비손실 압축
압축된 파일을 100%원래대로 복원할 수 있는 압축을 비손실 압축이라고 한다. 파일(데이터)의 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적으로 사용됨. 파일을 사용할 땐 해당 압축을 해제해서 사용한다.(이 과정에서 데이터의 무결성이 보장되어야함)
반디집과 같은 압축 프로그램을 이용해서 파일을 압축시키는 경우가 비손실 압축에 해당됨. 대표적인 비손실 압축 알고리즘은 Run-Length, Lempel-Ziv, Huffman 등이 있다. 대표적인 압축 파일 포맷인 .ZIP, .RAR 등도 근본적인 압축 개념은 결국 Run-Length, Lempel-Ziv, Huffman이며 추가로 자신들만의 독특한 노하우(압축률, 압축시간 등)를 적용한 것.
손실 압축
원래대로 복원할 수 없는 압축을 손실 압축이라고 한다. 파일(데이터)에 의도적인 손상을 주어서 압축률을 높이는 목적으로 사용됨. 주로 멀티미디어 파일들(jpg, mp3, mp4 등)이 손실 압축기법을 사용함. 손실 압축은 그 특성상 원본으로 되돌릴 수 없다. 원본과는 데이터적인 측면에서 차이가 발생하지만 사람이 차이를 구분할 수 없다. 예를 들어 mp3의 핵심 알고리즘은 사람의 가청 주파수 범위를 벗어나는 영역을 의도적으로 제거시켜 데이터의 크기를 줄인다.
실행 압축
실행 파일(PE)을 대상으로 파일 내부에 압축 해제 코드를 포함하고 있어 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행시키는 기술. 실행 압축된 파일 역시 PE파일이며 내부에 원본 PE파일과 decoding 루틴이 존재함. EP코드에 decoding 루틴이 실행되면서 메모리에서 압축을 해제시킨 후 실행됨.

위 두 압축의 가장 큰 차이점은 PE파일의 실행 여부이다. 실행 압축은 압축 파일이 그대로 PE파일이어서 자체적으로 실행이 가능하지만 일반 압축은 별도의 압축 해제 프로그램이 있어야지만 압축 파일을 실행할 수 있다.
패커(Packer)
일반 PE파일은 실행 압축 파일로 만들어 주는 유틸리티를 'Packer(패커)'라고 하고 좀 더 Anti-Reversing 기법에 특화된 패커를 'Protector(프로텍터)'라고 한다.
정확한 패커의 명칭은 'Run-Time 패커'로 PE 파일 전문 압축기이다.
1. 사용 목적
1-1. PE 파일의 크기를 줄이고자 하는 목적
파일의 크기가 작다는 것은 큰 장점중 하나이다. 네트워크로 전송하기도 편하고 보관하기도 좋다.
1-2. PE 파일이 내부 코드와 리소스를 감추기 위한 목적
패커를 사용하는 또 다른 이유는 PE파일 내부의 코드와 리소스(문자열, API, name string) 등을 감출 수 있기 때문. 압축된 데이터는 알아 보기 힘든 형태의 바이너리로 저장되기 때문에 파일 그 자체로 놓고 보면 내부 코드와 리소스를 감춰주는 효과가 있다.(압축이 해제된 메모리의 덤프를 뜨면 볼 수 있다.)
2. 사용 현황
DOS시정부터 실행 압축의 개념은 존재함. 하지만 그때는 PC의 속도가 느려 파일이 실행될 때 마다 압축 해제 과정이 큰 오버헤드로 작용했기 때문. 하지만 최근 PC는 속도가 굉장히 빨라 실행 압축 파일이나 원본 파일이나 사용자가 차이를 느낄 수 없을 정도가 되어 유틸리티, 패치 파일, 일반 프로그램 등에 널리 사용됨.
3. 패커 종류
크게 두 가지로 나눌 수 있는데 평범한 PE 파일을 만드는 순수한 의도의 패커와 원본 파일을 크게 변형하고 PE 헤더를 훼손시키는 불순한 의도의 패커가 있다. 불순한 의도의 패커는 전문적으로 악성 프로그램(Virus, Trojan, Worm 등)에서 사용됨.

프로텍터(Protector)
PE 프로텍터랑 PE 파일을 리버싱으로부터 보호하기 위한 유틸리티임. 일반적인 패커처럼 단순히 실행 압축을 해주는 것 뿐만 아니라 리버싱을 막기 위한 다양한 기법(Anti-debugging, Anti-Emulating, Code Obfuscating, Polymorphic Code 등)이 추가된다. 이러한 프로텍터들로 압축된 PE 파일의 크기는 오히려 원본보다 커지는 경향이 있다. 그리고 당연히 디버깅하기 어렵다.
1. 사용 목적
1-1. 크래킹 방지
자신이 만든 프로그램이 크랙되어 불법적으로 사용되는 것을 막기 위해 프로텍터를 이용해 PE 파일을 보호함.
1-2. 코드 및 리소스 보호
PE 파일 자체를 보호하며 파일이 실행되었을 때 프로세스 메모리를 보호하여 덤프를 뜨지 못하게 하여 안전하게 코드와 리소스를 보호할 수 있다.
2. 사용 현황
크래킹에 민감한 보안 프로그램들이 프로텍터를 많이 사용함. 보안 프로그램은 크랙 방지를 위해 프로텍터를 사용해 자신을 보호함.
또한 일반적인 악성 코드(Trojan, Worm)에서 많이 사용함. AV 제품의 진단을 막기(혹은 늦추기)위해 프로텍터를 사용한다. 일부 프로텍터는 '다형성 코드'를 제공하기 때문에 매번 다른 모양(같은 기능)의 코드가 생성되므로 AV 제품에서 진단하기 까다로움.
3. 프로텍터 종류
공개용 프로그램과 상용 프로그램이 있다. 또한 전문적으로 악성 코드에서만 사용되는 프로텍트도 있음.

'Security > Reversing' 카테고리의 다른 글
| 정적분석과 동적분석 (0) | 2025.02.04 |
|---|---|
| 리버싱 핵심원리 15장 (0) | 2023.03.27 |
| 리버싱 핵심원리 13장(2) (0) | 2023.03.27 |
| 리버싱 핵심원리 13장(1) (0) | 2023.03.27 |
| 리버싱 핵심원리 10장 (0) | 2023.03.27 |