GameKiller 中文文档 下载 App

显示值与存储值不一致 —— 为什么看到的是 191,内存里存的却是 1910

一个诡异的现象

你在游戏里看到金币数是 191,但输入 191 去搜索,结果是 0 条。换"自动识别"也搜不到。但后来你偶然发现搜 1910 有结果,而且改 19100 之后,游戏里显示的金币变成了 1910。

这不是巧合——很多游戏都会对显示值做一层处理。

常见的不一致类型

类型一:倍率关系(最常见)

游戏底层实际存储的值是界面显示值的 10 倍、100 倍或 1000 倍。比如:

解决方法:尝试搜索显示值乘以 10、100、1000。或者反过来,搜索显示值的 1/10、1/100。

类型二:加偏移

游戏底层存的值比显示值大一个固定数字。比如所有金币都额外加了 10000:

解决方法:尝试搜索 显示值 + 固定偏移量。偏移量通常在几千到几万之间,可以试几个常见值。

类型三:加密运算(最棘手)

游戏作者用简单的位运算或数学公式加密存储值:

实际存储 = 显示值 ^ 某个常量    (XOR 异或加密)
实际存储 = 显示值 + 某个常量    
实际存储 = 显示值 × 某个常量 + 偏移

这种情况下精确搜索几乎不可能命中。你需要改用模糊搜索(下一章会讲)。

类型四:浮点数取整

游戏内部用 Float 存储,但界面只显示整数部分:

解决方法:改用 Float 数据类型搜索,搜显示值附近的范围(比如 190-192)。

如何判断是不是不一致导致的

如果你满足以下所有条件:

那很可能就是显示值和存储值不一致。

实用排查流程

第一步:搜 10 倍

显示值 = 191
→ 搜 1910(Dword)
→ 如果有结果并修改后显示变成 1910 的 1/10,那就是 ×10 关系

第二步:搜 100 倍、1000 倍

→ 搜 19100(×100)
→ 搜 191000(×1000)

第三步:尝试浮点范围

→ 切换 Float 类型
→ 搜 "190~192" 范围值
→ 或者切换自动识别,让它帮你试 Float

第四步:放弃精确,改用模糊

如果以上都不行,说明做了加密,直接跳到模糊搜索章节。

实际案例

下面是实际游戏中出现过的倍率关系:

游戏显示值内存存值关系
某些休闲游戏金币1911910×10
模拟经营游戏金钱5000050000000×1000
赛车游戏分数950095000×10
RPG 经验值9991998×2(双倍存储)
射击游戏血量1001065353216复杂加密(见下)

一个极端例子:血量加密

某些游戏(尤其是需要反作弊的)对关键数据做了复杂加密。比如某游戏的 HP 实际存储值是 1065353216 + 真实HP值。显示 HP 100,内存里存的就是 1065353316。

这种加密规则没有通用解法,你需要:

  1. 搜 0(假设没加密前 HP 是 0)
  2. 让 HP 变成 100
  3. 搜刚才那批结果中"增加了 100 的"
  4. 看筛选后的值是什么规律,反推加密公式

这就是模糊搜索的威力——下一章详细讲。