PEcompact ver.2.78a ~ 3.11.00 Manual unpacking

Posted by nopsled
2015.01.26 14:13 분석생활

해당 바이너리는 PEcompact ver.2.78a ~ 3.11.00로 패킹되어 있지만 언패커가 없는 상황

   

그러므로 어쩔 수 없이 매뉴얼 언팩을 시도.

   

오늘도 어김없이 OEP를 찾아 떠난다.

   

   

올리디버거로 열어보면 다음과 같은 주소에서 시작이 되는데 계속 진행시켜준다.

   

ZwContinue가 나오면 F7을 눌러서 진행합니다. (정확하진 않지만 루트킷 방식이라 생각됨. SYSENTER가 나오는 것으로 보아 SSDT Hooking)

   

FastSystemCall이 나오는데 F7로 다시 한번 더 실행

   

SYSENTER가 나오는데 F8로 진행합니다.

   

진행하면 PUSHAD대신 PUSH EBP, EBX, ECX, EDI, ESI, EDX를 이용하여 레지스터 값들을 저장시키는 것을 볼 수 있습니다.

   

F8을 눌러서 계속 진행합니다.

   

VirtualAlloc을 이용해서 메모리 할당해주고..

   

더 진행하다보면 POP EDX, ESI, EDI, ECX, EBX, EBP하고 EAX값으로 JMP시키는 것을 볼 수 있습니다.

   

저기까지 쭉 진행.

   

진행하면 EAX의 주소로 JMP하게 됩니다.

EAX : 0040AB87, Entry : 00400000이니 OEP는 AB87이네요.

   

이제 F7을 눌러서 진행시키고 Ctrl+A를 눌러서 코드재정렬 해줍니다.

   

언팩끝.

   

이제 덤프뜨고 IAT 다시 맞춰주면 끝.

   

   

OEP자동으로 찾아주니 IAT AutoSearch

   

Get Imports로 IAT불러주고

   

덤프떠진 파일 선택해서 제대로 IAT 맞춰준다.

   

경고문 하나 떠주니.. 수동으로 IAT 고쳐줘야겠다.

   

제대로 되어있으니 언팩 다 됬네

   

이제 헥스레이로 열어보면

   

VMProtect 시X!