现代运行时反混淆

现代运行时反混淆

在运行时,将日志和崩溃报告堆栈追踪中的 SRG 方法和字段标记重写为可读的 Mojang 名称。

工具

当 Forge 1.20.1 崩溃时,日志显示的方法名是 m_109093_ 而非 render。本模组可实时重写这些符号。替换操作会在游戏内控制台、latest.log 以及崩溃报告 .txt 文件中生效,让您能真正读懂是什么导致了崩溃。

效果展示

改写前:

java.lang.NullPointerException
    at net.minecraft.client.renderer.GameRenderer.m_109093_(GameRenderer.java:869)
    at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1184)

改写后:

java.lang.NullPointerException
    at net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:869)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1184)

特性

  • 实时反混淆,便于调试。
  • 同时适用于客户端和专用服务器。
  • 使用 Mojang 官方 1.20.1 映射表。
  • 映射表仅在首次启动时下载一次,之后会本地缓存(约占用 5 MB 磁盘空间)。
  • 覆盖堆栈跟踪、崩溃报告以及 Java 的智能 NPE 消息。
  • 无需配置。只需将 jar 文件放入 mods/ 文件夹。

安装

  1. 下载 jar 文件并放入 mods/ 文件夹。
  2. 启动游戏。首次运行时,模组会下载 Mojang 的映射表(需几秒钟)。之后将直接从缓存读取。

兼容性

  • Minecraft: 1.20.1
  • 加载器: Forge 47+
  • 运行端: 客户端 + 服务器(两端均可运行,且均有用)

可选配置

首次启动时会自动生成 config/moderndeobf-common.toml,其中包含以下开关:

  • enabled:总开关
  • remapCrashReports:是否重写 .txt 崩溃转储文件
  • downloadMappingsIfMissing:设为 false 可用于离线环境(需自行预填充缓存)

已知限制

  • 极早期的崩溃。 一些在模组构造函数运行前触发的 Mixin 警告会保留原始 SRG 符号。这与 Fabric 上的 StackDeobfuscator 限制相同。
  • 自定义日志行。 模组通过自身的 LOGGER.info() 调用手动格式化 SRG 名称的情况不会被捕获。本模组仅处理堆栈跟踪和 Java 的 NPE 消息。
  • 参数名称。 Mojang 的映射表不包含参数名,因此本模组也不会生成。

关于映射表

jar 文件中不包含任何 Mojang 映射数据。首次启动时,模组会直接从 Mojang 的 CDN(URL 列于 version_manifest_v2.json 中)下载映射表,并在 <gameDir>/moderndeobf/cache/ 目录下构建本地查找表。

致谢

  • StackDeobfuscator(作者:booky10)。这是 Fabric 上类似功能的模组,也是本模组的设计模板。
  • Not Enough Crashes 和 Crashy。本模组作为事后分析工具的补充。
  • SrgUtils。本模组使用的映射表加载、反向映射及链式处理的基础库。

免责声明

本模组为个人使用而编写。开发过程中大量使用了 Claude。 除此之外,不包含任何 AI 生成的资源。

GitHub 上的发布版本同时包含经可验证哈希验证的 virustotal 扫描结果。

源码 / 许可证

MIT 许可证。源码托管于 GitHub。