首页
论坛
专栏
课程

[原创]任鸟飞谈逆向----FPS游戏CS无后座力快速射击

2019-5-28 14:46 1729

[原创]任鸟飞谈逆向----FPS游戏CS无后座力快速射击

2019-5-28 14:46
1729

在FPS游戏中,射击函数是调用非常频繁的,如果要对每一颗子弹的射击情况进行服务器验证的话,对服务器的压力是非常大的。

所以射击函数的很多重要信息都是在本地进行验证的。


下面我们通过篡改游戏代码的方式来达到  CS 单机 无限子弹,无后坐力,快速射击三种功能,来学习一下原理。

我们用CS创建一个awp房间,玩家可以在这个地图上拾取到狙击枪,我们要在这个地图中实现AK的无后座速射。

首先用CE对AK的子弹数量进行扫描,可以得到将近200个结果(如图)



分别对这些结果进行修改,发现其中的一个地址可以改变子弹的数量(如图)




用OD加载游戏,并在地址上下硬件写入断点,再次射击时游戏断下(如图)


我们可以看到子弹的数量是来源于eax的,而eax在上面来源于一个dec eax,也就是说每次代码经过这里,eax自减1。我们将这条dec改成nop就可以让子弹数量不变,如果将其改为inc的话,就可以让子弹越用越多,不过当子弹多到一个临界值就会归零,并从新递增。

我们返回到外层来观察一下这个射击函数(如图)



这个函数有3个参数,而且只有AK射击时会断下,这说明每一种枪的射击函数是独立的。对三个参数进行分析,可以得出前面两个参数是浮点数,而第三个参数为0。这里我们先记录一下前两个参数的数值分别为0.009624999和0.09549999。

下面我们用同样的方法得到狙击枪的射击函数(如图)


得出前两个参数为0.001和1.45,第三个参数也是0。第一个参数我们无法判断是什么,我们把两把枪对比后可以发现第二个参数很有可能是枪的射击间隔,也就是射击速度,因为这两个数值和两把枪实际情况是匹配的。为了验证这一点,我们将AK的第二个参数改为0.001(如图)(如图)


这是我们进行射击可以看到射击速度明显变得快了很多,但是枪的抖动也变得更加厉害。那么在解决了射击速度和子弹数量之后,我们的最后一个任务就是将窗口抖动解决掉。

为了验证抖动代码所在的位置,我们对AK的射击函数进行调用,发现单独调用这个函数窗口也会抖动,也就是说这个抖动代码是在函数内部的。

窗口抖动如果用代码去实现,其实就是对人物朝向的一种改变,在射击的同时对朝向值进行微调就可以达到抖动的效果。而这个朝向值往往是用浮点数存放的,所以我们在函数内部对浮点数写入代码进行分析。

在函数头部下断后,按F8逐条向下走,在1D901574处的函数的参数中有一些是对浮点数赋值的,我们观察下发现这些数值看起来都比较大,并不太适合做为一个朝向(如图)


于是我们继续向下分析,在1D901697 处可以看到一条浮点数写入代码,但是观察后发现这里写入的是射击间隔0.0099(如图)


继续向下看,我们发现函数马上就结束了,而结束前只剩下一个子函数没有进行分析(如图)




这个函数的参数都是浮点数,我们猜测这个函数就是窗口的抖动函数。这里有两种办法,第一种是到函数内部继续分析,找到抖动的精确代码,第二种是直接将函数NOP掉,那么同样不会经过抖动代码。我们选择简单粗暴的第二种,当然在nop函数前还要观察平栈情况。函数共有7个函数,而函数内部会retn 1C,正好是平衡的,所以我们要讲7个参数和CALL都NOP掉(如图)


之后我们再次进行射击,发现枪口非常平稳,这说明我们修改成功了。

但是当我们移动或者是跳跃,下坡时,发现这些改动都失效了,说明在不同的情况下射击经过的代码是不同的,为了能让人物在任何情况下都能无后座力速射,我们又改动了以下代码(如图)(如图)





这样我们就完成了对AK47的修改,大家可以尝试用同样的方法找到其他枪的无后座速射。




[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

最后于 2019-5-29 09:48 被-任鸟飞编辑 ,原因:
上一主题 下一主题
最新回复 (27)
CatGames 5 2019-5-28 16:37
2
0
111111111111前排卖瓜子
Sprite雪碧 2019-5-28 16:45
3
1
山总:我在mfc42里找了40分钟call
某人:我在mp.dll里找到了无限子弹
黑洛 1 2019-5-28 17:22
4
0
你确实找到了(客户端)里的无后坐力,但是很可惜,cs系列的游戏所使用的起源引擎这些数据都是在(服务器模块)里的。
Tennn 5 2019-5-29 01:34
5
0
9012年了 有点诚意 别拿单机出来 
yy虫子yy 2019-5-29 03:55
6
0
前来围观一下
whathhh 2019-5-29 09:41
7
0
9012年了 有点诚意 别拿单机出来 
-任鸟飞 2019-5-29 09:47
8
0
黑洛 你确实找到了(客户端)里的无后坐力,但是很可惜,cs系列的游戏所使用的起源引擎这些数据都是在(服务器模块)里的。
明显在讲单机啊,  这是新号帖,最简单的东西,请不要当成网游和联网游戏来看待
-任鸟飞 2019-5-29 09:47
9
0
Sprite雪碧 山总:我在mfc42里找了40分钟call 某人:我在mp.dll里找到了无限子弹
明显在讲单机啊,  这是新号帖,最简单的东西,请不要当成网游和联网游戏来看待
-任鸟飞 2019-5-29 15:33
10
0
whathhh 9012年了 有点诚意 别拿单机出来
新手帖见谅  会慢慢发更深入的
Sprite雪碧 2019-5-29 16:32
11
0
-任鸟飞 明显在讲单机啊, 这是新号帖,最简单的东西,请不要当成网游和联网游戏来看待

在FPS游戏中,射击函数是调用非常频繁的,如果要对每一颗子弹的射击情况进行服务器验证的话,对服务器的压力是非常大的。

所以射击函数的很多重要信息都是在本地进行验证的。

开篇说对服务器压力大所以是在本地计算,然后在mp模块里找到了数据,又说是在讲单机,是否矛盾?
俊的抽象 2019-5-30 09:08
12
0
高手!!!!!
缺口 2019-5-30 09:11
13
0
支持
-纽扣 2019-5-30 09:14
14
0
!!!!!!!!!!!!!!
俊的抽象 2019-5-31 09:25
15
0
166666
缺口 2019-5-31 09:27
16
0
学到了
0圈圈0 2019-5-31 09:29
17
0
支持
逍遥随风 2019-5-31 09:30
18
0
666
优雅-落寞 2019-5-31 13:46
19
0
学习
俊的抽象 2019-6-3 09:16
20
0
喜欢
逍遥随风 2019-6-3 09:23
21
0
内容喜欢
采臣·宁 1 2019-6-3 10:34
22
0
想起了以前玩拳皇找金手指的时光
呆逼东西 2019-6-4 09:50
23
0
都2019了,拿点手机和物联网相关的,别搞端游。现在谁还没电脑,网吧都倒闭了。
俊的抽象 5天前
24
0
真.钢精
优雅-落寞 4天前
25
0
200多个地址,挨个修改不会容易改崩溃吗,太多了吧
lukarl 4天前
26
1
看雪不是发这种外挂帖的地方,广海已经倒闭了,滚其他地方去,N年前的视频里截图出来,能用一辈子
天羽星尘 4天前
27
0
这种广告贴真的是, 天天拿单机打广告有什么意思嘛
辣条盟主 3天前
28
0
挺有意思的
游客
登录 | 注册 方可回帖
返回