基础脱壳教程17:脱ACProtect(存在Stolen Code)

PEiD 查壳显示 UltraProtect 1.x, 但区段还是 ACProtect 的 .perplex

这个其实是 ACProtect 以前的名字

听说这是 Runtrace 跟踪法, 上一课的笔记的附加链接好像提到类似的东西

OD 载入, 异常选项只取消 非法访问内存, 当然也要把 StrongOD 的那个勾勾去掉

Shift F9 来到最后一次异常, 两次程序就跑飞, 我们按一次来到 int 1

堆栈窗口找到 SE处理程序, 数据窗口跟随, 下 内存访问 断点

Shift F9, 然后再 F2, 然后 Shift F9, 然后 F2, 然后 Shift F9, 删除断点,

不要忘了内存访问断点, 右键断点>删除内存断点

然后 retn 处 F4, 这时候是修补被偷走代码的最佳时机

我们到 OEP 去看一下吧, Alt M 来到内存窗口

在 .text 处 F2, Shift F9

然后发现与我们平常所见的 C艹 OEP 不一样 (此处应该有图, 图在下面) // 98记事本是用 C艹 写的

下面我们来修复被偷取的代码

重新载入, 隐藏 OD, Shift F9, 数据窗口跟随, 下内存访问断点, Shift F9, F2 下断, Shift F9, F2 下断, Shift F9, 删除断点

retn 处 F4

这时候就是最佳的寻找被偷走代码的最佳时机

我们点击 OD 上面的 调试, 然后 设置条件

勾选 命令是一个, 然后此处输入 push ebp, 确定

然后 调试 > 跟踪进入, 左上角 OD 显示 "跟踪", 跟踪时间比较长

然后来到下面位置, 下面就是被 偷走的代码 :

004254C9    55              push ebp
004254CA    8BEC            mov ebp,esp
004254CC    83EC 44         sub esp,44

我们右键把它们复制, 右键二进制 > 二进制复制, 接着我们再去 OEP

直接在内存窗口中给 .text F2 下断

运行来到 OEP

我们算一下被偷走的代码有多少字节, 两个十六进制位算一个字节, 它们总共是 6 个字节

我们在 OEP 向上数 6 个字节, 来到 004010C7, 就是数机器码向上数 6 个字节

我们先把它 nop 掉, 然后再从 OEP 往上找 6 个字节, 就是 004010CC 这里到 004010CF 这一块, 我们把刚才的二进制复制的代码粘贴上去
//这里应该有图, 图在下面

这时候 OEP 应该基本上补全了, 我们这时候右键 此处为新 EIP, 然后我们就可以脱壳了

发现有 98 个无效函数, 我们用等级一跟一下, 一个都没修复, 然后我们用等级三跟踪

等级三我们说过, 如果这里直接跟踪, 就会死掉(虚拟机环境下真的死掉了)

我们重新把需要脱壳的源程序打开, 然后等级三跟踪, 由于比较多, 所以不要一下子全修复, 我们一块块地来

视频里显示可以修复, 但是这里我试的时候却无法修复, 以下是论坛其他人遇到的问题 :
https://www.52pojie.cn/thread-413588-1-1.html
https://www.52pojie.cn/thread-587784-1-1.html

我直接把无效函数剪切掉就可以运行了, 查壳发现脱壳成功~

被偷了的 OEP
修补后的 OEP