작업환경
Version | |
Host PC | Windows 7 |
Guest PC | Windows xp sp3 |
Debugging Tool | ollydbg |
Import IAT Tool | Import 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 |