gdsdecomp:把 Godot 的 PCK、EXE、APK 还原成可编辑的 GDScript 源码
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
你手上可能只有一个发行包——APK、EXE 或 .pck 文件,想改一行 GDScript 却发现里面全是 .gdc 字节码,普通编辑器打不开也读不懂。gdsdecomp 是专门做 Godot 逆向工程的开源工具:从 PCK、EXE、APK 三种容器做完整项目还原,把编译后的字节码反编译回可编辑的 .gd 源码,同时支持 Godot 4.x、3.x、2.x 三代项目。
预检:gdsdecomp 运行前的检查清单
先确认你的机器和文件都在支持范围内,免得白忙一场:
| 项目 | 要求 |
|---|---|
| 运行方式 | 从官方 release 下载对应平台的打包版本;Windows 用户也可以走 Scoop 安装 |
| 输入文件 | Godot 游戏的 .pck / .apk / .exe,或已解包的项目目录 |
| 加密项目 | 需要一个 64 位十六进制密钥(--key传入);密钥本身的获取不在工具支持范围内 |
| 目标项目版本 | Godot 4.x / 3.x / 2.x 的 GDScript 项目均可反编译 |
| 从源码编译 | 需要 rustup、dotnet 10 sdk,且要基于项目维护的特定 Godot 分支构建引擎 |
如果输入文件是魔改过加密方案的非标准包,预检时就要心里有数:这种情况需要额外写自定义解密脚本,后文"再进一步"一节有入口。
首次运行:5 步完成 Godot PCK 完整还原
第一次建议直接走 GUI,流程很短:
- 安装 release 版本。Windows 用户可以用
scoop bucket add games加scoop install gdsdecomp两行搞定 - 把 .pck / .exe / .apk 直接拖进应用窗口,或从 RE Tools 菜单选 "Recover project...",打开文件选择对话框
- 在弹出的 PCK explorer 里浏览文件清单,Options 里勾选 Full Recovery,指定 Destination folder
- 点 Extract 开始还原;加密项目要先到 "Set Encryption Key" 菜单填入密钥
- 结束后阅读 Recovery report:检测到的引擎版本、反编译了几个脚本、多少资源转换成功,全在这里
先跑起来看看,第一个项目就算失败也别慌——报告里的失败项就是下一步的排查方向。一个高频坑:还原完成后要用报告里检测到的那个 Godot 版本打开项目,版本对不上会冒出一堆资源导入错误。
场景实战:从还原到回写的三条主线
从 APK 完整还原一个 Godot 项目
发行包到可编辑项目,这是最短路径。
- 拖入 .apk,PCK explorer 自动解析出内嵌资源和 PCK 版本信息
- Options 选 Full Recovery(不是 Extract only),确认输出目录
- 运行还原,等报告输出
- 用检测到的 Godot 版本打开输出目录,逐一检查脚本、场景和插件配置是否完整
窍门:大项目可以先加--scripts-only或--include只还原脚本部分,验证能跑通再全量处理,省掉反复等待的时间。
批量反编译 .gdc 字节码脚本
不想动整个项目,只想把某个目录的脚本抠出来看:
- 确定游戏对应的引擎版本字符串(如 4.3.0)或 commit hash
- 命令行执行
gdre_tools --headless --decompile=xxx.gdc --bytecode=4.3.0,参数支持 glob 批量匹配 - 反编译出的 .gd 文件写入
--output指定目录,不指定则输出到原位置
窍门:版本拿不准时先跑一次完整还原,报告里会写明检测到的版本;也可以--list-bytecode-versions列出全部受支持的字节码版本,完整演进历史见 BYTECODE_HISTORY.md。
修改后回写:把改动塞回 PCK
逆向的终点不是"看到源码",而是"改完还能用"。
- 用
--decompile把要改的 .gdc 转成 .gd,修改逻辑 - 用
--compile把改过的 .gd 编回 .gdc(同样要--bytecode) --pck-patch指定补丁文件和输出 PCK,可选--embed把 PCK 重新嵌回 EXE- 换到文本资源时,
.tres与.res之间可以直接用--txt-to-bin/--bin-to-txt互转
窍门:只改多语言文本的话,直接用--patch-translations传一份 CSV 映射文件,比手动替换每个 .tres 干净得多。
避坑速查:常用参数与常见报错
| 遇到的问题 | 处理方式 |
|---|---|
| 字节码版本对不上 | --bytecode传 commit hash 或版本号;还原时可用--force-bytecode-version强制指定 |
| MD5 校验和报错 | --ignore-checksum-errors忽略错误继续,或--skip-checksum-check直接跳过检查 |
| 加密项目解不开 | --key传 64 位 hex 密钥;确认密钥没错但仍失败,才考虑写自定义解密脚本 |
| glob 匹配不到预期文件 | include/exclude 以res://为根;*.gdc这种带通配符且不含目录的写法会自动按递归处理 |
| 还原后打开项目大量报错 | 用还原日志检测到的 Godot 版本打开;疑似自定义 Godot 分支时,拿原游戏二进制当导出模板 |
| C# 项目反编译 | 传--csharp-assembly指定程序集路径,不传则尝试从 PCK 路径自动检测 |
说句实话:它做不好的事
- 2.x 项目的模型文件(dae、fbx、glb 等)目前没有转换支持
- GDNative 和 GDExtension 写的脚本不在反编译范围内,只能原样提取
- 加密密钥怎么挖完全靠你自己,工具只负责"拿到 key 之后怎么解"
- 反编译出的代码能编译能运行,但命名和结构与原版未必逐字一致,别指望拿到和源码仓库一模一样的文件
- 魔改 Godot 分支的检测还不完善,报告里会提示,遇到大量未识别资源就得自己上手逆向
再进一步:CLI 与自定义解密脚本
GUI 能做的事,命令行全覆盖,而且更适合写脚本批量跑:--list-files只列清单不动手、--pck-create从目录凭空造一个 PCK、--extract只做解包不做还原。最小闭环一行命令:
gdre_tools --headless --recover=game.pck --output=game_restored遇到非标准加密方案时,读一读 自定义解密脚本指南:用 Godot 4.5+ 的 GDScript 继承CustomDecryptor类实现_parse_and_decrypt()即可接管解密流程,标准 AES-256-CFB 方案的参考实现在 docs/gdre_standard_encryption.gd。想参与开发或改核心逻辑,源码直接克隆到 Godot 的 modules 目录下参与引擎构建。
怎么开始:4 步走完还原到回写闭环
- 拿一个练手文件——tests/test_projects/exported/ 里就存着一批测试工程导出的 PCK,不用先去找真实游戏
- 对其中一个小包跑一次 Full Recovery,通读 Recovery report,搞清检测到的版本和失败项分别意味着什么
- 挑一个 .gdc 单独用 CLI 反编译,对比报告里的脚本统计,体会
--bytecode参数怎么影响结果 - 试着改一行脚本、
--compile再--pck-patch写回,完整走一遍"还原 → 修改 → 回写"
逆向工具的价值不在还原率本身,而在于它把"只剩二进制"的项目重新拉回到可维护的状态——从此以后每一点小修改,都不必再等原作者回头。
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考