Unpack PECompact 2.x

안녕하세요 오늘은 언팩에 대해 정리를 해볼까합니다.

 
 


여기는 제 개인적인 기술 학습 및 정리용으로 사용되므로, 자세한 설명이 생략될 수 있습니다.

 
 

추가 문의는 댓글을 달거나, 다른 사이트에서 확인하시기 바랍니다.


언팩의 주요 목적은, 프로그램의 코드를 숨기기 위해, 압축해놓은 파일 내용을 압축 전 상태로 되돌려, EP(Entry Point)를 찾는 작업입니다.

 
 

보통 언팩을 OEP(Origral Entry Point)라고 하는데, 이러한 이유는 언팩이 되기전 EP와 실행 위치를 압축한 EP가 달라, 압축을 해제한후, 원래EP(OEP)에서

 
 

실행할수 있도록 프로그램을 새로 생성한다고 생각 하시면 됩니다.

 
 

이를 위해서는 PE 구조를 사전에 알고 있으면 도움이 됩니다.(여기서 따로 정리하지는 않을것 입니다.)

 
 

추가로, OEP를 찾게 되었을때 추가로 확인해야 하는것이, Import API인데, 이는 외부에서 불러드리는 API도 추가로 팩커(Packer)가 감추는 경우가 많이 발생하기때문에 OEP를 찾은 이후에 Import API가 맞는지 추가로 확인을 해볼 필요가 있습니다.

 
 

그럼 간단한 예제를 통해 진행해 보도록 하겠습니다.

 
 

* 보통 언패킹시 패커를 거론하는 이유는 패커별로 언패킹하는 방식이 다르며, 수동으로 언패킹을 하기 위해서는 해당 패커의 안티디버깅 기술 우회를 설정한 이후, 전 압축 해제 과정을 트래이싱 하여, 발견하는것이 정상이지만, 이는 광장히 많은 시간이 필요할수 있으므로, 일반적인 패커별 언패킹 방법론을 통해

빠르게 패킹된 프로그램을 해제할수 있습니다.

 
 

PECompact 2.x

이 언패커는 다음 방법을 통해 언패킹 방식으로 패킹을 해제 할수 있습니다.

1. JMP EAX 감시

이 방식은 PECompact의 특징으로 초기 실행시 OEP를 저장하는 EAX에서 특정 주소에 저장하도록 설계되어 있습니다.


 
 

이를 이용하여, 해당 주소에 브레이크 포인트(BP)를 설정한 이후 Stepover(F8)로 진행시 EAX의 변경내용을 보시다 보면 더이상 EAX가 변경되지 않는데, 그 주소가 JMP EAX로 들어가며,  바로 OEP가 됩니다.


 
 

 
 

그 JMP EAX는 해당 주소는 BP를 설정한 부분에서 스크롤을 내릴경우 확인하실수 있으면 해당 지점에 추가로 BP를 설정 하신후 실행하시면 OEP로 바로 가실수 있습니다.


 
 

2. 초기 ESP 추적

 이 방법은 이 패커뿐만이 아니라 보편적으로 사용할수 있는 방식으로, 대다수 패커는 압축을 해제하기 전에 온전한 OEP 주소 저장한후, 압축이 풀린 이후에 다시 해당 주소를 불러들이게 됩니다.  이때 실행 초기 ESP주소(현재스택포인트)를 이용하게 되는데, 이 원리를 역이용하여, OEP를 찾는 방식 입니다.

 

Ollydbg로 패킹된 프로그램을 실행하면 아래와 같이 나타나게 됩니다. 여기서 F8(Step Over)를 1~2번 진행하다보면, ESP가 변경되는 것(빨간색)을 확인하실수 있습니다.

 

 

이때의 주소를 마우스 오른쪽 버튼을 통해, Follow in Dump를 통해, 해당 주소로 쉽게 이동하실수 있습니다. 아니면 Dump 창에서 Ctrl+G를 입력하여

해당주소로 수동이동하셔도 됩니다.


 

이동하신이후 해당 블럭 4바이트에 하드웨어 브레이크 포인트를 지정합니다, 하드웨어 브레이크 포인터는, 일반적인 브레이크 포인트로 조정할수 없는 부분들을 설정할수 있습니다.(일반적으로 해당 주소의 내용을 엑세스, 실행 때 동작을 멈추고 싶은 특수 상황에 사용합니다. 4개로 제한됨) 

 

그리고 F9키를 통해 3~4번 실행을 하면, JMP EAX를 만나실수 있습니다. 이는 대다수 패커들이 압축을 해제한 이후에는 JMP****로 OEP로 보내기 때문에 JMP 구문을 유심히 살펴 보시면 됩니다. 그리고 JMP 구분이 나왔을때, (혹 CALL) F7키를 통해 찾던 EOP가 맞는지 확인하시면 됩니다. 🙂

 

이렇게 찾은 OEP를 Dump를 생성하고, IAT이 정상적인지 확인 및 수정후 언패킹된 상태로 디버깅을 진행하시면 됩니다.

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.