查看: 1199|回复: 2

[教程]FPS游戏子弹追踪(静默自瞄)原理分析

[复制链接]
发表于 2020-9-15 16:37 | 显示全部楼层 |阅读模式
非法程序、 2020-9-15 16:37 1199 2 显示全部楼层
前言:
    想必正在电脑前看此帖的你,已经非常了解了FPS游戏是辅助重灾区。其中最臭名昭著的就属透视自瞄了。今天我们大概来分析一下众多自瞄类中的静默自瞄实现原理,希望能给热爱学习的你提供一些帮助。同时也希望游戏厂商的反辅助能力愈来愈强!
测试图:

151521a7krkhz87c7yzr75.gif
简介:
普通自瞄、外部自瞄:
    读取敌人游戏内坐标XYZ,通过D3DXVec3Project等函数计算出敌人在屏幕上的坐标XY,然后使用mouse_event鼠标移动函数来驱动鼠标移动到敌人所在位置。这种自瞄一般游戏无检测。反辅助做的比较好的游戏厂商可能会对mouse_event进行hook检测等。再有就是行为检测(例如鼠标移动很平滑,在一条线上再或者就是没发子弹都打在同一个位置)
内存自瞄:
    一样是通过敌人坐标和自己坐标计算出准心的角度,然后把角度写入鼠标X、Y的内存地址即可实现内存自瞄(表现为准心瞬移到敌人的身体上),这种自瞄检测移动前后位置一对比就能知道是否是辅助了。例如:我的鼠标准心从敌人A经过敌人B转到到敌人C的身上,那么就算我鼠标移动的再快,那么准心也是会经过敌人B的身体的,而内存自瞄不会,内存自瞄是准心直接瞬移到敌人C上,这种自瞄非常明显,检测起来容易。

子弹追踪:
    通过修改子弹弹道、敌人受打击的面积、敌人被打击的CALL等来实现子弹追踪,这种子弹追踪比较变态。上面的普通自瞄、内存自瞄以及子弹追踪,我们放到下期再来讲解,本期主讲静默自瞄;

静默自瞄:
    这个怎么说呢,就是长得跟子弹跟踪一样,实际的作用却跟内存自瞄一样。不多解释,下面开始分析,然后自行理解吧。

环境:
    请准备好 fps游戏以及 内存修改器"cheat engine" 这里不提供下载地址了,百度很多,自行搜索。

实战:首先我们做个假设:射击是否击中敌人是依靠判断准心的位置是不是在敌人的身体上。如果假设成立,那么开枪时肯定是要获取准心的位置的,这个时候我们只要用CE查找是什么访问了准心地址(其实准心位置跟鼠标位置是一样的)。如下图,找到一些相关正在访问准心位置的汇编指令,这时我们开始进行测试!

1.找出鼠标X,Y也就是准心的地址;(这里搜索方法估计大家应该都会,不做复述)
2.找出是哪些指令访问了准心地址;
QQ截图20200915163546.jpg


3.因为之前分析过,实测这条命令nop后,不管你的鼠标如何上下移动,子弹始终都是打在一条横线上,也就是Y坐标0,因为准心赋值操作被我们nop掉了,所以子弹获取不到准心的位置就直接默认为0了,所以子弹只会左右散开,不会上下散开;如果将访问准心X的那条命令也Nop掉的话,你会发现你不管如何晃动鼠标,就算你的鼠标准心朝向天花板或者地板,那么子弹都是打在一个点上。

4.然后我们可以将敌人所在的位置计算成鼠标的XY并通过hook或者修改fadd dword ptr [esi+000005C4]命令的方式实现,不管如何晃动鼠标,那么子弹都会打在我们写入的XY的位置。


检测建议:通过针对这条命令fadd dword ptr [esi+000005C4]附近进行CRC代码检测,以及嵌套多层CRC。再者对多个鼠标X和鼠标Y的变量地址进行校验,对比X和Y的值是否一致等。只要我们明白了这种自瞄实现的原理,那么即可以实现各种各样的检测,当然还得注意不要影响游戏性能,例如可以在敌人被击杀后在触发检测,不要在开枪时检测。前者与后者的触发频率不同。

声明:分享此帖是为了让大家可以更好的理解FPS游戏的特色,以及针对FPS游戏安全做出调整,希望大家可以用在正路,切勿走歪路!

本帖面向学习人群为有编程基础的,对游戏安全方面有兴趣的。

发表于 2020-9-15 17:28 | 显示全部楼层
cccc8209 2020-9-15 17:28 显示全部楼层
要是官方把辅助拉闸了,拍死你!
回复

使用道具 举报

发表于 2020-9-16 08:47 | 显示全部楼层
邹小歪 2020-9-16 08:47 显示全部楼层
自打看了楼主的帖子,腰不酸背不疼,一口气上二楼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表