|
|
Day 2 -- 精确狙击:如何一发命中内存中的数值
Cheat Engine 从入门到住院 · Day 2
想象你是一个狙击手,目标是一栋大楼里的某个人。你知道他的身高是 175cm,但这栋大楼有一百万个房间。
怎么办?先用身高筛一遍,排除掉 99% 的人。然后让目标动一下——比如他蹲下来变成了 160cm——你再用新身高筛一遍。两三轮下来,目标就无处可藏了。
这就是 CE 精确扫描的核心思路。今天我们用 CE Tutorial 的 Step 2 来实战。
━━━━━━━━━━━━━━━━━━━━
本文你将学到
精确数值扫描的原理和流程
如何通过多次扫描缩小范围
Value Type(数值类型)的选择
如何修改找到的数值
阅读时间:10 分钟 | 实操时间:20 分钟 | 难度:入门
━━━━━━━━━━━━━━━━━━━━
CE Tutorial Step 2:找到血量并改成 1000
打开 CE Tutorial,进入 Step 2。窗口下方显示:
还有一个 "Hit me" 按钮。每点一次,血量就会减少一个随机值。
你的任务:找到这个血量在内存中的地址,把它改成 1000。
━━━━━━━━━━━━━━━━━━━━
第一步:确定搜索参数
在 CE 主界面的扫描区域:
Value:输入(当前血量)
Scan Type:选择(精确值)
Value Type:选择(这是最常用的整数类型)
为什么选 4 Bytes?因为绝大多数游戏用 32 位整数(4 字节)存储血量、金币这类数值。4 字节能表示的范围是 0 到 4,294,967,295(无符号)或 -2,147,483,648 到 2,147,483,647(有符号),对于游戏数值来说绰绰有余。
如果你不确定类型,4 Bytes 几乎总是正确的第一选择。
第二步:首次扫描
点击 First Scan。
CE 会扫描 Tutorial 进程的整个内存空间,找出所有值等于 100 的 4 字节整数。
结果?左边列表里出现了成千上万个地址。这很正常——内存里值为 100 的地方多了去了,不是只有血量才等于 100。
这就像在整栋大楼里喊"身高 175 的人举手",举手的人可能有几千个。
第三步:改变数值,再次扫描
回到 Tutorial 窗口,点击 Hit me。
血量变了,比如变成了 96。
回到 CE,在 Value 框里输入新的值,然后点击 Next Scan。
这一步的意思是:在上一次的结果中,找出现在值等于 96 的地址。那些之前等于 100 但现在不等于 96 的地址就被淘汰了。
结果列表一下子缩小了很多。
第四步:重复,直到锁定目标
再点几次 Hit me,每次记住新的血量值,输入 CE 再 Next Scan。
两三轮之后,列表里应该只剩下 1-2 个地址了。这就是你的目标。
如果剩下多个地址不确定哪个是,可以逐个双击添加到下方的地址列表,然后尝试修改——改对的那个就是。
第五步:修改数值
在下方的地址列表中,双击"Value"那一列,输入,点击 OK。
回到 Tutorial 窗口,血量变成了 1000。点击 "Next" 按钮,Step 2 通关。
就是这么简单。
━━━━━━━━━━━━━━━━━━━━
原理解析:内存里的数值长什么样
计算机内存可以想象成一个巨大的 Excel 表格,每一行有一个"地址"(行号)和一个"值"。程序运行时,变量就存储在这些格子里。
- 地址 值
- 0x00A1B2C0 100 <-- 可能是血量
- 0x00A1B2C4 500 <-- 可能是金币
- 0x00A1B2C8 3 <-- 可能是等级
复制代码
CE 的工作就是:扫描整个表格,找出值等于你指定数字的所有行。
当血量从 100 变成 96 时,真正存储血量的那个地址的值也会从 100 变成 96。而其他碰巧等于 100 的地址不会跟着变。利用这个差异,你就能一步步缩小范围。
这个方法在数学上叫"交集筛选"——每次扫描得到一个集合,取所有集合的交集,最终只剩下目标。
━━━━━━━━━━━━━━━━━━━━
Value Type 选择指南
不同的数值类型占用不同的字节数,选错了类型就找不到目标:
| 类型 | 字节数 | 范围 | 适用场景 |
|------|--------|------|----------|
| Byte | 1 | 0-255 | 小数值,如等级、物品数量 |
| 2 Bytes | 2 | 0-65535 | 中等数值 |
| 4 Bytes | 4 | 0-约42亿 | 最常用,血量/金币/经验 |
| 8 Bytes | 8 | 极大范围 | 大数值,某些 64 位游戏 |
| Float | 4 | 浮点数 | 小数,如坐标/速度 |
| Double | 8 | 高精度浮点 | 高精度小数 |
| String | 不定 | 文本 | 角色名等字符串 |
经验法则:不确定就选 4 Bytes。如果找不到,试试 Float。再找不到,考虑 2 Bytes 或 Double。
━━━━━━━━━━━━━━━━━━━━
进阶技巧:冻结数值
找到地址后,除了修改数值,你还可以冻结它。
在地址列表中,勾选地址前面的小方框。这会让 CE 持续不断地把你设定的值写回去,即使游戏试图修改它。
比如把血量改成 1000 然后冻结,游戏怎么扣血都没用,因为 CE 在以极高的频率把 1000 写回去。
这就是所谓的"锁血"——游戏扣了血,CE 立刻写回来,快到你根本看不出血量变过。
━━━━━━━━━━━━━━━━━━━━
常见问题
Q:首次扫描结果太多怎么办?
A:这是正常的。多点几次 Hit me,每次用新值做 Next Scan,结果会快速收敛。通常 3-4 轮就够了。
Q:Next Scan 后结果变成 0 了怎么办?
A:说明你输入的值不对,或者选错了 Value Type。点 New Scan 从头来过。最常见的原因是血量值看错了,或者游戏用的不是 4 Bytes 整数。
Q:找到多个地址,不确定哪个是真的?
A:全部添加到下方列表,逐个修改。改完后回游戏看效果——让血量真正变化的那个就是。有时候会有"影子地址"(显示用的缓存),改了没有实际效果。
━━━━━━━━━━━━━━━━━━━━
小结
今天我们掌握了 CE 最基础也最核心的技能——精确数值扫描:
输入当前已知数值,首次扫描
让数值变化,用新值做 Next Scan
重复几轮,锁定目标地址
修改或冻结数值
这个流程你会在整个 CE 使用过程中反复用到,就像外科医生的"切开-分离-缝合"一样基础。
但现实没这么简单。如果你根本不知道数值是多少呢?比如一个血条,没有显示具体数字,只有一根不断变短的横条?
明天 Day 3,我们来挑战"未知初始值"的搜索——大海捞针的真正开始。 |
|