基础脱壳教程19:手脱ACProtect V2.0.X

第一个程序:QQ 非主流 exe

去掉 非法访问内存 的勾勾, 隐藏 OD

去掉这个勾勾应该和之后的内存访问断点有关

老套路来到 retn, 接着我们去 OEP 看看情况, 还是老套路, 找到内存

很显然这是个 VB 程序并且 OEP 不完整

ximo 是直接现场找了个 VB 程序并观察入口点, 然后类比来修改 QQ 非主流的 OEP 汇编代码

直接上图吧

VB程序入口特征
修补后的样子

1.忽略除内存访问的所有断点,隐藏OD
2.F9,找SE句柄,数据窗口跟随,下内存访问断点
3.SHIFT+F9,F2,再SHIFT+F9,F2,再次SHIFT+F9,取消所有断点。
4.运行到RETN
5.打开内存,0401000处下F2断点。SHIFT+F9
6.来到假的OEP。
7.修正代码
8.脱壳,修复
9.OK~!!脱壳完成

第二个程序 : ACP_Feedback1.exe

我们先照老规矩试一下, 发现程序直接跑起来了, 说明这个异常没有起作用

然后我们用 int 3 试试, 然后视频里失败了而我成功了…… 当然我这个也没有来到 OEP

视频里把 int 3 中断非法访问内存 的勾勾都取消了, 程序跑飞, 失败

这时候他把勾勾全部勾上了

我们介绍另外一个方法

1.下断:bp GetCurrentProcessId,F9

2.我们来到这个地方

7C809940 >  64:A1 18000000  mov eax,dword ptr fs:[18]  //断在这
7C809946    8B40 20         mov eax,dword ptr ds:[eax+20]
7C809949    C3              retn

取消这个断点

3.用Lord PE查OD的PID。

视频里是 E00, 我的是 36C, 进程号以每一次操作为准, 这个值不唯一
//此处应有图

PID

4.把 2 中的代码改为

7C809940 >  B8 3C150000     mov eax,153C //当然,PID号每次都会变, 具体以每一次操作得到的为准
7C809945    90              nop
7C809946    90              nop
7C809947    90              nop
7C809948    90              nop
7C809949    C3              retn

//此处应有图

注意, 16 进制数以字母开头的话, 前面要加 0

然后我们把下面的 movnop

将mov给nop

第一个断点的任务已经完成, 我们来下第二个断点

5.下断,BP GetModuleHandleA,F9

来到下面的位置

6.来到这里

7C80B6C1 >  8BFF            mov edi,edi   //断在这
7C80B6C3    55              push ebp
7C80B6C4    8BEC            mov ebp,esp
7C80B6C6    837D 08 00      cmp dword ptr ss:[ebp+8],0
7C80B6CA    74 18           je short kernel32.7C80B6E4
7C80B6CC    FF75 08         push dword ptr ss:[ebp+8]
7C80B6CF    E8 C0290000     call kernel32.7C80E094
7C80B6D4    85C0            test eax,eax
7C80B6D6    74 08           je short kernel32.7C80B6E0
7C80B6D8    FF70 04         push dword ptr ds:[eax+4]

7.来到内存,在 CODE 断下 内存访问断点,F9运行,出现 NAG 窗口,点确定后,来到 OEP!!!

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
NAG窗口

8.脱壳, 修复, 用等级3!或者手动找 MessageBoxA

我等级 3 必死, 然后我直接把那个无效的指针剪切掉, 然后程序可以运行

手动找 MessageBoxA, 就是直接点那个无效的指针, 会弹出个窗口, 然后你在里面找 MessageBoxA 点它就好

用等级 3 下面的插件脱壳, 也是死掉了orz

9.抓取,脱壳成功!!