1.载入PEID

ACProtect V2.0 -> risco

2.载入OD

 >   00A04000     push ACP_Feed.0040A000                         ; //入口点
0B104000 push ACP_Feed.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C 858A 1D04802F test dword ptr ds:[edx+2F80041D],ecx
- ja short ACP_Feed.00400F96
EE out dx,al
 

3.命令行输入:”bp GetCurrentProcessId”,然后shift+F9运行,落脚点在这个位置

7C8099B0 >  :A1   mov eax,dword ptr fs:[]                      ; //落脚点
7C8099B6 8B40 mov eax,dword ptr ds:[eax+]
7C8099B9 C3 retn
7C8099BA nop
7C8099BB nop
 

4.先取消刚刚下的断点(Bp就是下断的意思),然后打开LoadPE,查看OD载入的这个程序的进程号也就是PId。我这里是”00000254”,可能不同的机器或者系统打开后显示的不同。

5.然后把步骤三中的代码进行修改,修改落脚点代码,把”mov eax,”后面的那个值改为步骤四中的Pid的值,然后把把原先落脚点下一行的mov代码整个给nop掉。修改完成后的代码变为下图这样:

7C8099B0 >  B8      mov eax,                                    ; //落脚点
7C8099B5 nop
7C8099B6 nop
7C8099B7 nop
7C8099B8 nop
7C8099B9 C3 retn
7C8099BA nop
7C8099BB nop
 

6.步骤五执行完之后下第二个断点”BP GetModuleHandleA”,然后shift+F9,落脚点应该是这个位置

7C80B731 >  8BFF            mov edi,edi                                    ; //落脚点
7C80B733 push ebp
7C80B734 8BEC mov ebp,esp
7C80B736 837D cmp dword ptr ss:[ebp+],
7C80B73A je short kernel32.7C80B754
7C80B73C FF75 push dword ptr ss:[ebp+]
 

7.取消断点,打开内存界面,在401000的位置下断点然后shift+F9运行,此时会弹出ACProtect的提示框,点一下确定就可以

Memory map, 项目
地址=
大小= (.)
属主=ACP_Feed
区段=CODE
包含=SFX,代码
类型=映像
访问=R
初始访问=RWE
 

8.点完确定后就直接来到OEP了,然后使用LoadPE+ImportREC脱壳即可

                  push ebp                                       ; //OEP
8BEC mov ebp,esp
83C4 F0 add esp,-
push ebx
B8 mov eax,ACP_Feed.
0040215C E8 4FFCFFFF call ACP_Feed.00401DB0
C4214000 push ACP_Feed.004021C4 ; ASCII "ACProtect Feedback Form"
6A push
6A push
 

9.运行查壳

运行OK,查壳:Borland Delphi v3.0
05-17 05:49