|
发表于 2009-11-3 15:06:19
|显示全部楼层
首先查壳,PECompact 1.68 - 1.84 -> Jeremy Collake
OD载入
方法一:单步法(忽略所有异常)
0040C000 P> /EB 06 jmp short PECompac.0040C008 //停在这,继续F8
0040C002 |68 CC100000 push 10CC
0040C007 |C3 retn
0040C008 \9C pushfd
0040C009 60 pushad
0040C00A E8 02000000 call PECompac.0040C011 //F7过
。。。。。。。。。。
0040D251 /0F84 9B000000 je PECompac.0040D2F2 //enter
。。。。。。。。。。
方法二:ESP定律(忽略所有异常)
0040C000 P> /EB 06 jmp short PECompac.0040C008 //停在这,继续F8
0040C002 |68 CC100000 push 10CC
0040C007 |C3 retn
0040C008 \9C pushfd
0040C009 60 pushad //ESP,突现,0012ffc0
0040C00A E8 02000000 call PECompac.0040C011
下命令行 hr 0012ffc0 回车,F9运行
0040D550 50 push eax //到这里了,继续F8(记得取消硬件断点^_^)
0040D551 68 CC104000 push PECompac.004010CC
0040D556 C2 0400 retn 4 //返回来到OEP
。。。。。。。。。。。。。。。
004010CC 55 push ebp 在这里dump就可以了
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
很容易就到了OEP了~~
方法三:模拟跟踪法
内存映射,项目 25
地址=0040C000
大小=00004000 (16384.)
宿主=PECompac 00400000
区段=.pec
包含=SFX
类型=Imag 01001002
访问=R
初始访问=RWE
---------------------------------------------------------------------------------
PECompact 2.5 Retail -> Jeremy Collake
设置Ollydbg忽略所有的异常选项。
od载入
01001000 N> B8 90BA0101 mov eax,NOTEPAD.0101BA90
01001005 50 push eax ; NOTEPAD.0101BA90
01001006 64:FF35 0000000>push dword ptr fs:[0]
0100100D 64:8925 0000000>mov dword ptr fs:[0],esp
01001014 33C0 xor eax,eax
01001016 8908 mov dword ptr ds:[eax],ecx
01001018 50 push eax
下断点:BP VirtualFree。中断后,取消断点,Alt+F9。
002F00C0 58 pop eax //返回到这
002F00C1 EB 03 jmp short 002F00C6
002F00C3 33C0 xor eax,eax
002F00C5 48 dec eax
002F00C6 5D pop ebp
002F00C7 5B pop ebx
然后,ctrl+F ,查找 push 8000(特征码)。
002F093E 03C7 add eax,edi
002F0940 68 00800000 push 8000 //这里
002F0945 6A 00 push 0
002F0947 FFB5 951C0010 push dword ptr ss:[ebp+10001C95]
002F094D FF10 call dword ptr ds:[eax]
002F094F 8B46 0C mov eax,dword ptr ds:[esi+C]
002F0952 03C7 add eax,edi
002F0954 5D pop ebp
002F0955 5E pop esi
002F0956 5F pop edi
002F0957 5B pop ebx
002F0958 C3 retn //此处f2 ,下断
F9 ,运行,此时断了。单步f8,来到
0101BB3D 8985 C8120010 mov dword ptr ss:[ebp+100012C8],eax ; NOTEPAD.0100739D
0101BB43 8BF0 mov esi,eax
0101BB45 59 pop ecx
0101BB46 5A pop edx
0101BB47 EB 0C jmp short NOTEPAD.0101BB55
0101BB49 03CA add ecx,edx
0101BB4B 68 00800000 push 8000
0101BB50 6A 00 push 0
0101BB52 57 push edi
0101BB53 FF11 call dword ptr ds:[ecx]
0101BB55 8BC6 mov eax,esi
0101BB57 5A pop edx
0101BB58 5E pop esi
0101BB59 5F pop edi
0101BB5A 59 pop ecx
0101BB5B 5B pop ebx
0101BB5C 5D pop ebp
0101BB5D FFE0 jmp eax //跳到oep
0101BB5F 0000 add byte ptr ds:[eax],al
0101BB61 0000 add byte ptr ds:[eax],al
0100739D 6A 70 push 70 //OEP
0100739F 68 98180001 push PECompac.01001898
010073A4 E8 BF010000 call PECompac.01007568
010073A9 33DB xor ebx,ebx
010073AB 53 push ebx
010073AC 8B3D CC100001 mov edi,dword ptr ds:[10010CC] ; kernel32.GetModuleHandleA
010073B2 FFD7 call edi
010073B4 66:8138 4D5A cmp word ptr ds:[eax],5A4D
010073B9 75 1F jnz short PECompac.010073DA
下面就是DUMP进程,ImportREC修复输入表了。 |
|