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
我直接把无效函数剪切掉就可以运行了, 查壳发现脱壳成功~

