1、查找游戏漏洞:
当大家开发游戏并发布那么不可避免的会遭受到攻击,现在常见的查找游戏漏洞的软件是Cheat Engine并进行数据修改。
2、作弊实现的原理:
当我们使用Cheat Engine数据修改工具挖掘出数据漏洞后,也能使用代码编程的方式来实现作弊功能,同时也能知道作弊实现的原理。可以看出整个的作弊过程关键信息是在打开一个进程获取操作句柄的地方,如果打开进程获取句柄失败,那么后面的代码都不会执行,如果强行执行也是会报错,不会达到作弊的效果。
3、驱动保护原理及代码编写:
上面编写作弊代码的时候我们已经拿到关键信息,就是要保证得到目标进程的操作句柄,那有没有方法让他不能得到目标进程的操作句柄呢?答案肯定是可以的。在编写作弊代码的时候主要到OpenPrcoess这个函数的时候第一个参数是填写权限,那么我们就从权限入手,让这个代码没有权限去操作目标进程,那自然就获取不到操作句柄了。这里我采用编写驱动的方式,从更底层的方式来去除掉对于目标进程的操作权限。微软在驱动开发包当中提供了ObRegisterCallbacks函数,这个函数可以在例程注册线程、进程和桌面句柄操作的时候调用的回调列表,那么我就在驱动层设置一个回调,来准备监控打开进程获取操作句柄的过程。
进程监控注册完毕后为了方便测试,我又注册了驱动的IRP通讯用来接受从用户层发来送过来的信息,这里将接收要保护的进程唯一标识,也就是需要保护的游戏的唯一标识。
然后在驱动接收到用户层发送来的进程唯一标识之后,保存到数组当中,随后在系统底层触发了注册的监控回调函数的时候,做一个简单的判断来确定当前被操作的进程是要保护的游戏,那么就把这个执行操作的进程对于保护的进程的操作权限全部去除掉,这样就会导致获取不到操作句柄,无法达到作弊的效果。
4、驱动保护调用编写:
基本原理和底层代码都实现了那么就是游戏调用驱动保护了,那么接下来就是游戏调用驱动防护达到反作弊的效果。这里采用C++语言编写动态链接库提供接口给游戏调用。与驱动通讯代码。
5、代码调用与测试:
C#中调用反作弊动态链接库调用代码。
游戏正常加载了反作弊动态链接库,并且Cheat Engine数据修改软件已经对游戏没有操作权限,编写的作弊程序也对游戏没有操作权限。对游戏的安全保护及其反作弊效果,游戏结束时调用反作弊动态链接库的退出代码,游戏结束时显示驱动卸载成功。