ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [리버싱 핵심원리 study] 14장 실행 압축
    Reverse Engineering 2020. 12. 29. 00:36

    실행 압축(run-time packer)은 리버싱의 단골 주제로, 이를 이해하기 위해서는 PE file format과 운영체제의 기본적인 사항들에 대해 잘 알고 있어야 하며, 압축/해제 알고리즘에 대한 기본적인 내용에 대해서 알아야 한다.

     

    실행 압축이란, 말 그대로 실행(PE: Portable Executable) 파일을 대상으로 파일 내부에 압축해제 코드를 포함하고, 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행하는 기술이다. 일반적인 압축과는 다르게 실행이 가능하다는 특징이 있으며, 실행 압축을 통해 리버싱을 방해할 수도 있으며 코드 양이 더 늘어나는 경우도 있다.

     

    1. 패커(Packer)

    PE 패커(Packer)란 실행 파일 압축기를 말한다. 

     

    #1 사용 목적

    PE 파일의 크기 감소를 통해 네트워크 전송에도 용이하고 보관하기도 좋다. 또한 파일 내부의 코드와 리소스 등을 감출 수 있어 압축된 데이터는 알아보기 힘든 형태의 binary로 저장되어 내부 내용을 감춰준다.

     

    #2 사용 현황

    실행 압축은 DOS 시절부터 존재했다. 당시에는 PC 성능이 좋지 못해 파일이 실행될 때마다 수행되는 decoding routine 오버헤드가 컸지만, 요즈음은 PC 성능이 좋아 크게 영향을 받지 않아 많이 사용된다.

     

    #3 패커 종류

    패커에는 크게 두 종류가 있다. 평범한 PE 파일을 만들어 내는 순수한 의도의 패커와 PE 헤더를 심각하게 훼손시키는 불순한 의도의 패커로 나눌 수 있다.

     

    2. 프로텍터

    PE 프로텍터란 PE 파일을 리버싱으로 부터 보호하기 위한 유틸리티로, 일반적인 패커의 기능 이외에도 리버싱을 막기 위한 다양한 기법(Anti-Debugging, Anti-Emulating, Code obfuscating, Polymorphic Code, Garbage Code, Debugger Detection 등)이 추가된다. 이러한 프로텍터들로 압축된 PE 파일의 크기는 원본 PE보다 커지는 경향이 있으며 디버깅하기 매우 어렵다.

     

    #1 사용 목적

    크래킹 방지 & 코드 및 리소스 보호의 목적으로 이용된다.

     

    #2 사용 현황

    크래킹에 민감한 보안 프로그램들이 프로텍터를 많이 사용한다. 또한 백신에 감지되는 것을 회피하기 위해 악성 코드에도 많이 사용한다.

     

    #3 프로텍터 종류

    상용 프로그램(ASProtect, Themida, SVKP)과 공개용 프로그램(UltraProtect, Morphine)등이 있다.

     

    3. 실행 압축 테스트

    notepad.exe를 실행압축 해보자. 리버싱 핵심원리 서적에서는 UPX 패커를 이용하여 실습을 진행한다.

    UPX 패커

    위와 같이 UPX 폴더 내부에 디렉토리를 위치시키고 upx명령어를 입력하면 명령어와 옵션에 대한 정보가 나타난다. 다음과 같이 명령어를 입력하여 실행 압축을 해본다.

     

    upx 압축 실행
    upx 압축 결과

    위와 같이 실행압축한 notepad_upx.exe 파일은 크기가 줄어든 것을 확인할 수 있다.

     

    PEVIEW를 통해 notepad_upx.exe 파일의 구조가 어떻게 변화했는지 확인해보자.

    PEView

    위에서 주목할 부분은 UPX0 헤더의 Size Of Raw Data의 값은 0인데 Virtual Size는 10000이 된다. 압축된 코드를 첫 번째 섹션에 풀게 되면서 해당 Virtual Size 만큼의 코드를 메모리에서 차지하게 되는 것이고, 압축해제 코드와 압축된 내용은 두 번째 섹션에 존재한다. 파일이 실행되면 decoding routine을 거쳐 원본 코드를 첫 번째 섹션에 해제한 후, 원본 EP 코드를 실행한다.

     

     

     

    반응형

    댓글

Designed by Tistory.