☰
把 Godot 游戏包拆回可读源码:gdsdecomp 解包与 GDScript 字节码还原实战
2026/10/18 23:33:22 网站建设 项目流程

把 Godot 游戏包拆回可读源码:gdsdecomp 解包与 GDScript 字节码还原实战

【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp

手里只有一个发布出来的 Godot 游戏包——APK、PCK 或 EXE——却想拿回游戏里的 .gd 脚本和原始资源?gdsdecomp(Godot RE Tools)就是干这个的:它从游戏包里恢复完整项目,把 GDScript 字节码反编译回可读源码,覆盖 Godot 2.x、3.x、4.x 三代项目。

第一次提取,5分钟跑通:最短安装路径

不用从源码编译也能开始:官方 release 提供预编译工具,Windows 可直接走 Scoop 一键装好。

scoop bucket add games scoop install gdsdecomp

想从源码编译(Linux/macOS/Windows 通吃,也可用于无界面环境),需要 rustup 和 dotnet 10 sdk,然后把仓库克隆进 Godot 的 modules 目录并重新构建引擎:

git clone https://gitcode.com/GitHub_Trending/gd/gdsdecomp godot/modules/gdsdecomp

装好后的最短调用就是这一条,输出目录默认是<名字>_extracted:

gdre_tools --headless --recover=<你的游戏.pck> --output=./out

Windows 上更省事:启动工具后,从 RE Tools 菜单选 "Recover project...",或者直接把 PCK/EXE 拖进窗口。选完文件会进入 PCK explorer 界面,版本、文件总数、Extract only / Full Recovery 模式和输出目录都在这一个窗口里配好:

Full Recovery(完整恢复)比单纯 Extract 多做的事:反编译全部 GDScript、重建项目文件、把导入资源转回原始格式、把二进制资源转回文本格式、重建插件配置。不确定就先选 Full Recovery。

你拿回来的东西:反编译产出与恢复报告

跑完--recover,输出目录里是三类东西:.gd 源码、还原的资源、一份报告。

  • .gd 源码:.gdc 字节码反编译成脚本,变量名和函数名能恢复多少恢复多少,带注释;
  • 资源文件:导入资源(纹理、音频等)转回原始导入格式,.ctex 变回图片,.res 转成 .tres 文本;
  • 恢复报告:输出目录里的gdre_export.log,出问题时拿它去反馈。

产出结构大致长这样:

out/ ├── res/ │ ├── scripts/bullet.gd # 由 .gdc 反编译 │ ├── bullet.tscn │ └── .import/ # 原始纹理、音频等 ├── project.godot # 重建的项目文件 └── gdre_export.log # 恢复报告

报告里几项统计的含义:Decompiled scripts是成功反编译的脚本数,Failed scripts是失败的;Imported resources/Successfully converted/Not converted是导入资源的转换情况;Rewrote metadata指重写了多少资源的元数据。报告开头还会直接告诉你该用哪个版本的编辑器打开这个工程。

对付麻烦的包:加密、版本错位与批量处理

结论先说:三种常见麻烦,各有一条参数就能解。

加密包怎么开

  • 结论:先确认手里的密钥是对的、游戏用的确实是 Godot 标准加密,90% 的解密问题出在密钥上。
  • 命令:gdre_tools --headless --recover=game.pck --key=<64位十六进制密钥>

版本不匹配怎么绕

  • 结论:反编译失败多半是字节码版本对不上,用--force-bytecode-version指定提交哈希或版本号(如4.3.0);编辑器里打开脚本大量报错,则是编辑器版本没对上报告建议的版本。
  • 命令:gdre_tools --headless --decompile=scripts/*.gdc --force-bytecode-version=4.3.0 --output=./out

批量处理只挑脚本

  • 结论:glob 以res://为根,带通配符但不带目录时默认递归;加--scripts-only只恢复脚本。
  • 命令:gdre_tools --headless --recover=game.pck --include="res://**/scripts/*.gdc" --scripts-only --output=./out

出错时查这里:高频报错速查

现象:提取/恢复时提示 MD5 校验失败。原因:包被改过,或文件加密而密钥不对。解决:加密包补--key;确认包没被动过之后,用--ignore-checksum-errors或--skip-checksum-check绕过。

现象:Failed scripts数量不为 0。原因:.gdc 的字节码版本与内置定义对不上。解决:--force-bytecode-version=<版本或提交哈希>强制指定;自定义字节码可--load-custom-bytecode=<JSON文件>。

现象:打开恢复出的项目,脚本/着色器大面积报错。原因:编辑器版本与项目不一致(报告里写明检测到的版本)。解决:用报告建议的版本编辑器打开;很多 non-import 错误时,把原游戏二进制作为导出模板。

现象:2.x 工程里的模型(dae、fbx、glb 等)没被转换。原因:该格式转换尚未实现,GDNative/GDExtension 脚本同理。解决:它们会留在 "Not converted" 列表,属于已知限制,暂需手工处理。

往深里走:解密器、插件与测试入口

  • 自定义解密器:游戏用了非标准的加密方案时,写一个 GDScript 继承CustomDecryptor实现_parse_and_decrypt(),用--custom-decryption-script加载;标准加密参考实现见 docs/gdre_standard_encryption.gd,完整指南见 docs/custom_decryptors.md。
  • 插件系统:支持从 AssetLib、Codeberg、GitHub、GitLab 拉取插件扩展功能,源码在 plugin_manager/。
  • 字节码与测试:内置多代 Godot 的字节码定义,见 bytecode/ 与 BYTECODE_HISTORY.md;tests/下有 .gdc/.gd 对照样本和导出样例,可用来验证你的环境。

现在就可以做三件事:--list-files列出 PCK 里的文件;--recover完整恢复项目;--bin-to-txt单独把某个资源从二进制转成文本。

【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询