开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2337|回复: 5
收起左侧

[图文教程] FPS游戏CS无后座力快速射击

[复制链接]
发表于 2019-5-28 13:29:22 | 显示全部楼层 |阅读模式   吉林省通化市
在FPS游戏中,射击函数是调用非常频繁的,如果要对每一颗子弹的射击情况进行服务器验证的话,对服务器的压力是非常大的。
尤其是CS这种局域网游戏,对于早些年的低配置电脑来说,这种压力更加难以承受。所以射击函数的很多重要信息都是在本地进行验证的。
下面我们通过篡改游戏代码的方式来达到无限子弹,无后坐力,快速射击三种功能。
我们用CS创建一个awp房间,玩家可以在这个地图上拾取到狙击枪,我们要在这个地图中实现AK的无后座速射。
      首先用CE对AK的子弹数量进行扫描,可以得到将近200个结果(如图)


1.png


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

2.png


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

3.png


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

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

4.png


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

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


5.png


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


6.png


7.png


这是我们进行射击可以看到射击速度明显变得快了很多,但是枪的抖动也变得更加厉害。
那么在解决了射击速度和子弹数量之后,我们的最后一个任务就是将窗口抖动解决掉。
为了验证抖动代码所在的位置,我们对AK的射击函数进行调用,发现单独调用这个函数窗口也会抖动,也就是说这个抖动代码是在函数内部的。
窗口抖动如果用代码去实现,其实就是对人物朝向的一种改变,在射击的同时对朝向值进行微调就可以达到抖动的效果。
而这个朝向值往往是用浮点数存放的,所以我们在函数内部对浮点数写入代码进行分析。

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


8.png


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


9.png



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



10.png



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


11.png



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

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


12.png


13.png


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

评分

参与人数 1好评 +1 精币 +10 收起 理由
紫旭 + 1 + 10 感谢分享,很给力!~

查看全部评分

签到天数: 4 天

发表于 2023-9-22 12:52:53 | 显示全部楼层   山东省*
66666666
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2023-9-22 12:26:46 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 22:22:28 | 显示全部楼层   山东省青岛市
老师~留个联系方式啊!我想跟你学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 22:16:09 | 显示全部楼层   山东省青岛市
这是真牛啊!这是高手~高手
回复 支持 反对

使用道具 举报

发表于 2019-5-30 10:09:00 | 显示全部楼层   吉林省通化市
66666666
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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