当前位置: 首页 > news >正文

DecompilerMC核心原理:Mojang映射文件转换与反编译流程

DecompilerMC核心原理:Mojang映射文件转换与反编译流程

【免费下载链接】DecompilerMCThis repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script or the executable (see releases)! Thanks mojang to have published proguard mappings. Archived since unobfuscated jar are now released!项目地址: https://gitcode.com/gh_mirrors/de/DecompilerMC

DecompilerMC是一款强大的Minecraft反编译工具,它能自动将特定版本的Minecraft客户端或服务器代码进行反编译和重映射,无需第三方映射文件。本文将深入解析其核心工作原理,包括Mojang映射文件的转换流程和完整的反编译步骤,帮助开发者理解如何将混淆的游戏代码转化为可读的Java源码。

反编译流程概览:从混淆代码到可读源码

DecompilerMC的工作流程主要分为五个关键阶段,每个阶段环环相扣,最终实现从混淆Jar包到可执行Java代码的转换。整个过程利用了Mojang官方发布的ProGuard映射文件,结合SpecialSource和CFR/Fernflower等工具完成代码还原。

核心工作流程图解

Minecraft Jar包 → [下载映射文件] → [转换映射格式] → [重映射Jar] → [删除依赖] → [反编译] → 可读Java代码
  • 输入:Minecraft官方混淆Jar包(客户端或服务器)
  • 输出:位于/src/<版本号>/<客户端/服务器>目录下的可读Java源码

关键步骤解析:Mojang映射文件的处理与应用

1. 映射文件下载:获取Mojang官方ProGuard映射

DecompilerMC首先从Mojang服务器获取指定版本的官方映射文件。这些映射文件记录了混淆后的类名、方法名与原始名称的对应关系,是反编译的基础。

main.py中,get_mappings()函数负责这一过程:

  • 从版本清单(version.json)中提取映射文件URL
  • 将映射文件下载到/mappings/<版本号>/<客户端/服务器>.txt路径
  • 支持断点续传,已存在的文件不会重复下载

2. 映射格式转换:ProGuard到TSRG格式的转换

Mojang提供的映射文件采用ProGuard格式,而SpecialSource工具需要TSRG格式的映射文件。DecompilerMC通过convert_mappings()函数完成这一关键转换:

  • 核心转换逻辑

    • 解析ProGuard格式的类、方法和字段映射
    • 将类名从.分隔转换为/分隔的内部形式(如net.minecraft.clientnet/minecraft/client
    • 处理数组类型和泛型签名,确保类型信息完整
    • 生成TSRG格式文件保存到/mappings/<版本号>/<客户端/服务器>.tsrg
  • 关键代码实现

    # 映射文件转换核心代码片段 def convert_mappings(version: str, side: SideType, quiet) -> None: version_side_path = (PATH_TO_ROOT_DIR / "mappings" / version / f"{side}.txt") with open(version_side_path, 'r') as inputFile, open(PATH_TO_ROOT_DIR / "mappings" / version / f"{side}.tsrg", 'w+') as outputFile: for line in inputFile.readlines(): if line.startswith('#'): # 跳过注释行 continue deobf_name, obf_name = line.split(' -> ') # 类映射处理 if not line.startswith(' '): outputFile.write(remap_file_path(obf_name)[1:-1] + " " + remap_file_path(deobf_name)[1:-1] + "\n") # 方法和字段映射处理 else: # 解析方法签名和参数类型 # ... outputFile.write(f'\t{obf_name} ({variables}){method_type} {function_name}\n')

3. Jar包重映射:使用SpecialSource还原类名

获取并转换映射文件后,DecompilerMC使用SpecialSource工具对原始Jar包进行重映射,将混淆的类名、方法名替换为有意义的名称:

  • 执行流程

    1. 验证/lib/SpecialSource-1.11.4.jar是否存在
    2. 调用Java命令执行SpecialSource:
      java -jar SpecialSource-1.11.4.jar --in-jar <原始Jar> --out-jar <重映射Jar> --srg-in <TSRG映射文件> --kill-lvt
    3. 生成临时重映射Jar包到/src/<版本号>-<客户端/服务器>-temp.jar
  • 关键参数

    • --kill-lvt:移除局部变量表信息,减少反编译后代码的冗余

4. 依赖清理:去除第三方库代码

Minecraft Jar包中包含大量第三方依赖库(如Guava、LWJGL等),这些代码并非Minecraft核心逻辑。delete_dependencies()函数通过以下步骤清理这些依赖:

  • 将临时Jar包解压到/tmp/<版本号>/<客户端/服务器>目录
  • 保留核心包(netmojangcom/mojang等),删除其他第三方库
  • 重新打包清理后的类文件,生成精简版重映射Jar

5. 代码反编译:CFR与Fernflower的选择

DecompilerMC支持两种主流反编译器,用户可根据需求选择:

CFR反编译器(默认)
  • 专注于代码反编译,速度快(约60秒)
  • 命令行参数:--caseinsensitivefs true --silent true
  • 输出目录:/src/<版本号>/<客户端/服务器>
  • 自动删除反编译过程中生成的summary.txt文件
Fernflower反编译器
  • 支持资产文件反编译,更完整但速度较慢(约200秒)
  • 关键参数:-dgs=1(保留泛型签名)、-hdc=0(显示空构造函数)
  • 反编译后自动解压Jar包并移除临时文件

工具依赖与目录结构

DecompilerMC的高效工作依赖于多个关键组件和特定的目录结构:

核心依赖文件

  • 反编译器/lib/cfr-0.152.jar(CFR)和/lib/fernflower.jar(Fernflower)
  • 重映射工具/lib/SpecialSource-1.11.4.jar
  • 主程序main.py(Python 3.7+)

关键工作目录

  • /versions:存储下载的Minecraft Jar包和版本清单
  • /mappings:存放原始和转换后的映射文件
  • /src:反编译后的Java源码输出目录
  • /tmp:临时文件目录,可安全删除

实际应用:快速上手反编译流程

基本使用步骤

  1. 克隆仓库git clone https://gitcode.com/gh_mirrors/de/DecompilerMC
  2. 运行程序python3 main.py
  3. 选择版本:输入版本号(如1.18.2)或使用latest获取最新版
  4. 选择端:客户端(client)或服务器(server)
  5. 等待完成:反编译结果将保存在/src/<版本号>/<端>目录

命令行示例

  • 静默反编译最新版本:python3 main.py --mcv latest -q
  • 反编译快照服务器端:python3 main.py --mcversion snap --side server

常见问题与注意事项

  • 版本支持:仅支持19w36a之后的快照版本和1.14.4之后的正式版
  • Java环境:需安装Java 8或更高版本,并配置到环境变量
  • 网络要求:首次运行需要联网下载Minecraft Jar包和映射文件
  • 输出目录:若目标目录已存在,可选择覆盖(--force)或创建新目录(--forceno

结语:Minecraft反编译的最佳实践

DecompilerMC通过巧妙结合Mojang官方映射文件和开源反编译工具,为开发者提供了一条从混淆代码到可读源码的便捷路径。其核心价值在于自动化处理了映射格式转换和代码重映射这两个复杂环节,让反编译过程变得简单高效。

随着Mojang开始发布未混淆的Java版Jar包,该工具虽然已进入归档状态,但对于需要处理旧版本Minecraft代码的开发者仍然具有重要参考价值。通过理解其工作原理,开发者可以更好地掌握Java代码反编译和混淆处理的核心技术。

【免费下载链接】DecompilerMCThis repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script or the executable (see releases)! Thanks mojang to have published proguard mappings. Archived since unobfuscated jar are now released!项目地址: https://gitcode.com/gh_mirrors/de/DecompilerMC

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1243382/

相关文章:

  • vite-plugin-svgr插件开发指南:如何为你的Vite项目贡献代码
  • 2026适合老人食用的酸枣糕全品类盘点 正规合规品牌选型攻略与避坑FAQ全解析 - 商业大观
  • ggvis完全指南:R语言交互式数据可视化的终极入门教程
  • 为什么选择microservices-framework-benchmark?5大理由助你选出最适合的微服务框架
  • 2026 年至今,文山州知名的中级电工实训公司推荐几家,别再瞎学了!中级电工实训如何帮你快速上岗?-安崇职业技能培训 - 鉴选官
  • 2026实测:微信小程序免费视频去水印哪个好用?无套路稳定工具与风险提醒 - 免费软件工具方法教程
  • NSG进阶:如何生成高质量k-NN图?Faiss与EFANNA辅助工具使用教程
  • ASMR音频下载完整指南:快速构建个人助眠资源库
  • HOL4定理证明系统入门:从安装到第一个定理证明的完整指南
  • 选错标杆比去单纯参观更浪费:一套帮客户选对标杆的五步框架
  • 2026北方适合用的空气净化产品品牌实力横评,五大品牌实测对比,选购避坑要点汇总 - 互联网科技品牌测评
  • Kube Eagle快速入门:5分钟部署Prometheus Exporter监控K8s集群
  • 计算机Django毕设实战-烘焙甜品电商购物平台的设计与实现 基于 Python 的蛋糕商品交易管理商城【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 从Web渗透进阶内网,横向移动和域控突破怎么练
  • 洛克王国s3奇遇精灵有哪些 洛克王国s3奇遇精灵介绍
  • 2026地坪漆哪个厂家好?多家靠谱服务商实力盘点,合作选型避坑全指南+权威评测FAQ - 产业观察报
  • 资源编号:329 | 高德车机版 v9.5.0.600013 悬浮+天空视角自定义定制版 \n本版本基于高德地图车机版最新官方正式版深度修改,核心特性如下: \n✅ 直接解锁启用原生天空视角功能
  • 新手做抖店无货源别乱选工具!抖掌柜核心功能盘点,避开铺货违规、漏单、超卖各类大坑 - 电商分享
  • Jinja与Air Tags无缝协作:打造灵活高效的模板系统
  • 2026年7月山东家用电梯公司最新盘点:家用电梯、别墅电梯定制安装服务参考指南 - 海棠依旧大
  • Figma插件开发效率提升300%:gh_mirrors/pl/community-resources工具集全解析
  • 2026重阳节老人零食推荐大全:老年友好型健康零食品牌选择指南,附选型避坑FAQ - 行业观察网
  • 国内外双端面磨床主流厂商综合盘点
  • 5分钟上手SugarSS:从安装到编写第一个无括号CSS文件
  • 【Runway企业级背景替换SOP】:金融/电商/教育三大场景实测对比,附可落地的API集成模板(仅开放72小时)
  • 2026探望老人零食品牌盘点:正规合规服务商优势详解 + 挑选避坑全维度FAQ指南 - 产业观察报
  • 从Wireshark到AI-NetworkLens:7类传统分析盲区被彻底终结,附GPT-4o增强插件开源链接
  • ASMR下载器使用指南:高效管理个人放松音频库
  • 近期AI训练量化表达,解释改写检查要按顺序
  • Kube Eagle核心功能解析:从资源请求到实际利用率的全面监控