
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/DecompilerMCDecompilerMC是一款强大的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.client→net/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包进行重映射将混淆的类名、方法名替换为有意义的名称执行流程验证/lib/SpecialSource-1.11.4.jar是否存在调用Java命令执行SpecialSourcejava -jar SpecialSource-1.11.4.jar --in-jar 原始Jar --out-jar 重映射Jar --srg-in TSRG映射文件 --kill-lvt生成临时重映射Jar包到/src/版本号-客户端/服务器-temp.jar关键参数--kill-lvt移除局部变量表信息减少反编译后代码的冗余4. 依赖清理去除第三方库代码Minecraft Jar包中包含大量第三方依赖库如Guava、LWJGL等这些代码并非Minecraft核心逻辑。delete_dependencies()函数通过以下步骤清理这些依赖将临时Jar包解压到/tmp/版本号/客户端/服务器目录保留核心包net、mojang、com/mojang等删除其他第三方库重新打包清理后的类文件生成精简版重映射Jar5. 代码反编译CFR与Fernflower的选择DecompilerMC支持两种主流反编译器用户可根据需求选择CFR反编译器默认专注于代码反编译速度快约60秒命令行参数--caseinsensitivefs true --silent true输出目录/src/版本号/客户端/服务器自动删除反编译过程中生成的summary.txt文件Fernflower反编译器支持资产文件反编译更完整但速度较慢约200秒关键参数-dgs1保留泛型签名、-hdc0显示空构造函数反编译后自动解压Jar包并移除临时文件工具依赖与目录结构DecompilerMC的高效工作依赖于多个关键组件和特定的目录结构核心依赖文件反编译器/lib/cfr-0.152.jarCFR和/lib/fernflower.jarFernflower重映射工具/lib/SpecialSource-1.11.4.jar主程序main.pyPython 3.7关键工作目录/versions存储下载的Minecraft Jar包和版本清单/mappings存放原始和转换后的映射文件/src反编译后的Java源码输出目录/tmp临时文件目录可安全删除实际应用快速上手反编译流程基本使用步骤克隆仓库git clone https://gitcode.com/gh_mirrors/de/DecompilerMC运行程序python3 main.py选择版本输入版本号如1.18.2或使用latest获取最新版选择端客户端client或服务器server等待完成反编译结果将保存在/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),仅供参考