- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
对于加壳程序的破解,在不脱壳的情况下通常是选择API进行HOOK等方案,待解码后再进行 Patch。
Baymax v1.77 Beat5 提供了一种新方案,对于程序加壳可以直接无视,只要填好需要修改的RVA及对应的规则即可。
我们选一款反调试的壳来测试,用 Obsidium v1.5.2 全保护的加壳测试程序 DFX.EXE。由于我们调试过无壳版,所以知道需要修改两个跳转即可实现破解。
- 009C95A1 |> \83BB 40CB0100 00 CMP DWORD PTR DS:[EBX+1CB40], 0
- 009C95A8 |. 74 2B JE SHORT DFX.009C95D5 // 不跳
- 009C95AA |. 83BB 20CB0100 0A CMP DWORD PTR DS:[EBX+1CB20], 0A
- 009C95B1 |. 75 22 JNZ SHORT DFX.009C95D5 // 不跳
- 009C95B3 |. C783 E4CA0100 02000000 MOV DWORD PTR DS:[EBX+1CAE4], 2 // 注册标志
复制代码
我们把程序视作无壳版来制作硬件断点补丁,也就是说在只需要加上两个规则即可:
围护这个壳比较**,在检测是否被设置了硬件断点,所以需要在beta5中选择设置“保护硬件断点”,另外该壳还在检测是否被修改,请把“不开启断点修复”这个选项也选择上(非程序反调试检测不要勾选该选项),这样我们新版的Baymax就可以直接忽视壳,下好规则就可以完成破解了。
- [BAYMAX]: 进程加载:C:\Users\Nisy\Desktop\DFX\DFX.exe
- [BAYMAX]: 开启硬件断点防护 ...
- [BAYMAX]: Proc DFX.exe Module DFX.exe Name DFX.exe
- [BAYMAX]: Proc DFX.exe Module DFX.exe Name DFX.exe
- [BAYMAX]: 执行断点补丁条目
- [BAYMAX]: 非 NS_TYPE_SETRVABREAK 类型 0
- [BAYMAX]: 断点补丁地址 004095A8 补丁数据 ZF:0,1,0:0
- [BAYMAX]: 设置断点
- [BAYMAX]: 解析异常断点数据成功 ThreadId: 7804
- [BAYMAX]: 设置VEH断点回调函数成功!
- [BAYMAX]: 设置硬件断点 004095A8 Type DR0 DR7 1
- [BAYMAX]: 获取线程硬件断点成功 004095A8
- [BAYMAX]: 设置异常处理过程成功 ..
- [BAYMAX]: 设置硬件断点成功 DR0
- [BAYMAX]: 断点补丁地址 004095B1 补丁数据 ZF:0,1,0:1
- [BAYMAX]: 设置断点
- [BAYMAX]: 解析异常断点数据成功 ThreadId: 7804
- [BAYMAX]: 设置硬件断点 004095B1 Type DR1 DR7 5
- [BAYMAX]: 获取线程硬件断点成功 004095B1
- [BAYMAX]: 设置异常处理过程成功 ..
- [BAYMAX]: 设置硬件断点成功 DR1
- [BAYMAX]: End StartHook()
- [BAYMAX]: 补丁设置初始化完成,若有HOOK或下断点操作,将会在下方进行打印输出。
- [BAYMAX]: 找到 DrX 对应的 1 处断点记录
- [BAYMAX]: 触发硬件断点 ThreadId 7804,7804 Type: 0,0
- [BAYMAX]: 当前断点符合触发条件并进行处理 004095A8
- [BAYMAX]: NS_BREAK_FLAG 类型 ... 004095A8
- [BAYMAX]: 已处理该异常 004095A8
- [BAYMAX]: 找到 DrX 对应的 1 处断点记录
- [BAYMAX]: 触发硬件断点 ThreadId 7804,7804 Type: 1,1
- [BAYMAX]: 当前断点符合触发条件并进行处理 004095B1
- [BAYMAX]: NS_BREAK_FLAG 类型 ... 004095B1
- [BAYMAX]: 已处理该异常 004095B1
复制代码
围护的壳子比较**,注入补丁会被其发现调试(谁让我们加载晚一步了呢),劫持补丁(和谐补丁)测试OK O(∩_∩)O哈哈~
附件为加壳的 DFX.EXE 主程序,及 Baymax 的补丁工程方案,感兴趣的朋友可以自己调试一下。
|
评分
-
查看全部评分
|