• 了解FPS游戏自瞄漏洞

经常玩游戏的朋友,应该知道FPS游戏,例如:穿越火线,逆战等等,他们的特点就是以第一人称视角进行操作人物,屏幕中间会有一个准星,通过准星瞄准敌人进行攻击以达到击杀效果和游戏体验。
由于FPS游戏的特殊游戏体验,所以使得很多不法分子利用逆向知识开发了很多自动瞄准的工具,破坏了游戏平衡。具体的原理如下:
1.找到存放鼠标准星的坐标基地址
2.找到人物数组基地址
3.找到人物数组下人物的相关属性偏移:血量,名字,坐标,阵营等
4.通过阵营判断是否为敌人,通过血量判断是否死亡,利用算法将自己的准星坐标修改为敌人所处的位置,实现自动瞄准

  • 利用某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
我们附加进程,使用dd指令,查看血量地址,然后下硬件断点,寻找数组和基地址

程序断在了0x011299D9位置处,观察寄存器,我们得知eax为人物的临时对象地址,0x0C0为我们的血量地址偏移:0x39EE8FF0 + 0x0c0 = 0x39EE90B0 (eax)

所以我们继续去追eax,通过单步call,我们发现eax实际上来源于上方的Call的返回值:


我们进入Call去追踪Eax来源,通过追踪我们发现了数组:

并且我们发现了数组的基地址:

关于最终数组的地址的寻址过程,在这里不再赘述,我只放出大概的OD逆向的注释,大家对照一下就可以了:


最终通过我们的分析得到数组的表达式:

dd [[1C6E1F0]+(([[23E20D4]*7c0+2BE8+23CFD80]&0FFF)+2aad)*c]+0c0

其中,通过我们的分析,得知:0x23E20D4这个地址存放的使我们自身的数组的下标,所以,表达式可转换为

dd [[1C6E1F0]+(( n*7c0 + 2BE8 + 23CFD80 ]&0FFF)+2aad)*c]+0c0 n为下标

分析完数组之后,我们接下来就来分析人物的结构了!
未完待续…

【游戏逆向】FPS网络游戏自动瞄准漏洞分析以及实现相关推荐

  1. 【游戏逆向】FPS网络游戏自动瞄准漏洞分析以及实现二

    开始分析人物结构 由于人物结构是一个结构体,该结构体的起始地址为人物对象地址,所以,我们继续用CE的结构体分析工具去分析人物对象地址,也就是刚才的eax地址: 通过观察,我们立刻就得到了人物名称的偏移 ...

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

    0x0. 前言 来到论坛已经有一段时间了,目前大三学生,乐于分享知识,看到论坛招聘讲师的帖子,于是想发点文字,分享知识,不知道能不能申请精华. 新年刚刚过去,不知道大家亲戚走没走完,新的一年里,祝大家 ...

  3. 【游戏逆向】检测加速辅助案例分析

    加速类辅助会对游戏平衡造成极大的破坏,这类辅助会通过HOOK api的方式来达到修改游戏对时间判断的目的,一般情况下,在R3层,这类辅助会在 QueryPerformanceCounter TimeG ...

  4. 游戏skr而止,漏洞周而复始 —— 游戏合约漏洞全面汇总 | 漏洞分析连载之六

    安全,区块链领域举足轻重的话题,为什么一行代码能瞬间蒸发几十亿市值?合约底层函数的使用不当会引起哪些漏洞?游戏合约中又存在哪些漏洞? 「区块链大本营」携手「成都链安科技」团队重磅推出「合约安全漏洞解析 ...

  5. FPS游戏自动瞄准敌人头部?是如何实现的(三)准星算法与实现自动瞄准

    准星算法 知道了准星的变化规律: 1.准星水平位置摇摆角 正北是π,逆时针逐渐减小,正南是0,继续逆时针减小到正北为-π π和-π重叠 (正北方向Y轴逐渐增加,正东方向X轴逐渐增加) 2.准星高度位置 ...

  6. [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

  7. [安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

  8. X64驱动开发和保护+X86X64游戏逆向分析课程

    老师教学范围和方式:木塔负责PC电脑端C语言基础和端游逆向分析部分内容,采用录制+部分直播课程教学,晚上还有专业老师讲解和指导.我要的是质量不是数量.老师备课,设计课件需要时间的. 学习周期:PC端3 ...

  9. 【游戏逆向】FPS游戏自瞄追踪及原理算法

    FPS类游戏的自瞄和爆头效果看起来很奇妙,但实际情况下,算法却并不难,而且该功能也不算变态功能,只不过是通过内存数据计算出精准的准星朝向,我们知道计算器的计算速度,一个精确的角度而已,那么自瞄和爆头是 ...

最新文章

  1. PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换
  2. java 全局变量 内存不回收_Java的内存 - 内存回收
  3. vba 窗体所有组件 enabled_Csharp设计闪烁窗体制作教程
  4. 模拟退火算法通俗讲解
  5. 数据库开发——MySQL——慢查询优化
  6. C# Jpush 极光推送消息推送
  7. mysql5.7.24 rpm安装_centos7下安装mysql5.7.24
  8. 查看使用yum安装的软件路径
  9. 微信读书产品调研报告
  10. 数码大师2013破解补丁|数码大师2013白金版注册破解补丁下载(附数码大师2013白金版注册码)
  11. Oracle基础--PL/SQL编程基本语法
  12. 孤独最高境界:这款单人VR游戏竟能带来多人组队体验
  13. python网络爬虫——robots协议
  14. openMSP430 介绍
  15. 检测蛋白质构象是否合理————Ramachandran plot(拉氏图)
  16. java 数组声明并初始化_Java数组的声明与初始化
  17. Python-练习 42. Is-A, Has-A, 对象和类
  18. windows10输入法打字没有选字框,【已解决】
  19. 性能测试-实例讲解VU、RPS、RT公式换算
  20. c语言 输入学生的姓名或学号 查询成绩,1、学生信息的录入。如:学生编号、学生姓名、学生成绩。 2、学生信息的查询及显示。如:按学号查询、按成...

热门文章

  1. DMA是什么?——帮 CPU 跑腿的 DMA
  2. Makefile与export
  3. EPC工程总承包管理——前言
  4. 如何使用file_get_contents实现发送GET、POST请求
  5. linux 禁止app权限,SELinux文件访问安全策略和app权限配置
  6. 用turtle画国旗
  7. 构建Polygon多边形的时候提示 -- Invalid number of points in LinearRing (found 3 - must be 0 or = 4)
  8. 戴尔G系列游戏本横空出世,“不吃鸡”也会怦然心动
  9. 链乔教育在线|数字化工作管理工具—Notion(五):Database使用
  10. 武林风云之数据库插入