☰
Godot RE Tools 逆向工具箱:项目恢复、GDScript 反编译与 PCK 解包实战指南
2026/10/18 23:21:42 网站建设 项目流程

Godot RE Tools 逆向工具箱:项目恢复、GDScript 反编译与 PCK 解包实战指南

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

gdsdecomp(Godot RE Tools)是一套 Godot 逆向工程工具箱:对 APK/PCK/EXE 做完整项目恢复、批量 GDScript 反编译、PCK 归档提取与创建、资源文本/二进制互转。适合想把 Godot 游戏还原成可编辑项目的修改者,以及做资源分析、版本考古的逆向工程师。

能力速览:这套工具箱到底能干什么

功能还在持续完善中,但核心链路已经比较完整。四项能力对应不同的工作场景:

能力说明
完整项目恢复(Recover)从 APK、PCK 或嵌入 EXE 中加载资源,批量反编译全部 GDScript,重建project文件,把导入资源还原成原始导入格式,把被引擎自动转成二进制的资源转回文本格式,并重建插件配置文件
PCK 归档工具--extract解包、--pck-create从目录打包(可--embed进 EXE、--key加密)、--pck-patch对已有 PCK 打补丁替换文件
GDScript 批量反编译--decompile支持通配批量处理;内置从 2.x 到 4.x 各字节码版本的定义,可用--list-bytecode-versions查看,映射关系见 BYTECODE_HISTORY.md
资源格式转换--txt-to-bin/--bin-to-txt互转场景与资源文件;GUI 里还有 .stex 转 PNG、OGG 流转 OGG、WAV 采样转 WAV 等快捷转换

版本支持现状:4.x 是主力支持;3.x/2.x 项目仍可正常反编译和处理,但 3.x 的引擎构建支持已经终止,不再推新特性。

上图是典型工作现场:左侧是 PCK 内部文件树(可见res://下的.gdc字节码脚本),右侧是对比视图,反编译出的 GDScript 与原始注释版并排显示,方便核对反编译质量。

两条获取路线:直接下二进制 vs 源码编译

路线一:直接拿预编译二进制

到项目 Release 页面下载最新的预编译版本即可,不需要自己搭环境。Windows 上也可以走 Scoop:

scoop bucket add games scoop install gdsdecomp

第一行添加 games 桶,第二行安装 gdsdecomp,装完命令就叫gdre_tools。

路线二:从源码构建(给要魔改模块的工程师)

前提:本模块不是独立程序,而是 Godot 引擎模块,必须跟着引擎一起编译。

  1. 放置目录:把仓库 clone 到 Godot 源码树的modules子目录下,且目录名必须叫gdsdecomp:
git clone https://gitcode.com/GitHub_Trending/gd/gdsdecomp <godot_root>/modules/gdsdecomp
  1. 引擎基线:需要配套 fork 的 Godot 仓库并切到gdre-wb-f964fa714f5分支。SCons configure 阶段会做分支校验,分支不对直接报错退出(可用ignore_godot_branch_check=true跳过,但不推荐)。
  2. 依赖:除 Godot 官方编译指南 所述基础依赖外,还需要 rustup 和 dotnet 10 sdk(分别用于 vtracer 矢量化和 C# 反编译子模块godot-mono-decomp)。
  3. 编辑器配置小技巧:仓库 .vscode 里带了 launch、build、settings 三套模板。按官方指南搭好 Godot 构建环境后,把这三个.json.template拷到 Godot 根目录的.vscode文件夹、去掉.template后缀,再从 Godot 根目录启动 VSCode,调试链路就是现成的。
  4. 一个坑提前说:SCons 首次 configure 时会自动把 patches/main-cli-parse-inject.patch 打到 Godot 核心的main/main.cpp上(用于把gdre::modify_cli_args钩进 CLI 解析)。这个过程是幂等的,重复跑 scons 不会有副作用;想还原就git checkout -- main/main.cpp。
  5. 构建顺序:先编译 editor target,然后至少用它打开一次 standalone 目录下的项目(让资源完成导入),再执行恢复动作。编译成 template 后也可以直接跑独立版:
bin/godot.linuxbsd.template_debug.x86_64.llvm --headless --path=modules/gdsdecomp/standalone --recover=/path/to/game.pck

--path指定 standalone 项目,--headless无界面运行,--recover后面接目标文件——这三段是源码自编译场景下的最小可运行命令。

GUI 路线:四步完成一次完整项目恢复

  1. 启动:运行带本模块的 Godot(或独立版 Godot RE Tools 应用)。
  2. 菜单入口:顶部RE Tools菜单 →Recover project...。偷懒一点也行:直接把 PCK/EXE 拖进应用窗口,效果等同。
  3. 加密分支:如果目标项目是加密的,会解密失败。先到RE Tools→Set encryption key...填密钥(64 字符 hex 串);如果游戏用了非标准加密方案,该入口还能挂自定义解密脚本,写法参考 docs/custom_decryptors.md。
  4. 选文件:在文件对话框里选.pck/.apk/ 嵌包 EXE。识别的文件类型以*.pck, *.exe等为准:

  1. 确认输出:弹出的 PCK explorer 对话框里,上半部分列出归档内全部文件(可勾选/取消勾选),下半部分二选一:Extract only(只提取不解密还原)或Full Recovery(完整恢复),再指定 Destination folder,点Extract...开跑:

跑完后会弹一份 Recovery report:告诉你应该用哪个版本的 Godot 编辑器打开恢复出来的项目、反编译成功/失败脚本数、资源转换成功/失败数,并给出日志文件路径——报 issue 时记得附上它:

经验提示:报告里提示的编辑器版本要尽量对上原游戏编译时的版本(恢复日志会写明检测到的版本);如果打开项目后大量脚本/shader 报错,说明游戏可能用了定制版 Godot,此时可以拿原游戏的二进制当导出模板。

命令行路线:批量解包参数速查

无头模式是批处理和自动化流程的主场,基本形如:

gdre_tools --headless --recover=/path/to/game.pck

解释:--headless无界面运行;--recover=<PCK/EXE/APK/目录>对指定目标做完整项目恢复。只想要原始文件不转换的话,把--recover换成--extract;只想看看包里有啥,用--list-files。

主命令一览(每个都必填,且一般只选一个):

  • --recover=<目标>:完整项目恢复
  • --extract=<目标>:仅提取
  • --list-files=<目标>:列出归档内文件后退出
  • --decompile=<GDC>/--compile=<GD>:批量反编译 / 反向编译成字节码(都支持通配,可重复)
  • --pck-create=<目录>:从目录新建 PCK
  • --pck-patch=<PCK/EXE>:给 PCK 打补丁
  • --txt-to-bin=<文件>/--bin-to-txt=<文件>:资源文本/二进制互转
  • --patch-translations=<CSV>=<路径>:用 CSV 补丁翻译
  • --list-bytecode-versions:列出所有支持的字节码版本

Recover/Extract 常用可选参数:

参数用途
--key=<KEY>加密项目必填,64 字符 hex 密钥
--output=<DIR>输出目录;缺省为<NAME_extracted>
--scripts-only只处理脚本,跳过资源
--include=<GLOB>/--exclude=<GLOB>按通配过滤文件,可重复
--ignore-checksum-errors/--skip-checksum-check忽略 / 跳过 MD5 校验,对付校验损坏的包
--force-bytecode-version=<V>强制字节码版本(commit 短 hash 或4.3.0这类版本串)
--csharp-assembly=<PATH>C# 项目的程序集路径,缺省时从 PCK 自动探测
--load-custom-bytecode=<JSON>加载自定义字节码定义,适配魔改引擎

两个容易踩的细节:

  • GLOB 规则:递归要用**(res://**/*.gdc);不写根路径的 GLOB 默认按res://处理;带通配符但不含目录时自动当递归模式。注意过滤匹配的是 PCK 里实际存在的文件——比如res://main.gdc在包里而res://main.gd不在,include 写.gdc才能恢复出.gd。
  • PCK 创建三件套:--pck-create必须配--pck-version(格式版本 0/1/2)和--pck-engine-version(x.y.z),再加--output指定产物;想嵌进 EXE 或加密就分别加--embed/--key。

能力边界:哪些场景做不了,替代方案在哪

提前划清边界,能省很多排查时间:

  • GDNative / GDExtension 脚本:这类原生扩展脚本不在反编译范围内。需要分析这部分逻辑的话,得换原生二进制逆向工具(反汇编、反编译器)来处理。
  • 2.x 模型:dae、fbx、glb等 2.x 模型的转换尚未实现。
  • 未实现的资源类型:恢复报告里会明确列出"因支持尚未实现而未转换"的文件清单,并计入 Not converted 统计——看到它别慌,属已知边界而非损坏,报告本身也会建议把日志附上提 issue。
  • C#(GDMono)项目:恢复链路本身支持(--csharp-assembly可指定程序集,仓库内置godot-mono-decomp模块),但具体效果取决于版本匹配;拿不准时仍建议搭配 ILSpy / dotPeek 这类 .NET 反编译器交叉验证。
  • 加密:标准 AES-256-CFB 加密给对--key就能解;大部分"解密失败"其实是密钥不对(游戏可能加载后对 key 做了变换)。确认非标准加密后,按 docs/custom_decryptors.md 写自定义解密脚本挂进去,工具组不提供密钥提取支持。

写在最后

对开发者和修改爱好者来说,这套工具的价值在于把"拿到一个打包好的 Godot 游戏"变成"打开一个能继续开发的项目",中间的脚本、场景、资源、插件配置基本都能自动还原。功能持续完善中,遇到反编译失败或格式没覆盖的场景,把 Recovery report 里的日志附上,直接提 GitHub issue 就行。

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

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

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

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

立即咨询