TheAndersMadsen/n64dd-ipl-region-free

GitHub: TheAndersMadsen/n64dd-ipl-region-free

为 Nintendo 64DD 美版 IPL 固件制作的跨区补丁,使单一 IPL 可启动 US/JP/DEV 三区磁盘并通过真机 CIC 校验。

Stars: 2 | Forks: 0

# Nintendo 64DD 跨区锁 IPL 补丁

patch only regions delta cic

## 功能说明 - **单一 IPL,支持三个区域。** 单个美版 (US) 语言的 IPL 可启动美版 (US)、日版 (JP) 和开发版 (DEV) 的 64DD 磁盘。 - **保持美版体验。** UI 语言和实时时钟 (real-time-clock) 行为与原版美版 IPL 保持一致。 - **在真机上通过 CIC 校验。** IPL4 防篡改校验和仍然**通过**,且 IPL3 (`0x40`–`0x1000`) 与原版**逐字节完全一致**,因此主机的安全芯片会接受它。已确认可以通过 **SummerCart64** 在真机上运行。 - **极小改动。** 与基础 ROM 相比,仅有准确的 **65 字节**不同。 ## 制作原理 **1. 实际逻辑 —— 9 字节。** 三处区域比较被*放宽*(而非移除),使得美版 (US)、日版 (JP) 和开发版 (DEV) 均可通过:包括 command-5 的读取自旋检查,以及两处 command-0xE 检查。在 disk-ID-read 的 *status-0* 路径上进行了 2 条指令的修改,通过采用与正品**开发版** IPL 相同的分支,重新启用了对开发版磁盘的支持 —— 这并非凭空捏造的行为,且不会影响美版 (US) 和日版 (JP) 磁盘。 **2. 让主机依然信任它 —— 56 字节。** 这些编辑改变了 IPL4 校验和所覆盖的字节,通常这会导致校验失败。该校验和是覆盖整个 IPL4 区域的 6 累加器混合函数 —— 你无法仅仅“修复”单个字节。我将其建模为一个约束问题,并使用 **SMT solver** 找到了 **14 个补偿字**,作为 **192 位原像**:在每次功能性编辑后,校验和都会重新计算为其*原始*预期值。防篡改检查通过,IPL3 未被改动,CIC 会将其视为正版固件。 最终结果:**修改了 65 字节,校验和完好无损,区域锁定已解除。** 已在 **ares**、**cen64** 的原生 Apple Silicon 自定义编译版本,以及**通过 SummerCart64 运行的真机**上进行了验证。 ## 你需要正确的基础文件 —— 首先检查这一点 此补丁仅适用于**唯一一个**提取文件:Nintendo 64DD **USA (Proto)** IPL。市面上存在几种不同的 64DD IPL,它们**不可**互换。 **所需基础文件 —— Nintendo 64DD IPL (USA) (Proto):** | 字段 | 值 | |---|---| | No‑Intro 名称 | `[BIOS] Nintendo 64DD IPL (USA) (Proto)` | | 大小 | **4194304 字节** (`0x400000`,准确的 4 MB) —— 无文件头 | | 字节序 | **大端序** (原生 `.z64` / `.n64`),国家代码 `E`,开头为 `80 27 07 40` | | MD5 | `37c36e4286d36892a9fc70eafe4104be` | | SHA‑1 | `3c5b93ca231550c68693a14f03cea8d5dbd1be9e` | | CRC32 | `D0F567CA` | 哈希校验你的文件:`md5 -q file && shasum -a1 file` (macOS) · `md5sum file && sha1sum file` (Linux) · `certutil -hashfile file MD5` (Windows)。或者运行 `python3 checkipl.py yourfile` —— 它会自动为你识别基础文件 / 输出文件 / 错误的日版 (JP) 文件。 ## 如何应用 **推荐:** [Flips (Floating IPS)](https://github.com/Alcaro/Flips),或者使用 [Rom Patcher JS](https://www.marcrobledo.com/RomPatcher.js/) 在浏览器中应用 `.bps` —— 无需安装,且你的 IPL 永远不会离开你的电脑。 1. 确认你的基础文件与上表匹配(MD5 `37c36e42…`)。 2. Flips → **Apply Patch** → `64DD_IPL_US_ALLREGION.bps` → 你的 IPL。Flips 会自动校验源文件的 CRC,并在写入任何内容之前**拒绝**错误的文件。 - CLI (所有操作系统):`flips --apply 64DD_IPL_US_ALLREGION.bps your-ipl.n64 out.n64` 3. 确认输出的哈希值与下方一致。 | 文件 | 格式 | 用途 | |---|---|---| | `64DD_IPL_US_ALLREGION.bps` | **BPS(推荐)** | 自校验 —— 内嵌源文件**和**目标文件的 CRC32。适用于 Flips / Rom Patcher JS。 | | `64DD_IPL_US_ALLREGION.xdelta` | xdelta3 / VCDIFF | 高级用户 / 脚本:`xdelta3 -d -s base out.n64`。 | | `64DD_IPL_US_ALLREGION.ips` | IPS (后备) | ⚠️ **无校验。** 错误的基础文件会导致静默损坏。仅在你的工具只支持 IPS 时使用。 | **首选 BPS** —— 它是这里唯一会在一开始就拒绝错误基础文件的格式,这也是固件镜像所需的安全保障。 ## 验证成功 输出必须**完全**匹配: | 字段 | 值 | |---|---| | 大小 | 4194304 字节(无变化) | | MD5 | `e0e9ef9368ab0e0cac1558526a57c775` | | SHA‑1 | `70f780f366f52e774379fe0e1b2337666d299e82` | | CRC32 | `79DD6099` | 补丁文件完整性(检测被篡改的下载): | 文件 | SHA‑256 | |---|---| | `.bps` | `d620f6e8f7701d00089acef33bfd3fc8d135044c35e37a3becfc54a720197d4a` | | `.ips` | `65b2b36da3b7b92ca08686bd48dbdb16753d7c9f74e1e1b095a4e87da2811969` | | `.xdelta` | `c8d6d78fb53b30f7f46f6afaa9b1845b0e30740657e20456a469e4a22cd496d5` | ## 验证状态(实事求是) - **美版 (US) 磁盘** —— 确认可在 **ares** 和 **cen64** 中启动至游戏。 - **日版 (JP) 磁盘** —— 确认可在 **ares** 和 **cen64** 中启动至游戏。 - **开发版 (DEV) 磁盘** —— 确认可在 **cen64** 中启动;会进入与美版和日版相同的插入卡带界面。 - **真机** —— IPL4 校验和通过,且 IPL3 逐字节一致,因此该 IPL 是 CIC 合法的;可通过 **SummerCart64** 加载(美版 + 日版 + 开发版磁盘均可启动;空磁盘会进入 64DD 时钟界面)。其他 flashcart / 模拟器设置尚未验证 —— 欢迎反馈。 ## 法律声明 **重新分发前请阅读此内容。** - **绝不包含 ROM 或 Nintendo 代码。** 本代码库**仅**包含一个二进制补丁 —— 一个代表作者自身逆向工程改动的小增量。它**不**包含,也从不分发 Nintendo 64DD IPL 或任何其他受版权保护的 Nintendo 材料。 - **请自带固件。** 如果没有你**合法拥有并自行提取**的 64DD IPL,此补丁将毫无用处。请勿索取基础 ROM,本项目也不会提供。 - **为了互操作性而进行逆向工程。** 这些改动是独立得出的,旨在使一个区域的 IPL 能够与其他区域的磁盘互操作。未使用任何 Nintendo 源代码、工具或机密材料。 - **无附属关系。** 本项目与 Nintendo **没有**任何附属、授权、认可或赞助关系。“Nintendo”、“Nintendo 64”、“64DD”及相关标志均为 Nintendo 的商标,此处仅用于识别/描述(指示性合理使用)。 - **按“原样”提供,无担保。** 出于教育和保存目的提供,**不提供任何形式的保证**。你需自行承担所有风险;对于任何硬件、软件或数据损坏,作者概不负责。 - **补丁许可。** 本代码库中的补丁文件和代码基于 [MIT License](LICENSE) 发布。MIT 仅涵盖作者自身的贡献(增量和工具)—— 它不授予任何底层 Nintendo 材料的权利。 如果你是 Nintendo 并有任何疑问,请提交 issue;维护者将及时回复。 ### 更新日志 **v1.0 — 2026‑07‑15** · 初始版本。单一美版 (US) 语言 IPL 可启动美版 (US) / 日版 (JP) / 开发版 (DEV) 磁盘;保留了美版 UI 和时钟。包含三处放宽的区域比较 + 2 条指令的开发版磁盘修复 + 14 个校验和补偿字(192 位 IPL4 原像)。IPL3 逐字节一致;在真机 (SummerCart64) 上通过 CIC 校验。总改动增量:65 字节。
标签:逆向工具