首页
社区
课程
招聘
[原创]FPS全屏秒杀以及全屏飞刀漏洞的逆向分析
发表于: 2019-11-19 20:45 18058

[原创]FPS全屏秒杀以及全屏飞刀漏洞的逆向分析

2019-11-19 20:45
18058

一、引言  

二、正文  

          1、全屏飞刀原理及实现

          2、全屏秒杀原理及实现

三、总结  

四、白嫖


分析对象:CS1.6 5Eplay 版本

编程工具:Visual Studio 2019

工具:CheatEngine 6.7

        不知道有多少人是经历过穿越X线的神仙时代。我只记得当时最疯狂的是一个房间充满着各种奇葩的科学家,例如飞天、遁地、隐身、加速、子弹穿墙,飞刀等等,但是,最有意思的还是Bug不掉血的卡箱和卡墙。这些东西虽说是游戏的漏洞造成的,但是当时那个时候玩起来依旧是很开心,毕竟当时的游戏环境还是很认可的,武器属性的平衡,玩家之间的默契度,战队里的开黑,都让我们对当时的一些保留着一无比忘怀的怀念。

                                                                     

                                                               

                                                               

                                                                                                                               

                                                                                                                  穿越X线早期图片

        煽情完了,咱们开始正题。今儿咱们来说说远古时期的大发明-全屏飞刀和全屏秒杀。这篇文章依旧使用被无数次仙人跳的游戏来操作,嗯,没错就是CS1.6。

                                                                                                                      

        在我们干事之前,稍微对游戏的一个动作进行思考,这里咱们先讲全屏飞刀,再讲全屏秒杀。

        这里我总结了三种思路:1、通过游戏播放的音效来寻找。细心的同志可能会发现,挥刀的时候,打中和没打中是有两种音效播放的,所以我们只需要在游戏目录下找到这个音效的名字,然后去文件操作相关的api下断,看他什么时候去访问这个文件就行了,断下后直接返回应该就直接能找到关键代码处。2、只要是个有脑子的人,手里拿着枪的时候可以砰砰砰的射击,但是切刀之后就没法实现击中效果了。那么他肯定会有一个关键跳转来判断你当前武器是否是刀(有可能判断当前手持的模型ID),这个时候找到这个跳转,搞就完事。3、都知道鼠标控制开火,那么鼠标消息肯定会经过关键代码,这个时候直接鼠标消息下断后去分析就行了,但是相比前两种方法,要分析的代码量更多,头发多的人推荐尝试。

        这里我用的是第二种方法,但是其他方法依旧希望大家去试试,毕竟技多不压身(其实就是懒得去弄)。

                                                                                                              

        在正式去找的时候我们先来整理一下思路。首先我们要找的是全屏飞刀,那什么是全屏飞刀?顾名思义,就是当我们拿着刀的时候不用贴着敌人也能打中敌人。此时我们是不是很容易去联想到攻击call?因为你的刀能不能攻击到别人是取决于你的攻击call的代码流程,所以在内部代码中极有可能存在着某条跳转用来判断你这个攻击是否有效,如果有效,给你击中;如果无效,直接给你ret。下面是给出的伪代码:



        理论就说这么多,咱们直接找吧!


                                                                                            

        首先咱们要找到游戏对人物处理血量的关键代码处,然后下断返回,就能看到攻击call了。很简单,找到血量->访问血量->射他->出现代码->记录代码->甩进OD->开始分析其中前5步我就不演示了,直接放甩进OD的部分。

       给他下个F2断点,然后用刀划他(记住,一定要用刀划,因为我们先在是要找基于刀的攻击代码)

                          

                                                                           

        这里我返回5层,因为我分析过,所以知道这5层内必有我们要找的东西,但是在实际分析其他游戏的时候,建议大家多返回。

        在开始分析这些call之前,我先和大家说两点非常关键的问题。

         1)、我们从哪一层开始分析?

        从最外层。为什么呢?很简单,因为越内层的call往往是对攻击处理,而不是对开始攻击逻辑的处理。实在不理解的话,咱们想一下咱们在写某个动作代码的时候,是不是先判断逻辑操作,再去执行核心代码?

        2)、代码的执行逻辑

       这个稍微有点难解释,因为他和第一个问题有小牵扯。如果我们对人物血量处理下断后返回层数不够多会怎么样?答案是,我们只得到了他攻击call处理代码。意思就是说当前得到的所有call是处理已经成功击打后的代码,而不是处理开始攻击逻辑的代码,导致在最外层下断的时候会出现一个问题,单纯挥刀不会断下,开枪才会断下(因为你怎么开枪都会击中)。解决的办法就是在人物血量处理地方下断后疯狂返回上一层并且记录,然后挨个下断挥刀,能断下说明找到了,断不下就再找。

       接下来依旧是我最喜欢的摊牌环节。

                                                                                    


            其实在这5层中,第5层就是处理开始攻击逻辑的call,其他的全是成功击打的call。因为只有在第5层call下断挥刀的时候才会断下,其他call下断挥刀不断。不信的同志可以去试试,接下来我们就来分析第5层call。

           我们现在先下一个断。

 

           然后我们对着墙或者人物划一刀(可以击中的状态),发现断点断下了。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-11-24 23:49 被PlaneJun编辑 ,原因:
上传的附件:
收藏
免费 16
支持
分享
最新回复 (30)
雪    币: 224
活跃值: (88)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
表情包不错
2019-11-19 20:48
0
雪    币: 253
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
思路清晰,语言优秀!尤其是开篇的感情切入很好!给你个赞
2019-11-19 20:49
1
雪    币: 5836
活跃值: (1913)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
支持
2019-11-19 21:41
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
5
感谢分享!mark了
2019-11-20 09:42
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
有源码的东西拿OD在那鼓捣半天何必呢
https://github.com/nagist/cs16nd
https://github.com/s1lentq/ReGameDLL_CS
https://github.com/FWGS/cs16-client
2019-11-20 09:59
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
 表达能力优秀
2019-11-20 10:10
0
雪    币: 141
活跃值: (7486)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
8
hzqst 有源码的东西拿OD在那鼓捣半天何必呢 https://github.com/nagist/cs16nd https://github.com/s1lentq/ReGameDLL_CS https ...
大表哥牛逼
2019-11-20 10:59
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
ganxie分享
2019-11-20 14:16
0
雪    币: 6096
活跃值: (5515)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
10
感谢分享,学习了!
2019-11-20 16:12
0
雪    币: 8
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有前面5步就好了
2019-12-1 23:06
0
雪    币: 141
活跃值: (7486)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
12
wx_x_931870 有前面5步就好了[em_13]
因为前5步很多文章都有讲解,所以直接跳过了
2019-12-2 07:48
0
雪    币: 785
活跃值: (2358)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
思路清晰,分析清楚需求找到突破点后面的就好弄了。
2019-12-2 14:18
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
表情包 真是 亮了。。。
2019-12-27 15:52
0
雪    币: 1237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
果然思路是最重要的
2019-12-27 17:22
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
hzqst 有源码的东西拿OD在那鼓捣半天何必呢 https://github.com/nagist/cs16nd https://github.com/s1lentq/ReGameDLL_CS https ...
为了大表哥上来回复
2019-12-27 17:47
0
雪    币: 106
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
逆向该如何入手呢?
2019-12-30 13:58
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
hzqst 有源码的东西拿OD在那鼓捣半天何必呢 https://github.com/nagist/cs16nd https://github.com/s1lentq/ReGameDLL_CS https ...
楼主的分析思路比源码更重要。你可知 授之以鱼不如授之以渔?
2019-12-31 13:14
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
19
sunsjw 楼主的分析思路比源码更重要。你可知 授之以鱼不如授之以渔?
我只是想说这篇分析对整个游戏一知半解,暴力修改别人服务端还以为自己发现了重大游戏漏洞,说难听点有点类似“民间科学家”。这游戏的漏洞要是真那么容易找那我天天去v社总部领奖。

别人找漏洞是各种黑盒白盒测试,利用漏洞也要发个伪造包什么的。好家伙你的找漏洞方式是直接把人家服务端代码给改了。
最后于 2019-12-31 14:19 被hzqst编辑 ,原因:
2019-12-31 14:18
0
雪    币: 141
活跃值: (7486)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
20
hzqst sunsjw 楼主的分析思路比源码更重要。你可知 授之以鱼不如授之以渔? 我只是想说这篇分析对整个游戏一知半解,暴力修改别人服务端还以为自己发现了重大游 ...
这个是确实,因为CS起源版本以上都是由服务器\客户端类,而这种功能基本是服务类,所以在多人游戏没什么用,但是可以从HOOK引擎下手。分析这东西最起码能提高一下自己分析能力而已。另外我觉得漏洞也并非全是黑盒白盒测试,在游戏方面,能破坏游戏平衡均属于漏洞
2019-12-31 14:51
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
21
PlaneJun 这个是确实,因为CS起源版本以上都是由服务器\客户端类,而这种功能基本是服务类,所以在多人游戏没什么用,但是可以从HOOK引擎下手。分析这东西最起码能提高一下自己分析能力而已。另外我觉得漏洞也并非全是 ...
漏洞是原来代码写好的时候就存在的,改人家游戏代码属于人家明明没洞非要给他拿个挖掘机挖个洞出来。。都上挖掘机了他能挖不出洞吗。。。
2019-12-31 17:07
0
雪    币: 141
活跃值: (7486)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
22
hzqst 漏洞是原来代码写好的时候就存在的,改人家游戏代码属于人家明明没洞非要给他拿个挖掘机挖个洞出来。。都上挖掘机了他能挖不出洞吗。。。
所噶
2019-12-31 17:20
0
雪    币: 6124
活跃值: (4661)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
23
都是跟谁学的?挂就挂为什么要说是漏洞?漏洞起码得有测试过程吧?修改代码算什么??打洞?
2019-12-31 19:15
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
支持
2020-3-19 10:23
0
雪    币: 1237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
老哥,如果是联网的或者是局域网的,分析过怎么搞吗?攻击处理也是在客户端然后把结果发给服务吗??
2020-3-20 09:59
0
游客
登录 | 注册 方可回帖
返回
//