安全路透社
当前位置:安全路透社 > 网络转载 > 正文

CS GO游戏AliveNK外挂分析

背景

《反恐精英:全球攻势》(简称:CS:GO)作为《反恐精英》系列游戏的第四款作品,在FPS游戏玩家中一直有着比较高的知名度,目前是世界上玩家数最多的FPS游戏之一,2017年4月18日《CS:GO》国服开启先锋首测,尽管此次CS:GO国服进入三套安全方案但仍然在首测2周内便出现了功能完善的外挂,其中Alive NK外挂功能更是全面。此次主要以Alive NK对CS:GO外挂进行分析。

CS GO界面.png

外挂静态分析

目录特征

外挂的目录结构很简单,只有一个执行文件“Alive NK V617[可选版].exe ” 。外挂功能启动后,还会有注入到游戏内的result.dll,c盘根目录下会生成配置信息 ,同时会在游戏目录下生成对应配置文件,具体如下:

名称 作用 所在路径
Alive NK V617[可选版].exe 外挂登录界面 存放目录
result.dll 外挂注入、逻辑实现模块 %temp%,注入后会被删掉
kss.ini 外挂连接情况,日志 c:\\
test.txt 外挂帐号 c:\\
test1.txt 外挂剩余时间 c:\\
config.xml 外挂配置文件 ..\\CSGO\steamapps\common\Counter-Strike Global Offensive\

文件特征

外挂主界面Alive NK,VMP加壳,IDA拖入代码阅读性差

代码页.png

主界面未对调试做检测和对抗,调试器可正常附加进行分析

外挂注入模块result.dll(/TemporaryFile),注入后被 删除

代码执行页.png

通过对CreateFile和WriteFile hook拦截,获取完整dll, 同样外挂模块加VMP ,IDA可读性很差

代码页3.png代码页4.png

外挂配置文件config.xml,未做加密,里面包含着外挂功能配置选项

代码页5.png

外挂动态分析

行为分析

外挂有两种方式注入,分析第一种注入,直接hook进程遍历和常见的注入api, 记录如下:

第一种外挂注入.png

同时外挂在遍历目标进程的同时,在%temp%目录下释放自身将要注入的dll

释放dll.png

最终外挂通过创建远程线程,将result.dll注入到目标进程中

注入result.dll.png

选取另外一种方式注入,发现获得了同样的api调用序列,同时监控到无消息钩子创建,无dll劫持,无 LSP和注册表的相关修改,外挂的第二种注入方式本质上仍然是远程线程注入,与第一种并没有什么不同

外挂注入游戏后,调试器附加后,无法找到外挂模块,结合pchunter模块加载的地址,可以找到外挂的内存分布

暴力搜索内存中的相关字符串,可以获得相关字符串信息,字符串做显示UI使用,分别对应外挂的中文版和英文版

字符串信息.png

同时发现,模块加载后,会先跨模块调用游戏内各个模块的导出函数CreateInterface ,获取各个游戏模块内的接口

导出函数.png

外挂通过获取到的接口,进一步计算得出其他函数地址(下图为外挂获取的游戏内UI显示的部分接口)

游戏内UI显示的部分接口.png

执行时机:

外挂注入后会在游戏的右上角绘制自己的窗口,猜测外挂调用了dx/gui相关绘制函数,对常见api下断点进行回溯后,并未发现相关外挂调用信息。分析过程中注意到当外挂保存配置时会向游戏界面上写入保存配置成功,结合对应明文字符,定位到相关逻辑:

断点回溯.png

进一步跟进,外挂修改了虚表[[[vguimatsurface.55BEF580] ]+0xA4 ],替换成自己的外挂模块地址 , 获得执行时机

获得执行时机.png

虚表原本指向vgui2.dll+0x180A0,调用来自client.dll. engine.dll, vguimatsurface.dll等多处,负责游戏中 UI 相关功能,外挂修改虚表指向自己的模块,用来获取自己的执行时机。

外挂功能分析

透视

外挂给出了透视的选项 -ESP 功能,结合激活开关,通过CE搜索开关标志位,再通过对标志位下访问断点,回溯后定位到 ESP 功能的入口函数

定位入口函数.png

跟进分析,通过分析流程跳转,确定外挂temporaryfile.3061bb80 为透视相关的功能函数(仅修改跳转, 透视方框消失,其他功能正常)

透视方框消失前.png

透视方框消失后.png

进一步分析temporaryfile.3061bb80实现逻辑,外挂在函数内调用engine.dll 获得相关数据结构

相关数据结构.png

再解析数据结构获取坐标相关偏移,最终将获取的坐标保存到自己的模块

保存坐标到自己的模块.png

最终调用engine-CEngineVGui ::Paint进行绘制

第三人称

游戏外挂提供了第三人称视角,可以结合陀螺外挂使用,危害程度 较大

“第三人称”设置页面.png

通过开通和关闭第三人称,结合CE搜索关键标志位确定第三人称在游戏中的开关位置

定位“第三人称”设置开关.png

外挂修改了游戏内的第三人称的开关,打开了第三人称视角

陀螺仪

CS:GO陀螺外挂影响较为恶劣,人物可以快速旋转抖动,外挂中的UI中 给出了陀螺外挂的偏移量数据,这个其实是人物朝向和开枪方向的偏移。 结合CE搜索偏移量 ,定位到外挂模块存取偏移量的内存地址

定位到外挂模块存取偏移量的内存地址.png

对地址下访问断点,结合陀螺仪的开启时机,最终确定result.dll+0x5D1D为 关键地址

确认关键地址.png

分析上述访问偏移量的地址,全部存在于外挂模块,跟进分析其他几个地址, 并未发现游戏直接或者间接访问了这个 偏移量 ,所以,外挂很可能将偏移量进行了计算转换

结合result.dll+5D1D处回溯分析,最终确定偏移量的计算逻辑:

确定偏移量的计算逻辑.png

游戏中很有可能使用的是计算后的这个偏移量,结合CE对偏转后的浮点数进行 搜索 ,最终确定关键地址

确定关键地址.png

此时开启陀螺仪的抖动功能,发现视角及计算后的方向不停的被修改,猜测游戏外挂很可能的在不停的改写数据

外挂数据修改.png

对外挂中的计算后的浮点数据下写入断点,用来获得外挂在修改后的执行逻辑 :

获取外挂修改后的执行逻辑.png

堆栈回溯分析,最终确定陀螺的主要实现逻辑:

外挂首先会调用eingine中函数判断游戏当前状态,如果在大厅 ,则对应陀螺功能也不开启

堆栈回溯分析.png

最后,外挂会获得当前的陀螺仪开启的方式和设置的设置的偏移量,最终将计算好的偏移量, 写入到内存中

将偏移量写入内存.png

感知时机上,外挂不再通过vguimatsurface.dll,将之前分析透视相关的虚表恢复,也不会影响到陀螺的功能,通过分析获得,陀螺 hook 了 engine负责帧绘制相关虚表,获得更改人物状态的执行时机(原虚表指向client+0x22C340)

获得执行时机png

然后更改了hook了获取人物视角的虚表client.dll+0x2BA636处(原本应该call client+0x23c4a0),进行 对当前视角进行修改

修改当前视角.png

后记:

1. CS:GO游戏通用安全保护强度不高,游戏分析门槛较低, 导致了外挂制作成本较低

2. CS:GO-VAC检测强度不高,导致了外挂存活周期 较长。

3. CS:GO无前端实时对抗方案, 处罚作弊具有延后性。

4. CS:GO人物坐标全局下发,导致游戏会长久 的存在FPS通用的透视自瞄 等 外挂风险

 *本文转载来自游戏安全实验室(GSLAB.QQ.COM)

未经允许不得转载:安全路透社 » CS GO游戏AliveNK外挂分析

赞 (1)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册