본문 바로가기

Security/RCE

(Manual Unpacking 02) UPack Unpacking

작업환경


Version
Host PCWindows 7
Guest PCWindows xp sp3
Debugging Toolollydbg
Import IAT ToolImport Restructor

OEP 찾기

01 모든 압축된 파일을 Unpacking을 하기 위해서는 OEP를 찾아야합니다.

<그림 1>

02 ollydbg로 packing된 notepad.exe를 실행 시키면 <그림 1>과 같은 에러가 뜨는데 이는 ollydbg가 자동으로 Entry Point를 찾지 못해서 일어나는 에러이므로 그냥 확인을 누르도록 합니다.

03 Entry Point 찾기
stud_PE라는 PE-View를 통해 해당 파일의 EntryPoint를 계산하면 [EntryPoint의 RVA + ImageBase] 이므로 결과 값은 0x1001018라는 주소 값이 나옵니다.

<그림 2>

04 이제 ollydbg를 통해 이 주소로 이동한 후 "New origin here" 를 사용하여 EIP의 값을 지금 찾은 Entry Point로 변경합니다.

<그림 3>

05 이동했다면 <그림 4>와 같은 명령어를 볼 수 있는데 이는 현재 ESI 부터 ESI+34 의 주소 값까지 디코딩이 진행되는 것을 확인할 수 있으며 이 [ESI+34]에 도달하게 되면 바로 다음이 디코딩 루프의 끝임을 추측할 수 있습니다.

<그림 4>

06 이제 [ESI+34]의 실제 주소를 계산하고 그 부분에 Hardware Breakpoint를 건 후에 실행하면 루틴의 끝까지 진행할 수 있습니다.

<그림 5>


07 <그림 6>을 확인해보면 예상대로 루틴의 끝에 도달함을 확인할 수 있으며 이 RETN 명령어를 따라가면 OEP가 나올 것이라 추측할 수 있습니다.

<그림 6>

OEP Dump

01 OEP를 찾았다면 <그림 7>과 같이 Dump를 뜨도록 하겠습니다.

<그림 7>


IAT Linking

01 <그림 8>과 같이 import REConstructor를 사용하여 UPX와 동일하게 Linking을 시켜주겠습니다.

<그림 8>

실행

01 unpacking된 notepad.exe를 실행해보면 잘됨을 확인할 수 있습니다.

<그림 9>


'Security > RCE' 카테고리의 다른 글

Solution_Lena 02  (0) 2013.11.30
Solution_Lena 01  (0) 2013.11.30
(이론 01) PE File Format  (0) 2013.08.14
(Manual Unpacking 01) UPX Unpacking  (0) 2013.08.14
(이론 02) EFLAGS  (0) 2013.08.13