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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6