手脱ACProtect V2.0(无Stolen Code)
1.载入PEID
ACProtect V2.0 -> risco
2.载入OD
00401000 > 68 00A04000 push ACP_Feed.0040A000 ; //入口点 00401005 68 0B104000 push ACP_Feed.0040100B 0040100A C3 retn 0040100B C3 retn 0040100C 858A 1D04802F test dword ptr ds:[edx+2F80041D],ecx 00401012 - 77 82 ja short ACP_Feed.00400F96 00401014 EE out dx,al
3.命令行输入:”bp GetCurrentProcessId”,然后shift+F9运行,落脚点在这个位置
7C8099B0 > 64:A1 18000000 mov eax,dword ptr fs:[18] ; //落脚点 7C8099B6 8B40 20 mov eax,dword ptr ds:[eax+20] 7C8099B9 C3 retn 7C8099BA 90 nop 7C8099BB 90 nop
4.先取消刚刚下的断点(Bp就是下断的意思),然后打开LoadPE,查看OD载入的这个程序的进程号也就是PId。我这里是”00000254”,可能不同的机器或者系统打开后显示的不同。
5.然后把步骤三中的代码进行修改,修改落脚点代码,把”mov eax,”后面的那个值改为步骤四中的Pid的值,然后把把原先落脚点下一行的mov代码整个给nop掉。修改完成后的代码变为下图这样:
7C8099B0 > B8 54020000 mov eax,254 ; //落脚点 7C8099B5 90 nop 7C8099B6 90 nop 7C8099B7 90 nop 7C8099B8 90 nop 7C8099B9 C3 retn 7C8099BA 90 nop 7C8099BB 90 nop
6.步骤五执行完之后下第二个断点”BP GetModuleHandleA”,然后shift+F9,落脚点应该是这个位置
7C80B731 > 8BFF mov edi,edi ; //落脚点 7C80B733 55 push ebp 7C80B734 8BEC mov ebp,esp 7C80B736 837D 08 00 cmp dword ptr ss:[ebp+8],0 7C80B73A 74 18 je short kernel32.7C80B754 7C80B73C FF75 08 push dword ptr ss:[ebp+8]
7.取消断点,打开内存界面,在401000的位置下断点然后shift+F9运行,此时会弹出ACProtect的提示框,点一下确定就可以
Memory map, 项目 22 地址=00401000 大小=00002000 (8192.) 属主=ACP_Feed 00400000 区段=CODE 包含=SFX,代码 类型=映像 01001002 访问=R 初始访问=RWE
8.点完确定后就直接来到OEP了,然后使用LoadPE+ImportREC脱壳即可
00402150 55 push ebp ; //OEP 00402151 8BEC mov ebp,esp 00402153 83C4 F0 add esp,-10 00402156 53 push ebx 00402157 B8 10214000 mov eax,ACP_Feed.00402110 0040215C E8 4FFCFFFF call ACP_Feed.00401DB0 00402161 68 C4214000 push ACP_Feed.004021C4 ; ASCII "ACProtect Feedback Form" 00402166 6A 00 push 0 00402168 6A 00 push 0
9.运行查壳
运行OK,查壳:Borland Delphi v3.0
- 本文为博主学习笔记,未经博主允许不得转载
- 本文仅供交流学习,请勿用于非法途径
- 本文仅是个人意见,如有想法,欢迎交流