源码中的判断函数:
[ol]
![](https://static.52pojie.cn/static/image/common/none.gif)
400.png (112.72 KB, 下载次数: 0)
下载附件
2023-9-28 16:31 上传
用 Baymax 对付加壳的程序,第一步要先找到壳的解码时机,通俗来说,就是要通过 HOOK API 等方式等待被补丁的地址数据解码,如果使用 HOOK API 方案,可以调用壳自身使用的API,或者在执行到模块被补丁地址前调用过的API均可。由于这个 CrackMe 获取窗口输入文本调用的 API 为 GetWindowTextA,所以我们就直接 HOOK 这个 API了,这样加任何壳补丁方案都可以通杀了。
![](https://static.52pojie.cn/static/image/common/none.gif)
001.png (24.57 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
由于代码中调用了VMP 壳内存校验的函数,所以不要直接 Patch 汇编指令,而要使用异常机制来绕过内存校验实现补丁。
方案一、修改标志寄存器实现比较结果为真
特征码1:85 C0 75 23 45 33 C9 ,偏移为 2
注意:我们在使用特征码搜索地址时,一定要确保其唯一性,比如可使用插件来查找结果
![](https://static.52pojie.cn/static/image/common/none.gif)
401.png (74.73 KB, 下载次数: 0)
下载附件
2023-9-28 16:31 上传
设置 ZF 标志位为 1 即可。
![](https://static.52pojie.cn/static/image/common/none.gif)
002.png (38.44 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
最后,异常设置这里使用对当前线程设置异常即可,不要勾选对所有线程设置异常,会被 VMP 检测到被调试。
![](https://static.52pojie.cn/static/image/common/none.gif)
003.png (59.31 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
方案二、修改memcpy比较函数的参数
00007FF74A7017DC | 41:B8 10000000 | mov r8d,10 |
00007FF74A7017E2 | 48:8D9424 50010000 | lea rdx,qword ptr ss:[rsp+150] | rdx:EntryPoint
00007FF74A7017EA | 48:8D8C24 60010000 | lea rcx,qword ptr ss:[rsp+160] |
00007FF74A7017F2 | E8 99940000 | call testcheckmemory64.7FF74A70AC90 | memcmp 比较函数
00007FF74A7017F7 | 85C0 | test eax,eax |
00007FF74A7017F9 | 75 23 | jne testcheckmemory64.7FF74A70181E | 关键跳转
特征码地址: E8 ?? ?? ?? ?? 85 C0 75 23
该方案比较简单,直接将 RDX 寄存器数值修改为 RCX 即可。
![](https://static.52pojie.cn/static/image/common/none.gif)
101.png (35.45 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
方案三、修改参与比较的 MD5 内存数据
特征码地址: E8 ?? ?? ?? ?? 85 C0 75 23
直接将 RDX 寄存器指向的内存的数据 修改为 RCX 指向内存的数据即可,长度为 0x10。// 注意 baymax 输入的数值均为 HEX 数值
![](https://static.52pojie.cn/static/image/common/none.gif)
201.png (49.6 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
方案四、修改 memcpy 函数返回值
我们进入 memcmp 函数:
00007FF74A70AC90 | 48:2BD1 | sub rdx,rcx | rdx:EntryPoint
00007FF74A70AC93 | 49:83F8 08 | cmp r8,8 |
00007FF74A70AC97 | 72 22 | jb testcheckmemory64.7FF74A70ACBB |
00007FF74A70AC99 | F6C1 07 | test cl,7 |
00007FF74A70AC9C | 74 14 | je testcheckmemory64.7FF74A70ACB2 |
00007FF74A70AC9E | 66:90 | nop
提取函数入口特征码:48 2B D1 49 83 F8 08 72 22 F6 C1 07 74 14
1、勾选修改函数返回值,设置函数返回时修改类型,栈偏移为 0。
2、 设置 RAX 寄存器为 0,即 memcmp 函数返回 0,比较内存数据相同。
3、条件断点 参数 r8d == 0x10
![](https://static.52pojie.cn/static/image/common/none.gif)
301.png (47.04 KB, 下载次数: 0)
下载附件
2023-9-28 16:26 上传
目标程序+源码+补丁方案下载:
链接:https://pan.baidu.com/s/1afZOKMIdKUFI5vLbt4jmBg
提取码:cgr5
解压密码:Baymax64