Fps游戏子弹追踪思路教程

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

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

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

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

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

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

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的值是否一致等。只要我们明白了这种自瞄实现的原理,那么即可以实现各种各样的检测,当然还得注意不要影响游戏性能,例如可以在敌人被击杀后在触发检测,不要在开枪时检测。前者与后者的触发频率不同。

标签

发表评论