GensokyoClub/th06

GitHub: GensokyoClub/th06

一个旨在完美反编译并重建经典游戏「东方红魔乡」源代码的项目,解决游戏内部代码的可访问性和可修改性问题。

Stars: 321 | Forks: 38

# 东方红魔乡 ~ the Embodiment of Scarlet Devil Decomp Progress [![Discord](https://img.shields.io/discord/1147558514840064030?color=%237289DA&logo=discord&logoColor=%23FFFFFF)][discord] <- 点击此处加入 Discord 服务器。 本项目旨在完美重构 [Team Shanghai Alice 的《东方红魔乡 ~ the Embodiment of Scarlet Devil 1.02h》](https://en.touhouwiki.net/wiki/Embodiment_of_Scarlet_Devil) 的源代码。 ## 安装说明 ### 可执行文件 本项目需要原版的 `東方紅魔郷.exe` 1.02h 版本(SHA256 校验和为 9f76483c46256804792399296619c1274363c31cd8f1775fafb55106fb852245,您可以在 Windows 系统上使用命令 `certutil -hashfile <文件路径> SHA256` 来验证校验和)。 将 `東方紅魔郷.exe` 复制到 `resources/game.exe`。 ### 依赖项 构建系统有以下包要求: - `python3` >= 3.4 - `msiextract` (仅限 Linux/macOS) - `wine` (仅限 Linux/macOS,在 macOS 上推荐使用 CrossOver 以避免可能的 CL.EXE 堆问题) - `aria2c` (可选,允许种子下载,在 Windows 上选择后会自动安装。) 构建系统的其余部分由 Web Archive 的 Visual Studio 2002 和 DirectX 8.0 构成。 #### 配置开发环境 这将下载并安装编译器、库和其他工具。 如果您在 Windows 上,并且出于某些原因希望手动下载依赖项, 请运行以下命令以获取要下载的文件列表: ``` python scripts/create_devenv.py scripts/dls scripts/prefix --no-download ``` 但如果您希望一切自动下载,请改为这样运行: ``` python scripts/create_devenv.py scripts/dls scripts/prefix ``` 如果您想使用种子下载这些依赖项,请使用此命令: ``` python scripts/create_devenv.py scripts/dls scripts/prefix --torrent ``` 在 Linux 和 Mac 上,请运行以下脚本: ``` # 注意:在 macOS 上使用 CrossOver 时。 # export WINE=/wine ./scripts/create_th06_prefix ``` #### 构建 运行以下脚本: ``` python3 ./scripts/build.py ``` 这将自动生成一个 Ninja 构建脚本 `build.ninja`,并对其运行 Ninja。 ## 参与贡献 ### 逆向工程 您可以在配套仓库 [th06-re] 的 `xml` 分支中找到我们 Ghidra 逆向工程的 XML 导出文件。该仓库通过 [`scripts/export_ghidra_database.py`] 每晚更新,其历史记录与我们团队 Ghidra 服务器的提交历史相匹配。 如果您希望在我们的逆向工程工作中提供帮助,请在 Discord 上联系 @roblabla,以便我们可以为您在 Ghidra 服务器上创建一个账户。 ### 重新实现 进行重新实现工作的最简单方式是使用 [`objdiff`](https://github.com/encounter/objdiff)。以下是入门指南: 1. 首先,按照上述说明设置开发环境。 2. 将原版 `東方紅魔郷.exe` 文件(1.02h 版本)复制到 `resources/` 文件夹,并将其重命名为 `game.exe`。这将用作与重新实现进行比较的基准。 3. 下载最新版本的 objdiff。 4. 运行 `python3 scripts/export_ghidra_objs.py --import-csv`。这将从 `resources/game.exe` 中提取 objdiff 可以比较的目标文件。 5. 最后,运行 objdiff 并打开 th06 项目。 #### 选择要反编译的函数 最简单的方法是查看 `config/stubbed.csv` 文件。这些都是自动被存根化的函数。您应该选择其中一个,在 objdiff 中打开相关的目标文件,然后点击感兴趣的函数。接着,打开正确的 `cpp` 文件,复制/粘贴声明,然后开始工作!将 Ghidra 反编译器的输出作为基础可能很有用。您可以在 [th06-re] 仓库中找到此输出。 # 鸣谢 我们向以下个人的宝贵贡献表示衷心感谢: - @EstexNT 将 [`var_order` pragma](scripts/pragma_var_order.cpp) 移植到 MSVC7。
标签:DirectX 8.0, Python, URL提取, Visual Studio 2002, VPS部署, Wine, 东方Project, 云资产清单, 依赖管理, 反编译, 无后门, 東方紅魔郷, 游戏分析, 游戏开发, 游戏调试, 源代码重建, 红魔乡, 脚本编程, 自动化构建, 软件分析, 软件逆向工程, 逆向工具, 逆向工程, 逆向工程工具