郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香终身VIP管理员QQ150330575项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 627|回复: 0

任鸟飞谈逆向----FPS无需换弹

[复制链接]
发表于 2019-5-27 10:13:35 | 显示全部楼层 |阅读模式
FPS游戏,变态外挂总是层出不穷,如飞天、蹲地、无后座力、加速等等。
那么为什么总是“无法杜绝”这一类变态功能呢?FPS游戏注重游戏体验,游戏公司为了保证玩家的流畅性和打击感,将许多重要数据放在本地客户端进行处理,这就给了外挂开发者有机可乘。如果在关键处修改一些逻辑代码,即可实现多样性的变态功能,夸张的说,只有你想不到,没有做不到,如下图变态功能:
全屏爆头:
                             
图1--任鸟飞谈逆向----FPS无需换弹.gif
一个完整的变态功能,往往是由多个功能组合而成,如果想要检测它,不妨分析一下实现原理:
功能一:子弹加速,先前有文章详细讲解,有兴趣的朋友可以翻看之前笔者的发文。
功能二:从图中可以看出,并没有换弹的动作和CD,修改了换弹相关的逻辑代码。
功能三:不难看出,该玩家明明打在空处,却有怪物不断死亡被爆头,应该修改了怪物受伤点相关的代码,或者通过明文发包发送了“打中怪物头部”的封包。
咱们今天来分析一下功能二:无CD换弹。
FPS的特性,通过多篇文章的讲解,相信大家都有了一定了了解(可查询笔者先前发文),这里不再重复。
从逆向者的角度出发思考,无非就以下几种方式实现无换弹效果:
1、修改逻辑代码,使其跳过换弹动作。
2、修改枪支“冷却”属性,在客户端中,一般在枪支属性,修改这个“冷却”属性可实现该效果
3、调call,假如游戏中存在着一个“满弹”call在换弹动作完毕后执行,那么可以直接调用该call使其加满子弹。
4、直接发包换弹,跳过本地动作,该实现原理不符合fps特性,但是不排除某些特殊游戏。
以cf为例子,由于换弹时间较快,数据变化也快,搜索较为困难。还是用老办法,写一个挂起程序,在换弹状态下将游戏挂起,保存内存数据再进行搜索。所用到的函数如下:
OpenProcess () //取得游戏句柄
ZwSuspendProcess() //通过句柄将其挂起,保存内存状态。
ZwResumeProcess() //通过句柄恢复挂起,还原内存状态。
CloseHandle () //释放句柄

尝试以第一种思路实现该效果,修改逻辑代码,那么内存中,可能会有一个标志位用作判断是否执行换弹动作完毕 或 是否执行换弹动作
假设“1”为换弹完毕动作,“2”为副武器正在换弹动作,“3”为近身武器正在换弹动作以此类推。不同的武器有不同的动作,而我们只需要让他执行换弹完毕的动作即可。正在换弹的过程中,将程序挂起保存内存状态,搜索未知的初始值,如下几图所示:
Q73T37S@}WH[KFJ)]5[W8.png


2.png


3.png
还原内存状态后,搜索变化的数值,来回重复多次,塞选地址。
经过反复塞选,得出一个:
换弹时数值为5
换弹完毕的一瞬间为1
通常时数值为2的值
不同的枪支,数值都不一样,唯一相同的是,在换弹完成的一瞬间,数值都为1
不难猜测,当该地址数值为1的时候,即执行换弹完毕动作。
4.png
直接尝试锁定该地址为1,即可实现无CD换子弹的效果,如下图所示:
图2--任鸟飞谈逆向----FPS无需换弹.gif
本篇到此结束,下次将深入分析全屏爆头的实现。
郁金香外挂教程,学习中...
回复

使用道具 举报

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

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2019-8-19 17:40 , Processed in 0.052034 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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