【游戏漏洞】CS单机自瞄检测分析

admin 2022年6月8日06:27:13评论174 views字数 1930阅读6分26秒阅读模式

致力于分享游戏安全技术,提供专业的游戏安全资讯   

0x0前言:

检测是游戏开发商和外挂制作者之间避免不了的问题,游戏开发商为了防止外挂对游戏数据进行修改从而破坏游戏平衡,会加入对游戏数据的检测,游戏的检测可以分为很多种:进程特征检测,堆栈检测,内存数据校验等等,在这篇文章中,我们将站在一个外挂作者的角度去分析一下游戏检测是如何发现游戏数据被修改的(当然这只是其中一种检测方式,你懂得)。

游戏:CS1.6单机版

检测功能:检测是否使用自瞄

检测作者:@小冷 大神

代码是否VM:否

 

0x1正文

打开游戏,注入我们的检测DLL

 

在我们开开启自瞄之前,游戏的标题是“状态:正常”

【游戏漏洞】CS单机自瞄检测分析

然后添加一个机器人,开启自瞄,

【游戏漏洞】CS单机自瞄检测分析

游戏的标题变成“已检测到XX次”

但是在我们开启自瞄后,虽然标题变成了已检测到XX次”,但中间偶尔会出现,“状态:正常”,这是为什么呢?

这个问题待我们在分析之后就会得到答案了。

 

首先,我们来讲一下自瞄原理,这个的详细解释可以参考<【二月专题】FPS游戏自瞄爆头原理>,这里简单提下,外挂通过获取敌我人物坐标数据,通过计算公式,转换为鼠标的X,Y,角度,然后写入,从而实现将鼠标移动到敌方人物的身上。

 

因为实现内存自瞄,游戏中的鼠标角度是会被改变的,所以游戏的检测通常也会加在这个地址上面,鼠标角度地址的查找在这里不再赘述,

直接给出地址:鼠标X:2DE10C4

              鼠标Y:2DE10C8

 

然后用CE查看访问

【游戏漏洞】CS单机自瞄检测分析

可以很清楚的看到【游戏漏洞】CS单机自瞄检测分析这两个地址明显不是游戏的地址

【游戏漏洞】CS单机自瞄检测分析

 

查看下也确实如此,那么这两条代码就是对自瞄的检测了,我们只要对这两处位置的代码进行分析即可。

换用OD附加,转到目标地址,下断,运行后断下

【游戏漏洞】CS单机自瞄检测分析

【游戏漏洞】CS单机自瞄检测分析

ecx值放到[0x3513FBC]中

分别将ecx,edx,eax值赋给0x2DE10C4 0x2DE10C8 0x2DE10CC ,这三个地址是鼠标的三个角度,然后还原esp,和ebp

0xAEEB451的值压入栈

call    0AED169C

Call内的代码

【游戏漏洞】CS单机自瞄检测分析

【游戏漏洞】CS单机自瞄检测分析

这三句就是将AEEB451的值给EIP

然后跳到了这里

【游戏漏洞】CS单机自瞄检测分析

这里是HOOK了游戏的代码,这里在回想下那三句mov应该是还原游戏的代码吧

然后F7往下走

【游戏漏洞】CS单机自瞄检测分析

一直运行到这里又发现有个HOOK

跟进去

【游戏漏洞】CS单机自瞄检测分析

将鼠标X角度的值给ecx,然后在给ebp-4

【游戏漏洞】CS单机自瞄检测分析

进这个call

【游戏漏洞】CS单机自瞄检测分析

这个call的

作用就是读取内存数据,通过他的参数我们可以知道他读去的是0x3513FBC的数据

【游戏漏洞】CS单机自瞄检测分析

然后把返回值给全局变量[0xAEEB465]

下面一个call也是一样,读取[0x25069BC]数据,保存到[0xAEEB469]中

【游戏漏洞】CS单机自瞄检测分析

接着读取[0xAEEB469]加上偏移480中的数据放到0xAEEB46D中

【游戏漏洞】CS单机自瞄检测分析

可以看下读取出来的值是0x64十进制也就是100我们可以联想到这是人物的血量,那么[0xAEEB469]中存放的值就是人物基址,0x480就是血量偏移

【游戏漏洞】CS单机自瞄检测分析

然后判断[ebp-4]是否等于0,也就是鼠标x角度否等于0,然后判断血量是否大于2

在满足这两个条件后

运行到这里

【游戏漏洞】CS单机自瞄检测分析

将现在的鼠标X角度与eax进行比较,eax是之前读取的0x3513FBC保存在全局变量0XAEEB465中,这个0x3513FBC的值也就是第一处HOOK位置获取的鼠标X角度的值

不相同就往下运行,然后改标题“已经检测到XX次”这个XX次就存在[0xAEEB471]中

相同就跳到改标题为“状态:正常”

整一次的检测就结束了

过一遍后就清楚了,他的检测机制是获取第一个HOOK点的角度数据,与

第二个HOOK点的角度数据进行比较,从而判断是否使用自瞄

正常操作鼠标,代码是按顺序执行下来的,两个位置的鼠标角度都不会改变,除非是外部对鼠标数据进行了改写

因为这个自瞄是通过时钟周期性修改鼠标角度的

所以偶尔会在开启自瞄的情况下出现“状态:正常”

0x2总结

整个检测的分析就结束了,想要过掉这个检测把两次鼠标角度的判断改掉就好了,当然这只是个简单的检测,汇编代码一清二楚,实际的网络游戏检测的代码会被VM,你看到的代码会很乱,可能需要还原,本文只是简单的模拟,初学者可以找些比较简单的游戏检测进行练习。



来源:请叫我红领巾-邮件投稿

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

【游戏漏洞】CS单机自瞄检测分析



来源:通化程序员-公众号投稿

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

近期精品文章:


【游戏漏洞】CSGO人物坐标分析

【游戏漏洞】页游逆向—摩尔庄园封包解密

【外挂分析】CSGO公众作弊ezfrags外挂分析

【游戏漏洞】《魔力宝贝》步步遇敌分析



投稿文章:[email protected]

【游戏漏洞】CS单机自瞄检测分析


原文始发于微信公众号(游戏安全实验室):【游戏漏洞】CS单机自瞄检测分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月8日06:27:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【游戏漏洞】CS单机自瞄检测分析http://cn-sec.com/archives/1066609.html

发表评论

匿名网友 填写信息