本篇为 Windows 篇,Android 篇将和 @正己 梦幻联动,敬请期待
索引
通杀爆改 Unity FPS 游戏系列-序章
通杀爆改 Unity FPS 游戏系列-第二章
环境准备
作为第一章,需要的准备并不多,只需要修改神器:Cheat Engine 即可
在论坛中可以直接下载:
CheatEngine_v7.5.exe
(28.59 MB, 下载次数: 1)
除此之外就是拿来开刀的 DEMO 程序,可以在序章篇获取
本章内容
本章将先以 windows mono 游戏包为例实现以下功能:
先介绍常规修改思路,然后再介绍通杀方法
windows il2cpp 游戏包的修改逻辑类似,主要在原理上会有区别,限于篇幅这篇不展开
功能展示
锁血
高跳
移速
无限子弹
基本思路
在不考虑 CE 修改器的 mono 功能下,基本的修改思路是:
- 搜索数值
- 修改数值
- 查看数值引用情况(可选)
- 修改赋值代码(可选)
- 分析数据结构(可选)
锁血
这里以锁血这个功能点为例,演示基本思路的改法
搜索数值
玩家的血量数值就在左下角,直接搜索即可
为照顾部分萌新,这里从打开修改器开始演示,熟悉的小伙伴可以跳过这部分
查看所有进程
打开游戏进程
打开后:
修改搜索类型
将搜索类型改成 Float 浮点数,像玩家血量这种数值通常都是浮点数
在计算机中,浮点数采用的编码格式是 IEEE 754
简单地理解就是在内存中,100.00 被编码为 0x42c80000 (十六进制)
数据本身是不变的,核心在于以什么方式去解读这个数据
打个比方,当你看到 10 这个数据时,如果以十六进制去解读则 0x10 = 16 ,如果以二进制去解读则 binary(10)=2
这里给一个浮点数和十六进制互相转换的网址:https://gregstoll.com/\~gregstoll/floattohex/
关于数据类型的内容这里不再展开,有兴趣的可以回顾我以前的帖子
搜索目标数值
浮点数搜索
修改完搜索类型为 Float 后,填入目标为玩家当前血量即可
十六进制搜索
这里也可以选择类型为 默认的 4 Bytes,然后直接搜索 100 对应的十六进制: 0x42c80000,之后每次搜索也是以十六进制去搜
会发现找到的数据量很明显比直接搜 Float 要少,因为如果是浮点数还有精度问题,这里用十六进制去搜,就相当于锁定了精度
筛选出目标数值
然后等玩家血量变化后,再次搜索数值,最终得到的唯一值就是玩家的血量
浮点数筛选
十六进制筛选
浮点数 90 对应的十六进制为:0x42b40000,在前面提到的:https://gregstoll.com/\~gregstoll/floattohex/ 可以转换得到
可以发现通过常规搜浮点数和直接搜十六进制得到的结果的 Address 内存地址是一样的
这里都是 1AFDAAC0,佐证了前面说的,在内存中浮点数是按 IEEE 754 标准存储的
锁定数值
锁定:
锁定这个值就完成锁血功能了
修改数值:
修改类型: