《反恐精英:全球攻势》(cs3360 GO)是《反恐精英》系列游戏的第四部作品,在FPS玩家中保持着很高的知名度,是目前世界上最多玩家之一的FPS游戏之一,2017年4月18日《CS:GO》国服不顾此次CS 3360,首次登上了先锋,这次主要是Alive NK
插件静态解释
目录特征
插件的目录结构很简单。只有一个可执行文件“Alive NK V617[选项]”。只有“exe”。插件功能启动后,还有注入游戏的result.dll。在CD根目录下生成配置信息,并在游戏目录中生成相应的配置文件,如下所示:
名称工作的路径Alive NK V617[选项]。exe插件登录界面存储目录result.dll插件注入、逻辑实现模块%temp%。注入后,kss.ini插件连接将被删除。日志c:test.txt插件帐户c 3360 test 1 . txt插件剩余时间c 3360 config . XML插件配置文件.csgosteamappscommoncounter-strike global offensive文件特性
插件主界面Alive NK、VMP外壳、IDA拖动代码读取不良
主界面检测调试,不对立,调试器可以正常进行进一步分析
插件注入模块result.dll(/TemporaryFile),注入后删除
屏蔽CreateFile和WriteFile hook,获得完整的dll。添加相同的插件和VMP会降低IDA的可读性
未加密的插件配置文件config.xml包含配置插件功能的选项
插件动态分析
行为分析
插件通过两种方法注入,分析第一次注入,直接分析hook过程巡回和一般注入API,记录如下:
遍历目标进程时,释放要从%temp%目录注入的dll
最终插件将创建远程线程,并将result.dll注入目标进程
选择不同的注入方法,发现相同的API调用序列,自动钩子生成,没有dll绑架,没有LSP和注册表相关的修改,插件的第二种注入方法基本上仍然是远程线程注入,与第一种没有区别。
插件注入游戏后,调试器连接后,无法找到插件模块,可以与pchunter模块加载的地址组合,找到插件内存分布。
暴力搜索内存中的相关字符串可以获得相关的字符串信息,字符串分别用作插件中文和英文版本的显示UI。
此外,加载模块后,模块首先调用游戏中每个模块的导出函数CreateInterface,获取每个游戏模块中的接口
插件通过获得的界面进一步计算其他函数地址(下图是插件获得的游戏内UI中显示的界面部分)。
执行时间:
注入插件后,将在游戏右上角绘制自己的窗口。推测插件调用了dx/gui相关的绘图函数,在常规API下反向跟踪断点后,找不到相关的插件调用信息。分析过程中,插件存储配置成功写入游戏界面,并与相应的纯文本字符一起移动到相关逻辑。
附加后续措施,修改插件虚拟表[[vguimatsurface.55bef580]],用自己的插件地址替换,何时运行
虚拟表最初指向vgUI2.dll0x180A0,从client.dll. engine.dll、vgUImatsurface.dll等多个地方调用,负责游戏的ui相关功能,插件修改虚拟表指向自己的模块以获取
插件功能分析
透视法
插件提供枢轴选项-ESP功能。与激活开关结合,通过CE检索开关标志位,访问标志位下的断点,反向跟踪,然后移动到ESP功能的入口函数。
通过后续分析、分析过程跳跃,确认插件temporaryfile.3061bb80是透视相关功能函数(只修改跳跃,枢轴盒消失,其他功能正常)
进一步分析Temporaryfile.3061bb80实现逻辑,并在函数内调用engine.dll获取相关数据结构
然后对数据结构进行解析,获得坐标相关偏移,并将最后得到的坐标存储在自己的模块中
最终调用engine-cengine vgui 33603360 paint进行绘制
第三人称
游戏插件提供第三人视角,可以与陀螺插件一起使用,风险很大
通过第三人打开和关闭,结合CE搜索密钥标志位,确定游戏中第三人交换机的位置
修改了游戏中的第三人称开关,打开了第三人称视角
陀螺
CS:GO陀螺插件的影响比较差。角色可以快速旋转,插件的UI提供陀螺插件的偏移数据。这实际上是人物的方向和射击方向的偏移。与CE搜索偏移一起移动到插件访问偏移的内存地址
将地址下的访问断点与陀螺仪的开关时间相结合,最终确定result.dll0x5D1D为密钥地址。
分析上述访问偏移的地址,全部存在于插件模块中,后续分析其他几个地址,没有发现游戏直接或间接访问此偏移,因此插件很有可能计算转换了偏移。(威廉莎士比亚,北方执行(美国电视),访问偏移)。
结合Result.dll 5D1D的回溯分析来确定偏移的计算逻辑:
在游戏中使用计算出的这个偏移,很有可能与CE一起检索偏向的浮点数字,以确定密钥地址。
这时打开陀螺的抖动功能,发现视角和计算后的方向不断修改,推测游戏插件很有可能不断重写数据
为了获得修改后的执行逻辑,插件会在计算出的浮点数据下写入断点。
堆栈回溯分析,最终确定陀螺的主要实现逻辑:
插件首先调用eingine的函数来检查游戏的当前状态,如果在大厅,则相应的陀螺功能也不会打开
最后,插件将获取当前陀螺的打开方式和设置的偏移,并将计算出的偏移记录在内存中。
识别时,插件将不再通过vguimatsurface.dll恢复与以前分析观点相关的虚拟表,也不会影响陀螺的功能。通过分析,陀螺获得了engine负责帧绘制相关虚拟表和更改角色状态的时机(原来虚拟表是指client0x22C340)。
然后,hook更改了获得角色视角的虚拟表client.dll0x2BA636(原来应为call client0x23c4a0),修改了当前视角
后期:
1.CS:GO游戏通用安全强度不高,游戏分析门槛低,插件制作成本低
2.CS 3360 GO-VAC检查强度不高,插件生存周期长。
3.CS:GO没有前端实时对抗方案,作弊处罚延期。
4.CS:GO角色坐标全局下降,FPS通用透视等插件危险可能会长期存在于游戏中。
本文由游戏安全研究所(GSLAB)提供。在QQ.COM)上再现