zeldaret/tww

GitHub: zeldaret/tww

将 GameCube 平台《塞尔达传说:风之律动》的二进制文件反编译还原为与原始编译产物逐字节匹配的 C/C++ 源代码的开源项目。

Stars: 781 | Forks: 124

# 塞尔达传说:风之律动 [![Build Status]][actions] [![Progress]][progress site] [![DOL Progress]][progress site] [![RELs Progress]][progress site] [![Discord Badge]][discord] GameCube 平台游戏《塞尔达传说:风之律动》正在进行的反编译工作。 此代码库**不**包含任何游戏资产或汇编代码。需要一份现有的游戏副本。 支持所有 GameCube 版本: - `GZLE01`:Rev 0 (USA),Rev 48 (KOR) - `GZLP01`:Rev 0 (PAL) - `GZLJ01`:Rev 0 (JPN) - `D44J01`:体验版 (JPN) # 依赖项 ## Windows: 在 Windows 上,**强烈建议**使用原生工具链。**不**需要 WSL 或 msys2。 在 WSL 下运行时,[objdiff](#diffing) 无法获取文件系统通知以进行自动重新构建。 - 安装 [Python](https://www.python.org/downloads/) 并将其添加到 `%PATH%`。 - 也可从 [Windows Store](https://apps.microsoft.com/store/detail/python-311/9NRWMJP3717K) 获取。 - 下载 [ninja](https://github.com/ninja-build/ninja/releases) 并将其添加到 `%PATH%`。 - 通过 pip 快速安装:`pip install ninja` ## macOS: - 安装 [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages): brew install ninja [wibo](https://github.com/decompals/wibo) 是一个最小化的 32 位 Windows 二进制包装器,它将被自动下载并使用。 ## Linux: - 安装 [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages)。 [wibo](https://github.com/decompals/wibo) 是一个最小化的 32 位 Windows 二进制包装器,它将被自动下载并使用。 # 构建 - 克隆代码库: git clone https://github.com/zeldaret/tww.git - 将您的游戏光盘镜像复制到 `orig/GZLE01`。 - 支持的格式:ISO (GCM)、RVZ、WIA、WBFS、CISO、NFS、GCZ、TGC - 初始构建完成后,可以删除光盘镜像以节省空间。 - 配置: python configure.py 要使用 `GZLE01` (USA) 以外的版本,请指定 `--version GZLJ01` (JPN) 或 `--version GZLP01` (PAL)。 - 构建: ninja # 差异比对 一旦初始构建成功,项目根目录下应存在一个 `objdiff.json` 文件。 从 [encounter/objdiff](https://github.com/encounter/objdiff) 下载最新版本。在项目设置中,设置 `Project directory`。配置应会被自动加载。 从左侧边栏选择一个对象即可开始差异比对。项目的更改将自动重新构建:包括对源文件、头文件、`configure.py`、`splits.txt` 或 `symbols.txt` 的更改。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/0c5d606800191043.png) # 设置 Ghidra Ghidra 是一个可以自动反编译代码的工具。虽然 Ghidra 的输出准确度不足以直接复制粘贴到此反编译项目中,但它对于理解函数和加快反编译速度仍然很有帮助。 我们已经为 TWW 建立了一个共享的 Ghidra 项目。要访问此服务器: * 前往 https://ghidra.decomp.dev 并关联您的 Discord 账号。 * 在右侧的表单中输入新的用户名和密码,创建一个 Ghidra 账号。 * 申请对 WindWaker 服务器的“Read”访问权限。 然后等待管理员批准您的请求。一旦获得访问权限,您可以按照以下步骤设置 Ghidra 项目: * 要使用 Ghidra,您首先需要安装 JDK。您可以从[这里](https://adoptium.net/temurin/releases/)下载 OpenJDK 17。 * 从[这里](https://github.com/RootCubed/ghidra-ci/releases/tag/2024-10-05)下载 RootCubed Ghidra 构建版本。 * 使用 `ghidraRun` 启动 Ghidra。 * 在 Ghidra 中,转到 `File -> New Project...`。选择 `Shared Project` 并输入以下信息: * Server Name:ghidra.decomp.dev * Port Number:13100 * User ID:(您之前选择的用户名) * Password:(您之前选择的密码) * 您现在应该能够查看 Ghidra 项目中的文件了。您应该检出 `main` 文件。 现在您已经设置好 Ghidra 并可以开始使用了。 有关如何使用 Ghidra 的介绍,您可以阅读[《黄昏公主》反编译指南的这一部分](https://zsrtp.link/contribute/decompiler-setup#using-ghidra)。 作为可选操作,即使您对该游戏不感兴趣,您可能也想申请对 https://ghidra.decomp.dev 上 TwilightPrincess 服务器的“Read”访问权限,并同样设置那个 Ghidra 项目。原因在于《风之律动》和《黄昏公主》之间共享了大量的引擎代码,而且《黄昏公主》的调试版本(在 Ghidra 项目中称为 `shield_chn_debug`)更容易处理,因为在该版本中内联函数没有被内联展开。如果您正在处理的函数也存在于该游戏中,检查一下通常是值得的。 # 贡献 如果您已满足所有要求并希望了解如何为反编译工作做出贡献,请参阅[此指南](/docs/decompiling.md)了解详情。
标签:C++, D44J01, DNS解析, GameCube, GZLE01, GZLJ01, GZLP01, Ninja, Python, ROM黑客, URL提取, Wii, 云资产清单, 代码重构, 任天堂, 反编译, 塞尔达传说, 复刻, 安全可观测性, 开源项目, 怀旧游戏, 数据擦除, 无后门, 汇编, 游戏开发, 游戏模组, 游戏逆向, 版本控制, 经典游戏, 逆向工具, 逆向工程, 风之律动