Skip to content

Latest commit

 

History

History
24 lines (13 loc) · 2.26 KB

1.3.md

File metadata and controls

24 lines (13 loc) · 2.26 KB

Minecraft混淆方式

Minecraft作为一个商业软件,自然是需要进行混淆的,但是它对Mod较为开放的态度促使了社区对其反混淆,最出名的反混淆项目名为MCP(Mod Coder Pack),这个项目的发起者名为Searge(srg的命名来源),为我们提供了notch、srg、mcp三种混淆方式,FML等主流ModLoader均使用此反混淆映射。
除了MCP之外,FabricMC团队为1.14快照提供了名为Yarn的反混淆项目,目前也在逐渐发展中,目前只有FabricMC自己使用。

notch 全混淆

notch混淆方式是Mojang对Minecraft进行的混淆,会使得类名、方法名等均被命名为无意义的字母组合,例如bwna,这种命名方式是毫无意义且难以阅读的,这是游戏本身提供的混淆过的名称,被称为Notch Name(简称notch)。

mcp 无混淆

为了应对notch混淆无法阅读的问题,mcp团队对Minecraft的类名、方法名等提供了一个可以正常阅读的名称,这也是我们平时开发Mod在开发环境中看到的混淆方式,例如net.minecraft.client.resource.SkinManagerloadTexture,被称为MCP Name(简称mcp)。

srg 半混淆

mcp为开发者提供了可读性强的名称,但是mcp名称需要人工进行命名,很难在版本发布时立刻制作完成。同时,mcp名称在同一个版本中也会随着对Minecraft代码理解的深入发生变更,这种不稳定、严重依赖于人工的映射对于开发其实是不利的。半混淆srg应运而生,这是一种在同一版本中和notch命名稳定一一对应的命名方式,在版本发生变化时,同一类、方法一般srg名称也不会发生改变,而mcp名称可以随时更新。FML在1.6之后会在游戏运行时动态反混淆到srg名称,编译完的Mod也会被自动混淆到srg名称,我们看到的诸如field_123456_cfunc_132465_a等均为Srg Name(简称srg)。

需要注意的是:

  • 类名的srg名称和mcp名称相同。

  • ForgeGradle中的mapping属性指定的是srg-mcp映射表的版本,可以随时通过修改属性并重写建立开发环境来更新开发环境的mcp名称。

  • 每个Minecraft版本的notch-srg映射表是固定的。