站在巨人的肩膀上:它带我们去哪里?如果你曾经在 Unity 中进行过测试,你应该知道 AssetStudio 和 AssetRipper。即使是最新的 AssetRipper,导出一个完整的 Unity 项目,也通常会留下一些几乎无用的东西:你会得到纹理、网格和音频,但没有场景实际上可以运行,因为 DLLs 被破坏或是空的。 我们测试了反编译工具多年,既在 AI 变得流行之前,也在之后,IL2CPP 构建一直是障碍。C# 被编译成原生代码,所以你基本上需要从头开始重建游戏以围绕资产。 这种情况发生在前沿模型的最新一代开始运行作为代理之后。## 案例: Nobody - The Turnaround 一个很不错的游戏,很可能永远不会完成。 构建使用常见保护措施: - IL2CPP 后端 - 所有序列化资产 和 global-metadata.dat XOR-加密(自定义“SENS”格式,伪metadata 魔法) - AES-加密配置文件 - MemoryInt / MemoryFloat 反作弊 Normally 你会停止在剥离纹理和模型。 在代理工作流中: 1. 保护重新认识。 它注意到 不同 文件的标题具有相同的字节在同一偏移处,这是位置基于重复的XOR密钥流的标志。 2. 密钥恢复通过 RAM。 游戏必须解密元数据才能运行,所以代理启动了游戏并从进程内存中提取了解密的元数据区域。 然后 从 RAM 中解密的元数据 XOR 硬盘上的加密文件 = 密钥,这是一个经典的已知明文攻击。 精确的4096字节密钥,验证了2555个块。 每个文件都有相同的密钥,所以所有11GB都打开了。 3. 类映射。 从元数据:~4700个类,方法名,字段偏移和字符串文字。 4. 逻辑从汇编重建。 IL2CPP 保护您的 C#,但代理并不需要 C#。 它需要 类映射 + 汇编。 在每个指令上标注名称([rcx+0x20] → this.money,call 0x180B5500 → UIManager.RefreshHUD),读取逻辑,重写它在 C# 中。 数千个空方法被这样移植。 有趣的注意:经典的反编译器(Ghidra)在这里 更糟。 他们伪 C 静默丢弃参数并反转逻辑,所以我们只使用汇编。 5. 真实的测试。 Python 脚本驱动 Unity Editor 通过 Unity MCP:走向真实的 NavMesh,交互对象,打开 UI,截图并与原始图像进行比较。 6. 视觉和依赖项。 从游戏截图重写着色器/材料。 AssetRipper 空的 DLLs 替换为真实的引擎包和第三方库(TMP,Addressables,DOTween,Obi,XCharts…)。 去掉 ~18 GB 的重复资产。 结果:一个 运行 的 Unity 项目。 新游戏 → 城市场景,角色移动,HUD,游戏时钟,功能正在逐一被移植。## 保护失败的地方 - 静态 4096 字节 XOR 密钥, 共享所有文件。 泄露一个,泄露所有。 - 解密元数据位于 RAM 中,没有反dump 和无意义的反调试。 - AES- ECB,使用可见的模式的硬编码密钥。 - 没有符号混淆,所以整个类/方法映射都是暴露的。 - Addressables 包在 StreamingAssets 中未加密,并且目录 CRC 可以简单地被零。 - MemoryInt/MemoryFloat 只能阻止简单的 Cheat Engine 值扫描。## 如果你发布 Unity 游戏 - 混淆符号在 IL2CPP 构建之前。 这是这里的单个最大胜利。 - 每个文件的密钥和一个真正的密码(AES-CTR/GCM)而不是静态 XOR 密钥。 - 反dump / 反调试,plus 敏感性检查(CRC/签名)在包中。 - 将任何重要的内容(货币,IAP,排名)放在服务器上。 从不信任客户端。 没有任何东西是不可破解的。 目标是使其不可破解的成本高于其价值,AI 只是降低了这个成本。## 回到 AI 时代 问题不再是 是否 使用 AI,而是 你可以推动它多远:构建你的产品… 和保护它。 --- 研究/教育写作。 我不分发源代码,资产或游戏构建。