Packer 와 Protector 의 차이점과 각각의 사용 예에 대해서 설명하도록 하겠습니다.
리버싱 관점에서 Packer 와 Protector 의 접근방법에 대해서도 같이 짚고 넘어가겠습니다.
Packer
Packer란 이전 글에 소개했던 실행압축기를 말합니다.
정확한 명칭은 Run-Time Packer 로써 PE 파일 전문 압축기 입니다.
#1. 사용목적
- PE 파일의 크기를 줄이고자 하는 목적
인터넷이 발달한 요즘 시대에 파일의 크기가 작다는 것은 큰 장점 중에 하나입니다.
-참고-
실행 압축 (Run-Time Packer) 에 관하여
UPX 실행 압축된 notepad 디버깅!
- PE 파일의 내부 코드와 리소스를 감추기 위한 목적
Packer를 사용하는 또 다른 이유가 바로 PE 파일 내부의 코드와 리소스(문자열, API name string) 등을 감출 수 있기 때문입니다.
압축된 데이타는 알 수 없는 형태의 바이너리로 저장되기 때문에 파일 그 자체로 놓고 보면 내부 코드와 리소스를 감춰주는 효과가 있습니다. (물론 압축이 해제된 메모리의 덤프를 뜨면 볼 수 있습니다.)
* 이 목적을 극대화 시킨 개념이 아래에 설명드릴 Protector 입니다.
#2. 사용현황
실행압축의 개념은 DOS 시절부터 존재하였습니다. 하지만 그때는 잘 쓰여지지는 않았는데요.
그 이유는 당시 PC 속도가 별로 빠르지 못했기 때문에 파일이 실행될 때마다 압축을 해제시키는 과정이 큰 오버헤드로 작용하였습니다.
하지만 현재 PC 속도는 엄청나게 빨라져서 실행 압축된 파일이나 원본 파일이나 사용자는 실행 시간차이를 느낄 수 없게 되었습니다.
그래서 최근 들어 실행압축은 유틸리티, 패치파일, 일반 프로그램 등에 널리 사용되고 있습니다.
#3. Packer 종류
유명한 Packer 들을 소개해 드리겠습니다.
크게 두 가지 종류로 나눌 수 있습니다.
평범한 PE 파일을 만들어 내는 순수한 의도의 Packer 와 원본 파일을 크게 변형하고 PE 헤더를 심하게 훼손 시키는 약간 불순한 의도의 Packer 로 나눌 수 있습니다.
여기서 말하는 불순한 의도의 Packer 는 전문적으로 악.성.코.드. 에서 사용됩니다.
여기서 순수/불순의 분류 기준은 제 경험과 VirusTotal 의 진단 결과에 의해서 분류하였습니다.
- 순수한 의도의 Packer (VirusTotal 에서 진단 안됨)
UPX, ASPack, etc
- 불순한 의도의 Packer (VirusTotal 에서 진단됨)
UPack, PESpin, NSAnti, etc
Protector
PE Protector 란 PE 파일을 “Reverse Code Engineering” 으로 부터 보호하기 위한 유틸리티 입니다.
즉, 단순히 일반적인 Packer 와 같이 실행 압축을 시켜주는 것 뿐만 아니라 리버싱을 막기 위한 다양한 기법들(Anti-Debugging, Anti-Emulating, Code Obfuscating, Polymorphic Code, Garbage Code, Debugger Detection, etc)이 추가 됩니다.
이러한 Protector 들로 압축된 PE 파일들의 크기는 오히려 원본 PE 파일보다 커지는 경향이 있습니다.
하지만 디버깅하기 매우 어렵습니다. (디버깅이 어려운 것이지 불가능하지는 않습니다.)
Protector 를 상세 분석 하기 위해서는 많은 리버싱 경험이 요구됩니다.
물론 인터넷에는 온갖 편법을 이용해서 Protector 를 해제하는 방법이 많이 공개되어 있기 때문에 운이 좋으면 초보자도 원본 파일의 OEP 로 갈 수 있습니다만, 항상 그런 것은 아니지요.
#1. 사용목적
- 크래킹(Cracking) 방지
자신이 만든 프로그램이 크랙 되어 불법적으로 사용되는 걸 좋아할 사람은 없겠죠?
그런 경우 Protector 를 이용해서 PE 파일을 보호하면 꽤 도움이 됩니다.
- 코드 및 리소스 보호
Protector 는 PE 파일 자체를 보호하며 또한 파일이 실행되었을 때 프로세스 메모리를 보호하여 덤프를 뜨지 못하게 합니다. 따라서 비교적 안전하게 자신의 코드와 리소스를 보호할 수 있습니다.
#2. 사용현황
특히 크래킹에 민감한 보안 프로그램들이 이런 Protector 를 많이 사용합니다.
예를 들어 온라인 게임을 설치하면 자동으로 같이 설치되는 보안 프로그램들이 있습니다.
게임 보안 프로그램은 소위 “게임핵” 의 실행을 방지 합니다.
악의적인 게임 크래커들은 이러한 보안 프로그램을 어떻게든지 크랙하려고 시도합니다.
(크랙이 성공하면 “게임핵” 을 이용하여 금전적인 이익을 얻을 수 있기 때문입니다.)
따라서 보안 프로그램들은 크랙 방지를 위해서 Protector 를 사용하여 자신을 보호합니다.
(Protector 를 지속적으로 바꿔주면 게임 크래커 들이 짜증 좀 나겠죠?)
그리고 일반적인 악성코드(Trojan, Worm)에서 많이 사용합니다.
어떻게든 AV 제품의 진단을 막기 (혹은 늦추기) 위해서 Protector 를 사용하지요.
일부 Protector 는 “다형성 코드”를 제공하기 때문에 매번 다른 모양(하지만 같은 기능)의 코드가 생성되므로 AV 제품에서 진단하기 까다로워 집니다.
#3. Protector 종류
공개용 프로그램과 상용 프로그램이 있습니다.
또한 전문적으로 악성코드에서만 사용되는 Protector 들도 있습니다.
- 상용 Protector
ASProtect, Themida, SVKP, etc
- 공개용 Protector
UltraProtect, Morphine, etc
+---+
리버싱에서 Packer 와 Protector 는 매우 중요합니다.
원본 PE 파일의 OEP 까지 가야 분석을 시작할 수 있기 때문에 이와 같은 Packer 와 Protector 들에 대하여 잘 알고 있어야 합니다.
또한 Packer 와 Protector 자체만 분석해도 전반적인 리버싱 지식이 크게 향상됩니다.
특히 Protector 에서 사용되는 Anti-Debugging 기법들은 수준이 매우 높기 때문에 CPU 와 OS 에 대한 깊은 지식이 요구됩니다.
'column' 카테고리의 다른 글
| 책소개 (82) | 2010/09/06 |
|---|---|
| 리버서의 연륜을 말해주는 Opcode Manual (23) | 2010/08/31 |
| 리버싱의 참 맛 (18) | 2009/12/04 |
| UPack 의 추억 (8) | 2009/09/21 |
| DDoS 사이버 테러의 3대 의혹 (누가? 왜? 어떻게?) (8) | 2009/07/10 |
| 창의성과 경험 (바둑과 장기, 프로그래밍과 리버싱) (22) | 2009/06/29 |
| Packer 와 Protector (9) | 2009/06/23 |
| 악의적인 목적으로 사용되는 키로거 (KeyLogger) (13) | 2009/05/21 |
| 좋은 분석 도구(tool)를 선택하는 5 가지 기준 (5) | 2009/03/18 |
| Reverse Code Engineering (2) (14) | 2009/02/28 |
| Reverse Code Engineering (1) (18) | 2009/02/25 |
