首页
社区
课程
招聘
[原创]浅谈FPS子弹追踪实现以及防护
发表于: 2020-4-27 19:44 28978

[原创]浅谈FPS子弹追踪实现以及防护

2020-4-27 19:44
28978

        开场白和表情包我就不加了了,文采和资源没这么丰富,直接步入正题。本次聊聊的功能为目前fps较为热门功能:子弹追踪。


        该功能呢早期主要是火在pubg系列的游戏,因为在类似pubg系列游戏中,自瞄显得稍微鸡助,然后某些大佬就弄出了这么一个功能,子弹追踪。其实它的一个效果与自瞄不同,自瞄的表现效果为准星死死锁住敌人。可子弹追踪的表现效果为子弹死死锁住敌人,也就是说准星在不需要锁住人的情况下开枪也能对敌人造成伤害,下面放一个图直观的感受一下。

                                                                    

        该gif为手机录制,所以画质很渣,但是不影响看效果。可以明显看到他虽然没有瞄准敌人,但是敌人却被打出了健康的绿色血液,这就是子弹追踪的效果。

       效果我们看到了,那么该功能的一个实现原理是什么呢?顾名思义,子弹追踪就是子弹追着人打嘛,只要对子弹下手就能实现了,看似如此可真是如此吗?那我们换一个思维模式,我们当前要实现一个功能是不是准星在无需瞄准人的前提下开枪也能对敌人造成伤害?那么只要我们实现了这个功能,那我们的这个功能是不是也能称之为子弹追踪?这两句话很关键,大家细品。只要弄清这两个问题后就不会再被‘’子弹‘’两个字给骗到了。另外,如果大家常年混在看雪里褥羊毛的话就会发现,其实早期就有人发布过一种子弹追踪的实现方式,那就是飞郁培训的大佬讲师任鸟飞。这里就直接上帖子链接,有兴趣的大家可以看看:https://bbs.pediy.com/thread-251701.htm

除了修改击打区域达到子弹追踪,还有什么方法能达到吗?俗话说“条条道路通罗马”,那么该功能实现的方法肯定不止一种,就看你脑洞能不能想到。下面呢我讲举一种实现方法来讲解。


        我不知道大家有没有仔细思考过一个根源问题,那就是为什么FPS存在准星这个东西?答案很简单:用来瞄准目标。所以我们能准星指哪打哪。可是问题来了,请问游戏是怎么知道我们准星瞄准的是哪里?打的是哪里?请注意,这里我说是两个问题。我相信大部分人都没有真正去思考过这个问题,因为他们基本上都把这两个问题归结为一个问题。其实在我们不断深层的挖掘这个问题的时候,答案已经显得容见。那就是游戏会不会把我们从瞄准到射击敌人的这个过程分为两个部分,一个是准星的变动(准星的变动所带来的的影响为视角的变动,下面我都以视角来描述),另一个是实际射击。为了确认这两个想法是否正确,我们用游戏实践一下。第一步得找到视角的坐标,也就是鼠标XY。

                                      

不难发现随着鼠标XY变化,视角也在变化,故第一个想法成立。我们来看看第二个,既然用于实际射击,那么在我们开枪的时候鼠标XY必定作为参数传进来,此时我们只需要找到开枪call下断,然后开一枪后看一下堆栈是否存在鼠标XY即可。

                          

断点断下后往下一翻,果然有鼠标XY,那么就说明从瞄准到射击的确分为两个部分。当我们确认这两个想法之后,好玩的事来了。我们回忆一下,我们是不是要实现一个准星在无需瞄准人的前提下开枪也能对敌人造成伤害的功能,那么我们是不是可以做一下手脚?当我们开枪的时候我们不用游戏本身所提供的视角坐标,而是用我们提供的坐标,这样就能在不影响原视角的情况下让子弹往我们提供的坐标射击,于是文章开头的那个效果图就出来了。至此,子弹追踪就已经实现。不过这种子弹追踪的实现方式在江湖中有它自己的名字-----视角追踪或静默自瞄。这里说一下,之所以也称之为静默自瞄,只因为该追踪本质上还是属于自瞄,只不过是我们原视角在不产生变动的情况下进行了自瞄。

        分析也分析完了,那么怎么去实现呢?两种方式:

第一种、需要大量的逆向功底,就是分析开枪call在什么时候被赋值了实际射击坐标,然后hook即可实现。

第二种、有句古话“擒贼先擒王”,既然开枪的时候需要去读取视角坐标,那么我们就直接在访问视角坐标的代码段进行处理岂不美哉。

Tip: 第二种方法虽然不如第一种方法要求的技术含量高,但是根据本人这段时间的测试,发现很多游戏都能实现,并且危害性大。故讲解该种方法的实现,也希望游戏产商早日和谐该功能。

        我们来访问一下视角坐标

                                                                           


发现有三条,而且无论我们改变视角还是开枪,都不会出现新的访问,那么我们只能从这三条处理。我们抛开第三条不看,因为第三条是属于给视角坐标赋值语句,我们要看的只是访问语句。这样就只剩下两条了,我们先点击第一条看看。



我们再来看第二条语句的


         

       这两段代码几乎相同,都是把视角坐标取出来后赋值给另一个地址。经过我们上面分析,瞄准和射击分为两个部分,他们都是需要去访问读取视角坐标的,巧的是这里对视角坐标访问恰好就是有两个,那么我们可以怀疑一下这两个语句分别就是对应瞄准和射击。我们直接nop看效果,先nop第一个

                                                             

                                                                  

        因为eax和eax+4分别存储视角Y和X,所以得nop两条语句。接下来我们进入游戏看看

                                     

        我们发现nop之后虽然我们没法改变视角,但是我们会发现,鼠标XY竟然在改变,然后我们开枪,发现子弹依旧是打在墙上,这就尴尬了。。。。。我们添加一个机器人,我们走到他的面前,我们把准星对准他的头部,然后重新nop该处代码。

                                     

神奇的一幕来,无论我们朝他头部开多少枪,就是打不了。为什么?我们还原代码


                                       

        发现我们准星此时指的是这个位置,此时我们把视角瞄准敌人后再次nop

                                     

        就变成了这样,我们用手枪打一下。

                               

发现敌人被我们爆头了。我们就能百分百确认了,该代码段为控制视角,真实控制射击的是第二条访问语句或者直接是鼠标XY。现在呢,已经可以写代码了,不过这里我只提供关键代码,其余代码大家可以自己完善。

    在研究的时候我们发现一旦nop之后,视角直接发生改变,而且直接把人物指向0的位置,是因为我们nop后视角坐标得不到赋值,就一直为0。那我们我们想让我们视角保持不变怎么办?那就得需要一个变量来记录。当我们开枪的时候,先把当前的视角坐标记录,然后把这个记录的值写入视角坐标,这样就达到一个锁视角的效果,然后再通过自瞄算法把自瞄角度算出来再写入鼠标XY中,最后实现追踪效果,追踪完毕后再恢复代码。那么如何确定视角坐标地址呢?

        首先我们已经找到控制视角的代码段了,不难发现,控制视角的关键语句为的两条

        那么我们可以直接采用hook技术,把记录的值写入这两地址里即可。以下为部分代码

最后于 2021-2-7 09:32 被kanxue编辑 ,原因:
收藏
免费 10
支持
分享
最新回复 (27)
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
牛逼!
2020-4-27 20:09
0
雪    币: 12848
活跃值: (9133)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
这不就是slient aim,跟pubg那种朝天打就能爆头的子弹追踪有什么关系?别人视角里面看你照样是朝头一帧拉枪
而且上面CE改的是CSS,下面带了一张不知道哪来的CSGO外挂的图,宁搁着猜谜呢?
2020-4-27 20:45
0
雪    币: 113
活跃值: (7461)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
4
hzqst 这不就是slient aim,跟pubg那种朝天打就能爆头的子弹追踪有什么关系?别人视角里面看你照样是朝头一帧拉枪 而且上面CE改的是CSS,下面带了一张不知道哪来的CSGO外挂的图,宁搁着猜谜呢?
第一个问题,pubg那个是另一种追踪,难不成我得把所有追踪方式写出来么
第二个问题,都是起源引擎,差别不大,我放CSGO,是因为我当时就写csgo
2020-4-27 20:48
0
雪    币: 665
活跃值: (1046)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第三个问题,都是搞挂不行卖教程的.差别不大.放CSGO,是因为大家都拿这个忽悠人
2020-4-27 21:11
0
雪    币: 458
活跃值: (1882)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
子弹追踪 ≠ 开枪时视角不变的自瞄
2020-4-27 22:17
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
文章还可以吧,不知道一群所谓的大神在冷嘲热讽个啥
2020-4-27 22:33
0
雪    币: 20
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
人在塔在 文章还可以吧,不知道一群所谓的大神在冷嘲热讽个啥
部分东西都是复制别人的,你说嘲讽啥!
2020-4-27 22:54
0
雪    币: 222
活跃值: (185)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
9
全屏秒杀 如何实现?
2020-4-27 23:24
0
雪    币: 2172
活跃值: (3690)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
10
2020-4-27 23:53
0
雪    币: 35
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11

你这个不叫子弹追踪。你这个叫拉闸静默。
PBug Hook位SIG:E8 ???????? 0FB6 D0 49 8B ?? E8 ????????F3 0F59 ?? ????????

最后于 2020-4-28 04:58 被KomiMoe编辑 ,原因:
2020-4-28 04:29
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
666
2020-4-28 08:24
0
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
服务器检测的准则就是数据包发送过去的射击角度和坐标,这个也是别的玩家"看到"的结果.
所以,你本机是"没有镜头对着射击点",但是在别的玩家眼里,一样是看到视角急速转移的.
要和谐这些作弊也很简单的...和吃饭一样简单,就看开发商想不想了.
2020-4-28 12:49
0
雪    币: 917
活跃值: (1860)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
子弹不是独立碰撞模型吗?
2020-4-28 17:50
0
雪    币: 545
活跃值: (247)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
感谢分享,顺便一提,挑问题不如自己动手解决问题
2020-4-28 22:49
0
雪    币: 2316
活跃值: (4732)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
他们挑是以为lz把思路发出来怕被河蟹
2020-4-29 12:52
1
雪    币: 917
活跃值: (1860)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
其实就是把自瞄里面准星持续指向目标改为开枪时瞬间指向目标嘛,其实我倒是向看看对弹道的修正,有没有算法上的突破
2020-4-29 16:47
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
请联系我
2020-5-2 21:55
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
q626077421
2020-5-2 21:55
0
雪    币: 24
活跃值: (1353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
垃圾广告贴,鉴定完毕
2020-5-5 09:29
0
雪    币: 250
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
支持一下
2020-5-12 14:07
0
雪    币: 0
活跃值: (376)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
写鼠标角度?不出意外的话很多游戏都检测这个吧,是不是等于把以前的一直锁人改成了开枪瞬间锁人,然后又改变了视角,自己看不到视角的变化?
2020-5-27 16:30
0
雪    币: 36
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
这种确实叫拉闸静默自瞄。纯正的子弹追踪,顾名思义,就是子弹追踪。而且还很简单就能实现。
2021-9-2 23:18
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
走过路过来看看
2021-9-2 23:26
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
为什么你不hook第二段代码 我感觉还简单点
2022-11-5 23:00
0
游客
登录 | 注册 方可回帖
返回
//