GameKiller 中文文档 下载 App

加密数据的处理思路 —— 内存修改器面对加密存储时的应对策略

游戏为什么要加密数据

简单说:防修改、防外挂。

开发者发现玩家用八门神器改金币改数值太容易,于是对关键数据做了加密处理:

五种常见的加密类型

类型一:加法偏移(最常见)

存储值 = 真实值 + 固定偏移量
真实值 = 存储值 - 固定偏移量

例子:偏移量 1065353216 是一个很常用的偏移(它等于 2^30,方便做位运算)。真实值 100 → 存储值 1065353316。

类型二:乘法缩放

存储值 = 真实值 × 常数(10、100、1000 等)
真实值 = 存储值 ÷ 常数

例子:真实金币 191 → 存储值 19100(×100,为了支持 2 位小数显示)。

类型三:XOR 异或

存储值 = 真实值 XOR 密钥
真实值 = 存储值 XOR 密钥(XOR 可逆)

XOR 加密的特点:同一个密钥,加密和解密是同一个操作。比如:

真实值 = 191  = 00000000 00000000 00000000 10111111(二进制)
密钥   = 42   = 00000000 00000000 00000000 00101010
存储值 = 191 XOR 42 = 00000000 00000000 00000000 10010101 = 149

类型四:动态密钥

每次游戏运行时密钥随机生成,所以同一个真实值在不同运行周期存储值不同。这是对修改器最不友好的情况。

类型五:链式加密

存储值 = 加密(真实值 + 前一个存储值 + 偏移量)

依赖相邻值的加密,联合搜索也很难处理。

应对策略

策略一:模糊搜索(万能)

不管什么类型的加密,模糊搜索都不关心具体的值,只关心变化方向——"增加了还是减少了"。这是破解加密数据的最通用手段。

加密后:HP 从 X 变成 Y(X 和 Y 都看不懂)
但:X > Z(加密前的增加方向不会变)
模糊搜索"值增加了" → 有效!

策略二:反推加密公式

如果加密比较简单(加法、乘法、固定密钥 XOR),你可以通过两次搜索反推出公式。

反推加法偏移

第 1 次:HP = 100 → 搜"值=100" → 无结果
第 2 次:HP 变成 105 → 搜"值增加了" → 找到那条地址
看加密存储值:假设是 1065353316 和 1065353321
差值:1065353321 - 1065353316 = 5(和真实值差值一样)
偏移量:1065353316 - 100 = 1065353216

知道了偏移量,下次直接搜 目标值 + 偏移量 就能命中。

反推乘法缩放

第 1 次:金币 = 191 → 搜 191 → 无结果
第 2 次:金币 = 202 → 搜模糊"增加了" → 找到存储值 2020
缩放系数:2020 ÷ 202 = 10
下次直接搜 目标值 × 10

反推 XOR 固定密钥

真实值 191 → 存储值 149
密钥 = 191 XOR 149 = 42
验证:100 XOR 42 = 118 → 搜 118 应该能命中

策略三:联合搜索(绕开加密)

如果一个 struct 里部分值被加密、部分没加密,联合搜索用未加密的那几个值定位 struct,然后直接改加密值。

策略四:Hook 游戏函数(进阶)

八门神器本身不直接支持,但同类工具(GG 修改器、Cheat Engine)支持 Hook / Memory Script:在游戏的"解密函数"处设断点,把解密后的值拿出来改,或者直接跳过加密逻辑。

这需要逆向能力:

  1. 找到游戏读取 HP 的函数
  2. 注入脚本,在函数返回前修改返回值
  3. 或者直接跳过加密步骤

实战案例:某游戏的 XOR 加密

场景:精确搜金币 191 没结果,搜模糊也很慢。

尝试反推:
  第 1 轮:金币 = 191 → 模糊全量快照
  第 2 轮:金币变成 202 → 选"值增加了" → 剩 500 条
  第 3 轮:金币变成 215 → 选"值增加了" → 剩 30 条
  第 4 轮:金币变成 100(花了 115)→ 选"值减少了很多" → 剩 1 条!
  
  看存储值的变化:
  191 → 存储值 A
  202 → 存储值 B(增加了 11)
  215 → 存储值 C(增加了 13)
  100 → 存储值 D(减少了 115)
  
  关键:存储值的变化量和真实值的变化量**完全一致**!
  说明加密要么是加法偏移,要么是乘法系数为 1 的什么
  
  进一步:用 191 XOR A、202 XOR B……看结果是否相同。
  
  如果是 XOR 固定密钥:
  191 XOR 存储值 = 密钥 K
  202 XOR 存储值' = 同一个密钥 K
  
  算出 K 后,下次直接搜:目标值 XOR K

什么时候彻底没解

遇到以下情况,八门神器级别的工具可能束手无策:

这时要么放弃用八门神器,要么转向Hook 函数、修改存档文件、重写 APK 反编译等更重的手段。