125243102 发表于 2009-11-3 15:06:19

PECompact脱壳方法 介绍了几种

首先查壳,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 9B000000je 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:
0100100D    64:8925 0000000>mov dword ptr fs:,esp
01001014    33C0            xor eax,eax
01001016    8908            mov dword ptr ds:,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 951C0010push dword ptr ss:
002F094D    FF10            call dword ptr ds:
002F094F    8B46 0C      mov eax,dword ptr ds:
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 C8120010mov dword ptr ss:,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:
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:,al
0101BB61    0000            add byte ptr ds:,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 CC100001mov edi,dword ptr ds:      ; kernel32.GetModuleHandleA
010073B2    FFD7            call edi
010073B4    66:8138 4D5A    cmp word ptr ds:,5A4D
010073B9    75 1F          jnz short PECompac.010073DA



下面就是DUMP进程,ImportREC修复输入表了。
页: [1]
查看完整版本: PECompact脱壳方法 介绍了几种