ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

gdsdecomp 实战指南:5 分钟从 PCK、APK、EXE 恢复完整 Godot 项目

gdsdecomp 实战指南:5 分钟从 PCK、APK、EXE 恢复完整 Godot 项目

gdsdecomp 实战指南:5 分钟从 PCK、APK、EXE 恢复完整 Godot 项目

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

gdsdecomp 是一套 Godot 逆向工程工具集,把打包后的游戏文件还原成可编辑的源码项目。它面向的读者是 Godot 开发者:手里只有.pck、.apk或嵌入式.exe时,用它完成脚本反编译、资源还原和二次打包。工具内置了 Godot 2.x 到 4.x 各分支的字节码解析器,恢复日志还会自动检测并告知你原始游戏所用的引擎版本。

安装与第一条命令

有三种获取方式:

  • 下载最新 release 二进制(通用方式,Windows 用户还可通过 Scoop 安装:scoop install gdsdecomp)
  • 从源码编译:把仓库克隆到 Godot 的modules/子目录(克隆地址:https://gitcode.com/GitHub_Trending/gd/gdsdecomp),按 Godot 官方编译文档重新构建引擎。构建需要 rustup 和 .NET SDK
  • 仓库自带独立运行入口:源码构建后可用bin/godot.*.template_debug.x86_64 --headless --path=standalone直接执行

拿到可执行文件后,先跑一条探测命令确认工具可用:

gdre_tools --headless --list-files=game.pck

预期结果:终端输出该 PCK 包内所有资源的相对路径列表,然后退出。这条命令不写任何文件,是检查输入文件是否合法的最快方式。

五大核心能力

按使用频率从高到低:

  1. 完整项目恢复(--recover)。一步完成:从 APK/PCK/EXE 加载资源 → 反编译全部 GDScript → 恢复project.godot→ 把导入资源转回原始导入格式 → 把自动转成的二进制资源还原为文本格式 → 重建插件配置文件。
  2. 批量反编译/编译(--decompile/--compile)。.gdc字节码文件与.gd源码互相转换,支持 glob 和重复传参。
  3. PCK 提取与创建(--extract/--pck-create)。提取即把包内文件按原路径落地;创建则从目录反向打包,可嵌入可执行文件。
  4. 资源格式转换(--txt-to-bin/--bin-to-txt)。场景和资源文件在文本与二进制格式之间互转。
  5. 翻译补丁(--patch-translations)。用 CSV 文件替换包内指定语言路径的翻译,可单独使用,也可与--pck-patch组合。

图形界面同样覆盖这些能力:在 Godot 编辑器中加载该模块后,从 "RE Tools" 菜单选择 "Recover project...",或者直接把 PCK/EXE 拖进应用窗口即可。

典型任务一:恢复一个完整项目

目的:只有一份game.apk,想要可编辑的完整项目。

命令:

gdre_tools --headless --recover=game.apk --output=recovered

如果项目加密,追加密钥参数(64 字符十六进制字符串):

gdre_tools --headless --recover=game.apk --key=000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F --output=recovered

预期结果:recovered目录下出现完整的 Godot 项目结构,脚本以.gd文本形式存在,导入资源回到原始格式。日志中会打印检测到的引擎版本。

注意点:

  • 恢复出的项目请用与日志中检测到的相同 Godot 版本打开,跨版本打开容易出现资源加载差异。
  • 只需脚本时可加--scripts-only跳过资源处理。
  • 大型包可用--include/--exclude限定范围,glob 以res://为根,*.gdc这类无目录通配会被自动视为递归匹配(等价于res://**/*.gdc)。
  • 界面操作时,选文件对话框长这样,支持多文件拖选:

典型任务二:批量反编译字节码

目的:只想处理散落的.gdc文件,不走完整恢复流程。

命令:

# 指定引擎版本反编译单个文件 gdre_tools --headless --decompile=script.gdc --bytecode=4.3.0 # 批量反编译目录内所有 .gdc,输出到指定目录 gdre_tools --headless --decompile="**/*.gdc" --bytecode=4.3.0 --output=decompiled

--bytecode接受版本字符串(如4.3.0)或字节码修订的 commit hash(如f3f05dc)。如果自动检测不可靠,用--force-bytecode-version强制指定,或用--list-bytecode-versions先查看所有受支持的版本。--compile是反向操作,把.gd编译为字节码,供回归测试使用。

注意点:Godot 4.0 到 4.2 时代 GDScript 编译模式尚未实装(4.3 才引入字节码 100,4.5 升级为 101),这些版本的导出项目里通常只有文本脚本,没有.gdc可反编译。完整的版本对照表见 BYTECODE_HISTORY.md。

典型任务三:修改并重新打包 PCK

目的:改了某个脚本,想直接塞回游戏包而不重走完整构建。

命令:

# 用本地文件替换包内指定资源 gdre_tools --headless --pck-patch=game.pck --patch-file=/path/to/main.gd=res://main.gd --output=patched.pck # 从目录创建新 PCK(格式版本 0/1/2,需指定引擎版本) gdre_tools --headless --pck-create=proj_dir --pck-version=2 --pck-engine-version=4.2.2 --output=game.pck # 创建后直接嵌入可执行文件 gdre_tools --headless --pck-create=proj_dir --pck-version=2 --pck-engine-version=4.2.2 --embed=godot.exe --output=packed.exe

--pck-patch同样支持--include/--exclude过滤原始包内容,--key用于解密输入包和加密输出包。

排障清单

现象原因解决
解密报错 / MD5 校验失败密钥不对是最常见原因;少数游戏改用了非标准加密先核对--key是否为正确的 64 位十六进制串;确认游戏确实不是标准加密方案后,参考 docs/custom_decryptors.md 编写CustomDecryptor脚本,通过--custom-decryption-script传入
提示不支持的字节码版本自动检测失败或版本过新--list-bytecode-versions查看支持列表;--force-bytecode-version=4.5.0强制指定;或用--load-custom-bytecode=xx.json加载自定义定义(--dump-bytecode-versions可导出全部现有定义作模板)
恢复出的项目打开异常编辑器版本与游戏构建版本不一致按恢复日志中打印的检测版本,用同版本 Godot 打开
提取时大量校验错误包内文件与记录不匹配确认可信后加--ignore-checksum-errors(跳过错误)或--skip-checksum-check(完全跳过检查)
C# 项目恢复不完整C# 程序集需要单独处理提供--csharp-assembly=path.dll;未指定时会尝试从 PCK 路径自动检测
模型/原生扩展无法还原已知限制(见下节)属工具当前边界,无法通过参数解决

已知边界与进阶建议

明确不支持:Godot 2.x 的 3D 模型(dae、fbx、glb等)尚无格式转换;GDNative / GDExtension 脚本不能反编译。遇到这两类资源时恢复流程会跳过,不要指望参数绕过。

版本兼容:恢复日志中的引擎版本信息是最权威的依据,后续所有编辑、二次打包的--pck-engine-version都应向它对齐。

大项目策略:先用--list-files摸清包内容,再用--include分片恢复(例如先res://**/*.gdc只处理脚本),确认无误后对资源分区再跑,比一次全量恢复更容易定位失败点。--translation-hint可配合翻译恢复,用已有.csv/.po文件补全翻译 key。

字节码维护:新引擎版本出现字节码变更时,bytecode_generator.py 可自动化生成新的解析器定义;仓库 tests/test_projects/exported/ 下按 2.1 到 4.5.1 各版本各留了一份真实导出项目,改完解析逻辑可用它们回归验证。C# 反编译部分基于 godot-mono-decomp/ 子项目实现。

下一步

  1. 选一份你手头最小的 PCK,跑--list-files确认工具链,再执行--recover走通完整流程。
  2. 用恢复日志里检测到的版本,在对应 Godot 中打开恢复结果,逐项核对脚本与资源。
  3. 如果项目加密且标准密钥无效,按 docs/custom_decryptors.md 的类接口写一个自定义解密脚本接入。

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

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进