NOTICE

[Unpack] ASPack 2.12 -> Alexey Solodovnikov

Date : 2015.01.31 13:43 Category :


 ASPack 2.12 -> Alexey Solodovnikov로 실행 압축된 파일의 Unpacking 방법에 대해 알아보겠습니다. 이론적인 설명은 배재하고 압축 해제 방법만 간단히 소개하도록 하겠습니다. 분석에 사용한 샘플 파일과 분석 도구 정보는 다음과 같습니다.


 - 샘플 파일 정보

 파일 이름

 Program.exe

 파일 크기

 28,672 byte

 MD5

 5C69C21C7C1BA3F0256BEC6748B4CD22


 - 분석 Tool 정보

 파일 이름

파일 이름

OllyDBG.exe

 PEiD.exe

Import REC 1.7c.exe

 



1. 실행 압축 확인

 가장 먼저 해야 할 일은 샘플 파일의 실행 압축 여부를 확인하는 것입니다. PEiD.exe를 사용해 Program.exe 파일의 실행 압축을 확인해보면 [그림 1.1.]과 같습니다. ASPack으로 압축된 파일에는 .aspack 섹션이 존재하고 EP가 해당 섹션에 있습니다.


[그림 1.1.] 실행 압축 확인



2. 압축 해제하기

 Program.exe은 ASPack으로 실행 압축되어 있습니다. 이것을 OllyDBG.exe로 풀어보겠습니다. 해당 샘플을 디버거에 올리면 'PUSHAD' 코드를 확인 할 수 있습니다. 'PUSHAD'는 레지스터 정보를 스택에 저장하라는 명령어입니다.


[그림 2.1.] Program.exe 시작 코드


 여기서 잠시 ASPack의 특징을 살펴보겠습니다. ASPack은 'PUSHAD' - 압축해제 코드 - 'POPAD' - 'RETURN'(OEP로 이동)의 과정으로 동작합니다. 이런 점을 이용해서 가장 쉽게 압축 해재하는 방법은 'POPAP' 코드를 찾는 것입니다.

 코드를 쭉 내려가다 보면 [그림 2.2.]와 같이 'POPAD' 코드를 확인 할 수 있습니다. 여기에 BreakPoint를 걸어두고 실행(F9)하면 코드 압축 해제가 끝난 후 해당 주소에서 멈춥니다. 


[그림 2.2.] 'POPAP' 코드로 이동


 그리고 0x00427425 주소의 'RETN' 코드까지 실행하면 다음과 같이 OEP가 나옵니다.


[그림 2.3.] OPE 확인


 "Ctrl + A"를 사용해서 코드를 복원하면 OEP Code를 확인할 수 있습니다.


[그림 2.4.] OPE 코드 복원


 압축 해제가 완료되고 OEP를 찾았다면 Plugin을 사용해 덤프 파일을 생성합니다. 단 OllyDBG는 IAT를 완벽하게 복구하지 못하기 때문에 Rebuild Import 체크박스를 해제합니다.


[그림 2.5.] 덤프 파일 생성 준비

 

[그림 2.6.] 덤프 파일 생성


 IAT는  Import REC 1.7c.exe Tool을 사용해 복구하도록 합니다. 타깃 프로세스(압축 해제 중인 프로세스)를 선택하고 OEP를 입력한 뒤 Get Imports를 선택해 IAT 정보를 수집합니다.


[그림 2.7.] IAT 복구


 마지막으로 Fix Dump를 선택해 OllyDBG.exe로 만든 덤프 파일에 덮어쓰면 압축 해제 과정이 끝납니다.


[그림 2.8.] 파일 압축 해제 완료


 ASPack의 Manual Unpacking 과정을 확인하고 싶다면 아래 링크를 참고하시기 바랍니다.


ASPack Manual Unpacking 과정: http://lapislazull.tistory.com/81


 이상으로 '[Unpack] ASPack 2.12 -> Alexey Solodovnikov' 압축 해제 과정 포스트를 마치겠습니다.