Packer 와 Protector

column 2009/06/23 06:05

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 에 대한 깊은 지식이 요구됩니다.

 

Trackback Address :: http://www.reversecore.com/trackback/36 관련글 쓰기

  1. 2010/08/16 17:02 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/08/20 15:22 댓글주소 | 수정 | 삭제

      안녕하세요.

      PESpin 이요?
      예전에 악성 코드에 많이 사용되던 패커입니다.
      OEP 를 확인하시는 목적이시라면 크게 어렵지 않았던 걸로 기억합니다.
      파일을 찾아서 확인 후 다시 답변 달아드릴께요.

    • reversecore 2010/08/25 13:49 댓글주소 | 수정 | 삭제

      PESpin 1.32 버전으로 간단히 테스트 (default option) 하였습니다. (XP SP3)

      그리고 OllyDbg 는 기본 상태에서 Exceptions 옵션만 전부 체크 하였습니다.

      PESpin 은 크게 대단한 Anti-Debugging 기법은 존재하지 않습니다. (물론 OEP 까지 tracing 이 쉽지는 않습니다.) 다만 소위 '코드 깨기' 기법을 이용하여 OllyDbg 에서 제대로 파싱되지 않도록 코드 사이 사이에 쓰레기 코드를 삽입한 후 JMP 명령어로 마구 뛰어다니면서 언패킹을 진행합니다.

      또한 Stolen bytes 기법을 이용해서 원본 EP 코드 (OEP 코드) 의 일부를 패커 코드 영역으로 가져와서 실행시킵니다. (원본 코드는 NULL 로 밀어버리죠.) 마지막에 JMP 명령으로 원본 코드쪽으로 넘어갑니다.

      OEP 코드로 가는 간단한 방법은... (댓글로 설명드리기는 좀 쉽지 않네요. ^^)

      PESpin 의 초기 PUSHAD 명령어 이후 스택에 HW BP 를 설치합니다.
      이 방법은 http://www.reversecore.com/35 이 글에 소개되어 있으니 참고하시면 되겠습니다.

      그후 실행하면 "예외" 가 발생하는 경우가 있습니다. Anti-Debugging 기법인데요... Shift+F9 명령으로 계속 실행합니다.

      결국 HW BP 설치한 곳에서 멈춰집니다. 이때 코드가 깨져 보일것입니다.
      마우스 우측 메뉴의 Analysis-Analyse Code (혹은 Analysis-Remove Analysis from module) 을 실행하시면 됩니다. 여기에서 조금만 더 tracing 해 나가면 OEP 의 Stolen bytes 들이 나타나고 결국 원본 EP 쪽으로 갑니다.

      문제는 PESpin 의 "Debug Blocker" 옵션인데요...
      자신을 Debug 모드로 실행해버리는 기법입니다.
      즉, 아래와 같습니다.
      PESpin.exe
      -PESpin.exe (Debuggee 프로세스)

      이 경우도 경험이 좀 있으시다면 크게 어렵지는 않지만...
      초보자의 경우 많이 힘들어 하실 수 있습니다...

      댓글만으로는 설명이 너무 힘드네요... 그림도 필요하고... 추가 설명도 많구요...
      이부분은 제가 향후에 블로그(또는 책)에 PESpin 분석 과정에 대한 설명을 올리도록 하겠습니다.

      감사합니다.

    • reversecore 2010/08/24 22:32 댓글주소 | 수정 | 삭제

      이건 제가 궁금한 내용인데요...

      직장에서 리버싱을 하신다고 말씀하셨는데요...

      혹시 어떤 일을 하시는지 알려주실 수 있나요?

    • Elephunk 2010/08/26 13:44 댓글주소 | 수정 | 삭제

      pespin은 reversecore 님이 잘 설명해 주셨는데요

      그 외에도 code redirect,code replace,간단한 anti dump 트릭등이 적용이되어 있습니다

      그리고 Debugger Blocker 가 적용이 되어 있다면
      Nanomite 역시 해결해야될 문제입니다

      언팩경험이 풍부하다고 해도 까다롭니다

    • reversecore 2010/08/28 00:26 댓글주소 | 수정 | 삭제

      Elephunk님, 안녕하세요.

      Nanomite 란게 뭘까하고 검색을 해봤네요. ^^

      unpack 프로그램을 만들자면 매우 어려운 작업입니다.
      하지만 일반적인 리버싱에서 OEP 로 가는 것은 충분히 할 수 있지요.

      실전 리버싱 실습예제 중의 하나로 PESpin 을 계획 중입니다. 저 또한 다른 분들의 방법이 매우 궁금하답니다.

      uniquej 님 덕분에 좋은 예제를 찾은 셈이지요.

      감사합니다.

  2. 낭만고양이 2011/09/22 21:24 댓글주소 | 수정 | 삭제 | 댓글

    reversecore님 안녕하세요.
    좋은 방법 감사합니다.
    yoda's protector에 대한 자료을 게시해주세요.
    감사합니다.

    • reversecore 2011/09/28 21:02 댓글주소 | 수정 | 삭제

      안녕하세요.

      책을 잘 마무리한 후에 블로그 활동을 재개할 예정인데요... 그때 간단한 protector 언팩을 다뤄볼까 합니다.

      * yoda 는 쉽지 않습니다. ^^~

      감사합니다.

  3. 낭만고양이 2011/09/29 22:30 댓글주소 | 수정 | 삭제 | 댓글

    reversecore님
    안녕하세요.
    댓글 감사합니다.
    센 protector 가 무엇인지 알고계시는지요
    궁금중에 사로 잡혀 물어보는겁니다.


◀ PREV : [1] : ... [54] : [55] : [56] : [57] : [58] : [59] : [60] : [61] : [62] : ... [91] : NEXT ▶