CS2外部静默原理剖析及实现
2024-8-8 17:42:4 Author: mp.weixin.qq.com(查看原文) 阅读量:8 收藏


前言

现在CS2外挂层出不穷,基本大部分的外挂功能都已被实现,其中在我研究过程中比较有意思的就是外部静默自瞄。当然静默自瞄在注入游戏后是很容易实现的,只需要Hook CreateMove这个函数进行拦截CMD这个结构数据,然后进行视角的修改即可,但外部比较难实现这种方法,但也可以从此函数入手来研究,所以就有接下来的分析过程。

注:此文章仅分享逆向过程以供学习参考,并无传播、提供外挂等非法程序。


分析

静默原理

由于游戏是3D世界,所以方向大部分是用欧拉角来表达,即Pitch(俯仰角)、Yaw(偏航角)、Roll(翻滚角)三个数据,静默就是修改开枪旋转角,在本地相机旋转角不变的情况下修改开枪旋转角,就可以实现不瞄准目标但又可以射击到目标的功能。


而在CS2中CreateMove函数参与移动相关的所有操作,例如:相机旋转角改变、人物移动、人物动作等等。

函数原型如下:
bool __fastcall CreateMove(CCSGOInput* pInput, int slot, unsigned __int8 a3)
{
// ...
}
其中"CCSGOInput"类包含了所有相关数据,具体实现功能就是拦截并修改此指针数据,所以我的入手点就在这个函数。

寻找CreateMove函数

首先使用IDA分析"client.dll"此文件,在String窗口中直接搜索"CreateMove",可以在String窗口看到这些文本。
选中第二个,查看交叉调用可以发现有且仅有一个函数。



这个函数就是CreateMove。

动态调试CreateMove函数

静默最主要的数据就是相机的旋转角数据,因为开枪的旋转角与相机旋转角数据一致,注:Rotation{Pitch,Yaw,Roll},所以先去Github上的cs2-dumper项目中找到ViewAngle的地址,添加到CE以便对照寄存器数据进行调试定位。



然后在Memory Viewer里面跳转到CreateMove函数,直接下断F8单步走一遍,过程中打开着FPU窗口观察XMM寄存器数据,因为旋转角数据是浮点数,所以在调试代码过程中观察是否能看到旋转角相关数据,就可以快速定位相关代码段,发现在这行汇编代码后的一片地址都没有执行过。
所以我们直接略过下面一片代码,直接跟着跳转过去继续单步执行下去。
当执行完这个Call后,XMM1寄存器出现了一个熟悉的数据。
可以和旋转角数据对照,发现是相机的Yaw数据。


这个Call有点嫌疑,直接NOP后,在游戏中开枪,发现射出的子弹方向和实际相机方向不一致。
基本可以确定开枪角度的写入是在这个Call内部,所以打标签记录一下这个函数,直接跳转到函数内部进行继续分析。(这个函数后面发现是之前IDA String列表的第一个文本交叉调用中的函数。注:图三

开着寄存器窗口继续F8单步走跟代码,跟到这一行代码发现XMM0首次出现了Pitch数据,与我们ViewAngle的数据一致。
继续执行后可以看到XMM0、XMM1分别就是旋转角Pitch和Yaw。
所以就可以确定是上面这两个关键代码获取到旋转角数据,并分别赋值给[rcx+18]和[rcx+1C],可以猜测下一个的XMM0赋值代码便是Roll数据,但是Roll数据一般是0,所以这里不讨论下面部分的代码。所以就可以在这附近进行拦截修改rcx相关寄存器地址的值,达到修改开枪角度的效果,下面进行验证。

简单Hook验证

我们在0x87C37C偏移处进行简单的Hook来验证,看看修改[rcx+18]以及[rcx+1C]后是否能成功修改开枪视角。这里先直接使用CE的自动汇编来快速的写一个Hook脚本,将[rcx+18]以及[rcx+1C]拦截修改为[newmem+50]和[newmem+54]两个地址的浮点值。
执行脚本后射击发现子弹射击角度和相机角度不一致,修改[newmem+50]以及[newmem+54]后发现可以正确的修改子弹射击角度,那就可以确定这是我们所需要的效果。

在线游戏验证效果

我和好友在人机房间进行测试,让好友看我观战视角,然后我这边启动Hook脚本,发现在线观战是有效果的,并且在其他玩家的第三人称视角也是有效果的,在其他视角我的人物开枪方向和实际子弹射出方向不一致,由此可得出结论此功能效果是在线有效,而并非仅本地有效。


总结

这次逆向过程总的来说较为流畅,过程不复杂但是比较考验观察能力,对我来说也是一次不错的体验,第一次发贴不太熟练,文章有什么文本错误或技术解释错误请指出,我会及时修改,希望以上逆向过程对大家有所启发以及帮助。

看雪ID:Liv_T

https://bbs.kanxue.com/user-home-977625.htm

*本文为看雪论坛优秀文章,由 Liv_T 原创,转载请注明来自看雪社区

# 往期推荐

1、Alt-Tab Terminator注册算法逆向

2、恶意木马历险记

3、VMP源码分析:反调试与绕过方法

4、Chrome V8 issue 1486342浅析

5、Cython逆向-语言特性分析

球分享

球点赞

球在看

点击阅读原文查看更多


文章来源: https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458566947&idx=1&sn=1d270f94014d2135db1cecbd3ce22bd2&chksm=b18df1a986fa78bf07d39dc04cae651f85e4804b028eaed101682e4b587419daf84875459815&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh