【游戏逆向】浅谈某平台调试软件检测分析

在调试这个平台的CS过程中,我们用CE对任意一个地址下断点会导致游戏的闪退。
在这里插入图片描述
首先我们第一时间想到的是游戏对有关下断的API进行了HOOK,于是用PChunte工具查看后发现有110个钩子
在这里插入图片描述
在其中我们可以看到DbgUiRemoteBreakin这个函数被挂钩了,DbgUiRemoteBreakin这个函数内部会调用DbgBreakPoint执行断点指令,以触发断点异常,强制把程序断了下来。
我们用CE查看这个函数的头部,发现他跳转到了游戏检测模块的地址在这里插入图片描述
在这里插入图片描述
来到这个后我们发现他调用了ExitProcess就退出了进程。
我们尝试恢复这个钩子。恢复后发现游戏立即退出了,那么说明肯定有线程在检测这个钩子,我们一恢复就被检测到了,并且检测的周期很短。
通过枚举法挨个结束检测模块的线程,最后发现在这里插入图片描述
结束掉这个线程后再恢复钩子游戏就不会闪退,但是一段时间后就出现如下信息框。在这里插入图片描述
这样一来简单的结束线程这个方法就行不通了,那么思考下有没有别的方法能够绕过检测,由于这个游戏的他HOOK了很多API,而这些API的地址都是不连续的,他要检测其中的一个地址,不可能每次检测都获取一下,所以这些挂钩的地址很可能保存在某个全局变量中,基于这点我们尝试搜索DbgUiRemoteBreakin的地址,搜索到了一个地址在这里插入图片描述
我们找个空白地址,因为他只修改了函数头部的前7个字节,所以检测时也应该是检测这个7个字节,我们把他修改后的这个7个字节写入空白地址,然后将我们搜索到的地址的值替换成空白地址。在这里插入图片描述
这时候再恢复钩子游戏就不会闪退了,因为我们已经让他检测了我们伪造的地址。
其实绕过调试检测的方法还有很多,由于它开始必须要获取这个函数的地址,我们可以HOOK获取函数地址的相关API,返回0或者返回一个伪造的地址。
针对这个游戏而言,最后调用ExitProcess函数退出进程,但是他并没有这个函数进行检测,我们也可以HOOK ExitProces 恢复下堆栈和原函数头部的几个字节在跳回原函数从而绕过检测。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

douluo998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值