这是一篇关于《超越善恶》(Beyond Good and Evil)游戏的文章,主要内容如下:
- 引言:《超越善恶》是一款过去的有趣游戏,9 岁的作者深深喜爱它但未完成 100%通关。本文旨在回答作者 13 年来心中的疑问——如何 100%通关该游戏。
- 问题陈述:游戏有 3 种收集品,其中 13 号 MDisk 被锁在城市酒吧的储物柜中,无法在游戏内解锁。
- 提出的解决方案:曾有在线组件“暗房”(The Darkroom),需输入游戏内保存屏幕底部的特殊互联网代码,玩拼图游戏后获得储物柜密码,但作者因各种原因未使用该方法。
- 动机:作者对游戏的热爱促使他花费大量时间尝试各种方法解锁储物柜,最终通过谷歌找到答案。
- 解决方案:最初想法是解密互联网代码并创建替代“暗房”的方法,发现有 3 种获取 13 号 MDisk 的方式,且已找到 3 种相关的粉丝制作工具。
- 现有实现的问题陈述:现有工具未展示底层工作原理,且为网站形式,存在失效风险,作者希望创建离线开源替代方案。
- 工具:使用《超越善恶》游戏本身、调试器 OllyDbg、十六进制编辑器 WinHex、编程语言 Red 等工具。
分析:
- 互联网代码:通过自动截图和处理,确定互联网代码可能是基于 Base64 和 Base58 混合的编码,包含游戏统计信息和储物柜代码等。
- 储物柜代码:游戏内储物柜代码格式为字母-数字-字母-数字,通过分析游戏文件和代码,确定储物柜代码在
sally.idx
和slot*.sav
文件中,且以小端序存储。
逆向工程:
- 游戏文件:
sally.idx
是索引表,与游戏存档相关,通过修改其中的“YO! Pearl 记录”并在游戏中追踪,发现编码算法的一些细节。slot*.sav
文件较大,通过分析确定储物柜代码在其中以 4 个连续的 uint32 值存储,且字节顺序为小端序。 - 解码器:通过在编码函数中设置标记并追踪,揭示了编码算法的详细过程,包括对称密钥、转置、加盐、比特洗牌等操作,且编码是可逆的。
- 游戏文件:
- 示例:以具体的互联网代码为例,详细介绍了解码的步骤,包括将字母转换为索引、比特翻转和交换、转置数组等操作,最终恢复出储物柜代码。
- Buka 插曲:俄罗斯本地化版本的互联网代码因字符 transliteration 问题导致与英文版本不一致,增加了解码的复杂性。
- Picklock:发现
slot*.sav
文件中的储物柜代码实际上是 5 个连续的字母索引,且第一个索引可能是“Validate”键,为解决 Buka 版本的问题提供了替代方案。 - 结论:作者通过研究和编程,解决了 13 年的游戏谜团,创建了“daruma”工具帮助其他玩家完成游戏,并感谢 Ubisoft 带来的挑战。最后打开储物柜发现里面内容简单,让人有些失望。
总的来说,文章详细介绍了作者对《超越善恶》游戏中 13 号 MDisk 解锁问题的研究和解决过程,涉及到逆向工程、编码解码等技术。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。