[原创]FPS网络游戏自动瞄准自瞄外挂漏洞分析以及实现

本文详细介绍了FPS游戏自动瞄准外挂的漏洞原理,通过CE和OllyDbg工具分析游戏内存,找出了鼠标准星坐标、人物数组及结构。文章讲述了如何确定鼠标坐标内存地址、人物数组分析以及人物结构,提供了自瞄算法的计算方法,旨在教育读者理解漏洞原理而非破坏游戏平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x0. 前言

来到论坛已经有一段时间了,目前大三学生,乐于分享知识,看到论坛招聘讲师的帖子,于是想发点文字,分享知识,不知道能不能申请精华。

新年刚刚过去,不知道大家亲戚走没走完,新的一年里,祝大家财源广进,身体健康,万事如意,一切都会好起来的!

 

0x1. 了解FPS游戏自瞄漏洞

经常玩游戏的朋友,应该知道FPS游戏,例如:穿越火线,逆战等等,他们的特点就是以第一人称视角进行操作人物,屏幕中间会有一个准星,通过准星瞄准敌人进行攻击以达到击杀效果和游戏体验。

 

由于FPS游戏的特殊游戏体验,所以使得很多不法分子利用逆向知识开发了很多自动瞄准的工具,破坏了游戏平衡。具体的原理如下:

1.找到存放鼠标准星的坐标基地址

2.找到人物数组基地址

3.找到人物数组下人物的相关属性偏移:血量,名字,坐标,阵营等

4.通过阵营判断是否为敌人,通过血量判断是否死亡,利用算法将自己的准星坐标修改为敌人所处的位置,实现自动瞄准

 

0x2. 利用某FPS网络游戏进行分析

 

用到工具:CE,OllyDbg

 

首先,我们分析了解一下FPS鼠标准星的知识,并且找出他的内存地址:

 

搜索前,我们要理清思路,那就是如何去定位鼠标的坐标,怎么定位比较方便。因为游戏分为鼠标X和鼠标Y两种坐标,鼠标X即左右的坐标,鼠标Y为上下坐标,由于左右坐标在游戏中转一圈无法确定坐标数据是否增大还是减小,所以我们通常分析鼠标的Y,即上下坐标。

 

针对鼠标Y坐标变动的情况分析:

 

无鼠标准星特殊加密:

1.向上移动准星坐标增大,向下移动准星坐标减小

2. 向上移动准星坐标减小,向下移动准星坐标增大

 

鼠标准星特殊加密: 

鼠标准星上下无规律变动

 

对于没有鼠标准星特殊加密的游戏,我们通常在CE工具中搜索增加或者减少

对于存在 鼠标准星特殊加密的游戏,我们通常在CE工具中搜索变动或者未变动

 

另外,由于坐标等数据精度都是比较高的,所以我们通常搜索浮点数或者双浮点数

 

-----------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                               ①开始分析鼠标坐标内存地址

 

我分析的游戏是创世战车,这是一款FPS射击网游,由于我已经提前逆向过,所以我们的CE操作顺序依次是:

 

附加进程->切换为搜索浮点数->搜索未知的初始值 ->鼠标向上搜索增加 ->鼠标向下搜索减少

 

然后 鼠标向上搜索增加 ->鼠标向下搜索减少重复循环过滤,最后我们剩下9个内存地址,通过修改得知:0x23E3588  是我们的鼠标Y内存地址

 

 

 

此时,我们已经得到了鼠标Y的内存地址,这个时候,我们不必去搜索鼠标X的内存地址,只需观察该地址相邻或者附近的地址值的变化即可得知鼠标X

因为鼠标XY坐标在游戏中存放是连续的,类似我们在上课写C语言结构体里面变量数据内存地址是连续的一样的道理

 

那么如何查看相邻地址内存呢?CE有个自带的功能:

 

 

按照图示的标注的顺序,在下面的窗口编辑框内填入相关地址:

 

 

 

在这里解释一下为什么我们需要填入23E3500,因为鼠标Y地址是: 23E3588,鼠标X在附近的位置,所以我们存在一个取值范围,这个范围不是很大,所以我们填入了一个估值,填入后定义结构体,一切回车默认即可。

 

通过观察和修改,我们发现当修改23E3584这个地址时,鼠标的X准星会变动,由此我们得知了该游戏的鼠标坐标内存地址,即:

 

鼠标X:Crossout.exe+1963584

鼠标Y:Crossout.exe+1963588(该游戏基地址存放是以模块名+模块偏移存放的)

 

 

 

至此,我们的鼠标坐标内存地址分析完毕,当然了,分析这个还不够,下面我们来分析一下人物数组及其结构:

 

-----------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                               ②开始分析人物数组

 

说到人物数组,我们必须要了解一下游戏中人物对象的存放形式,一般均为数组, 优点:


1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便

 

而且这也是我们C/C++语言中常用的写法

 

那么我们来分析一下该游戏,由于该游戏没有子弹数量,所以我们可以通过血量来分析该游戏的数据:

 

由于血量精度也比较高,所以存放形式也多为浮点数或者双浮点数,由于精度过高,所以我们不能够搜索精确数值,改为搜索两者之间的数值:

 

 

通过撞击建筑物或者其他车辆,使自身血量变动,然后过滤到血量地址:

 

 

这个时候,我们需要用到另外一款调试器:OllyDbg<

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值