
MEW 11 SE 1.2 Packer로 패킹한 후 언패킹하여 보았다.
확인하여 보니 Entry Point가 첫 번째 Section이 아님을 알 수 있다.
디버깅을 하여 보면 아래에서 처음 시작하게 된다.
0047C526 >-E9 293CF8FF JMP unpacked.00400154
가 나오고 해당 영역으로 점프해서 확인하여 보면 패킹된 데이터를 복호화하는 함수들이 나타나게 된다.
00400154 BE 1CA04500 MOV ESI,unpacked.0045A01C
00400159 8BDE MOV EBX,ESI
0040015B AD LODS DWORD PTR DS:[ESI]
0040015C AD LODS DWORD PTR DS:[ESI]
0040015D 50 PUSH EAX
0040015E AD LODS DWORD PTR DS:[ESI]
0040015F 97 XCHG EAX,EDI
00400160 B2 80 MOV DL,80
00400162 A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00400163 B6 80 MOV DH,80
00400165 FF13 CALL DWORD PTR DS:[EBX]
00400167 ^73 F9 JNB SHORT unpacked.00400162
00400169 33C9 XOR ECX,ECX
0040016B FF13 CALL DWORD PTR DS:[EBX]
0040016D 73 16 JNB SHORT unpacked.00400185
........................... 생략 ...................................
004001F1 91 XCHG EAX,ECX
004001F2 40 INC EAX
004001F3 50 PUSH EAX
004001F4 55 PUSH EBP
004001F5 FF53 F4 CALL DWORD PTR DS:[EBX-C]
004001F8 AB STOS DWORD PTR ES:[EDI]
004001F9 85C0 TEST EAX,EAX
004001FB ^75 E5 JNZ SHORT unpacked.004001E2
004001FD C3 RETN004001FE 0000 ADD BYTE PTR DS:[EAX],AL
00400200 0000 ADD BYTE PTR DS:[EAX],AL
00400202 0000 ADD BYTE PTR DS:[EAX],AL
00400204 0000 ADD BYTE PTR DS:[EAX],AL
중간 복호화하는 데이터를 확인하여 보고 밑으로 더 내리다보면 결국에는 RETN이 나오게 된다.
해당 영역에 브레이크 포인트를 걸고 Run 한다.
잠시 후 브레이크가 걸리고 Step by로 RETN을 하면 OEP가 나오게 된다.

그러나 아직 Analyse Code가 이루어지지 않았다.
Analysis -> Remove analysis from module 메뉴를 이용하면 정상적인 코드 확인이 가능해진다.

OEP가 45834라는 것을 확인하였으니 IAT를 찾아야 한다.
Cntl + B 키를 이용하여 Serach for Binary를 이용하여 FF25를 검색한다.

Search를 통해 찾은 내용을 Dump 윈도우에서 Long->Address 타입으로 보게 되면 위와 같이 확인하기 쉽게 IAT를 볼 수 있다.
4486C4(끝주소) - 448104(시작주소) = 5C0(Size)

OllyDump나 ImpREC의 Dump 기능을 이용하여 일단 메모리에 로드된 데이터를 Dump하고 ImpREC 툴을 사용하여 IAT를 수정하고 Fix Dump하여 주면 정상적으로 Unpacking 완료이다.