GRAnimated/MinecraftLCE
GitHub: GRAnimated/MinecraftLCE
Minecraft 主机版(任天堂 Switch 版)的反编译项目,旨在通过逆向工程还原游戏源代码结构以供研究学习。
Stars: 488 | Forks: 21
# Minecraft: LCE 反编译项目

[][discord]
Minecraft: Nintendo Switch Edition v1.0.17 的反编译工作正在进行中。
**本代码库不包含游戏资源,无法用于运行游戏。**
## 资源
本项目需要从最新版 *Minecraft: Nintendo Switch Edition* 更新(v1.0.17)中提取的 `main` 文件。
为了移植符号,强烈建议获取 *Minecraft: Wii U Edition* 补丁 35 (v560) 的 `Minecraft.Client.rpx`。仅依靠基础/最新版本进行逆向工程从长远来看会带来麻烦。
尽管 4J/Mojang/Microsoft 从未对网上上传的 LCE 游戏转储文件采取行动,但本仓库绝不会直接提供这些可执行文件。不过,他们确实曾下架过那些在研究中未采用净室(clean-room)逆向方法的项目。这包括官方 Minecraft: Java Edition 的映射,它们由 Microsoft 授权,不能在本项目范围内使用。
## 为什么选择 Nintendo Switch Edition?
Legacy Console Edition 曾登陆 Xbox 360、PS3、PS Vita、Wii U、Xbox One、PS4 和 Nintendo Switch。
Wii U Edition 是唯一包含函数符号的版本。如果不是因为 GHS 编译器工具链极其糟糕,反编译工作本可以基于该版本的游戏进行。我们要找到匹配的编译器版本的机会微乎其微,因此无论如何我们的汇编代码都无法匹配。
另一方面,Nintendo Switch Edition 是使用 Clang 编译的,仅凭游戏的发布日期就很容易找到编译器版本。这里的优势是我们能够实现汇编代码的 1:1 匹配,而且 Clang 比 GHS *宽松*得多。在旧世代平台上,LCE 严重依赖 Boost,而在新世代平台上,它被标准库所取代。我们仍然可以在不使用该库函数的情况下匹配代码,但在大多数其他平台上这无法做到 1:1 匹配。
由于完全没有符号,这使得 Switch Edition 单独来看价值不大。不过,只要在 IDA/Ghidra 中同时打开这两个版本的 LCE,移植符号就只是一项繁琐的工作。此外,Switch Edition 确实包含 typeinfo,因此 vtable 已经为我们定位好了。
Nintendo Switch Edition 发布仅一年后,就被 Minecraft Bedrock 取代。这意味着当时 LCE 对当代用户的支持被提前终止,并未像其他 LCE 移植版本那样收到 Update Aquatic 更新。
虽然 Nintendo Switch Edition 的最新版本是 v1.0.17,但该版本仅与 Wii U Edition 的补丁 35 (v560) 相当。Wii U Edition 在 LCE 被彻底放弃之前,又获得了 8 次更新(直至 v688)。
## 构建
参见 [BUILDING.md](docs/BUILDING.md)。
## 贡献
参见 [CONTRIBUTING.md](docs/CONTRIBUTING.md)。
Minecraft LCE 反编译 Logo 由 [@break-core](https://github.com/break-core?tab=repositories) 设计
本代码库基于 BOTW 反编译项目 ([zeldaret/botw](https://github.com/zeldaret/botw))
构建说明基于 Super Mario Odyssey 反编译项目 ([MonsterDruide1/OdysseyDecomp](https://github.com/MonsterDruide1/OdysseyDecomp))。
标签:4J Studios, Amass, C++, Clang, DNS解析, LCE, Minecraft, URL提取, Wii U, 主机游戏, 云资产清单, 代码分析, 任天堂Switch, 凭证管理, 反编译, 固件转储, 开源项目, 我的世界, 数据擦除, 汇编, 游戏开发, 游戏模组, 符号移植, 逆向工程, 遗留版本