解密工具的可靠性从何而来RPGMakerDecrypter基于NUnit的加密存档测试实践【免费下载链接】RPGMakerDecrypterTool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files.项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter做解密工具最怕什么没有文档、没有官方规范解析错了可能到最后一刻才暴露。RPGMakerDecrypter 是一款开源的 RPG Maker 解密工具负责解开 RPG Maker XP、VX、VX Ace 加密的 RGSSAD 存档以及 MV/MZ 加密文件。它的可靠性正是来自一套基于 NUnit 的加密存档测试实践用真实的加密存档做黄金样本把文件数量、文件名、偏移量、大小、解密密钥五个维度逐项验证。上图解密工具 GUI 打开Game.rgssad后16 个 Data 文件全部正确列出——测试断言的正是这份正确清单。解密工具为什么需要专门的测试解密工具处理的是无文档的二进制格式它的正确性无法靠看起来对来判断文件名是异或加密的偏移量算错 1 字节整个文件就会错位密钥滚动算法v1 版是key*73v3 版是key*93任何一步写错解出的就是乱码存档损坏时工具必须优雅地抛出异常而不是崩溃。这些细节靠肉眼检查输出文件几乎不可能发现。RPGMakerDecrypter 的解法很朴素拿三份真实的加密存档把应该读出的元数据硬编码为断言任何回归一跑测试就会红。测试工程一览依赖与结构测试集中在独立的 RPGMakerDecrypter.Tests 项目中只引用一个核心模块 RPGMakerDecrypter.Decrypter边界清晰。NUnit 相关依赖声明在 RPGMakerDecrypter.Tests.csproj 中包版本作用NUnit3.13.3测试框架核心[Test]与Assert.ThatNUnit3TestAdapter4.2.1让 VS /dotnet test发现并执行 NUnit 用例NUnit.Analyzers3.3.0编码时的静态分析提示防误用 APIMicrosoft.NET.Test.Sdk17.1.0.NET 测试宿主与发现基础设施coverlet.collector3.1.2代码覆盖率采集三个测试类各司其职RGSSADv1Tests.cs覆盖 XPGame.rgssad与 VXGame.rgss2a的 v1 格式RGSSADv3Tests.cs覆盖 VX AceGame.rgss3a的 v3 格式BinaryUtilsTests.cs覆盖文件头识别与版本号判定。黄金样本三份真实加密存档测试的数据基础是 EncryptedArchives/ 目录下的三份真实游戏加密存档存档对应引擎格式版本Game.rgssadRPG Maker XPRGSSAD v1Game.rgss2aRPG Maker VXRGSSAD v1Game.rgss3aRPG Maker VX AceRGSSAD v3csproj 中用CopyToOutputDirectoryPreserveNewest保证每次构建后样本都被拷贝到输出目录测试永远不会找不到文件。文件名与版本的对应关系统一收口在 Constants.cs 中避免魔法字符串散落各处。五维断言把读对了变成可执行的检查打开 RGSSADv1Tests.cs 可以看到每个存档都从五个维度验证解析结果以 XP 存档为例文件数量ArchivedFiles.Count必须等于 16文件名前三个必须是Data\Actors.rxdata、Data\Animations.rxdata、Data\Armors.rxdata偏移量分别等于 34、11045、147314文件大小分别等于 10981、136243、4285 字节解密密钥分别为0x7B7448AE、0x366D564E、0x222699FE。为什么五个维度缺一不可以 RGSSADv1 的解析流程为例读文件名长度 → 读文件名 → 读大小 → 记录当前位置作为偏移 → 记录当前密钥 → 跳到下一个文件。任何一步的字节序、密钥滚动key*73或跳过逻辑出错都会让某一个维度先变脸——偏移错一个字节尺寸必然跟着错。五维交叉验证等于给整个状态机上了五道锁。v3 格式RGSSADv3的测试结构完全一致只是期望值不同VX Ace 存档前 4 字节直接藏着初始密钥0x00000029密钥按key*93滚动这些差异都由断言值天然覆盖。期望值从哪来交叉验证的锚点测试代码中反复出现这行注释// Verified with Falos RPG Maker Decrypter期望值不是凭空捏造的而是先用另一款成熟工具Falos RPG Maker Decrypter解密同一份存档把它产出的文件名、偏移、大小、密钥作为标准答案回填进断言。这种跨工具交叉验证是逆向工程领域建立信任的经典做法两份独立实现读同一二进制结论一致才有资格当回归测试的基准。而 BinaryUtilsTests.cs 则守护着最外层的第一道门三个存档的文件头都必须是RGSSAD由 BinaryUtils.ReadCString 读取版本字节 XP/VX 为 1、VX Ace 为 3。这正好对应 RGSSAD.GetVersion 的判定逻辑——头不对就抛InvalidArchiveException版本不在 {1, 3} 内就返回 -1防止拿Game.rgssad当 v3 硬解。测试隔离临时目录的用完即焚解密过程要 seek 文件流若直接操作原始样本中途失败可能留下脏状态。FileHelpers.cs 提供了极简的隔离方案CopyArchives()清掉Temp目录把三份存档复制进来每个测试都在纯净副本上运行Cleanup()测完删除副本、移除目录保证测试之间零干扰、仓库零污染。每个测试方法都是同一个三段式CopyArchives() → 断言 → Cleanup()。没有复杂的 fixture新手打开任何一个[Test]方法都能 30 秒读懂全貌——这本身就是可维护性的胜利。如何运行这套测试整个仓库基于 .NET 6.0 SDK 构建运行测试只需两步安装 .NET 6.0 SDK在仓库根目录执行dotnet testdotnet test会自动发现 NUnit3TestAdapter 中的所有用例。看到全绿意味着三个版本的格式解析、文件头识别、密钥推导都与黄金样本完全一致。小结解密工具可靠性的三个支点回看开篇的问题——可靠性从何而来RPGMakerDecrypter 给出了一个可以复制的答案黄金样本真实用真机产出的加密存档做基准而非自己造的数据断言多维交叉数量、名字、偏移、大小、密钥五个维度互相咬合错误无处遁形跨工具锚定 隔离执行期望值来自独立实现的交叉验证测试环境用完即焚。对任何做二进制格式解析、逆向解密的朋友来说这套实践的成本极低三份样本文件 一个 NUnit 项目换来的是每次改动都不敢悄悄改坏的安全感。【免费下载链接】RPGMakerDecrypterTool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files.项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
