gdsdecomp:一条命令把APK反编译成可打开的Godot工程
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
源码丢了,手里只剩一个APK,而GDScript字节码在不同Godot版本里格式各异,手动逆向极其繁琐。gdsdecomp 是 Godot 逆向工程工具(Godot RE Tools),一条命令完成版本检测、GDScript 反编译与资源还原,直接产出可编辑的工程。
gdsdecomp 解决的场景:项目恢复、脚本反编译与加密PCK
工程整体还原。源码丢失、只剩安装包时,这是首选入口。gdsdecomp 从 APK/PCK/EXE 读取资源、反编译全部 GDScript、找回project.godot,并把导入资源转回原始格式,产出的是能直接进编辑器的完整工程。
GDScript 批量反编译。分析竞品玩法时面对的往往是一堆.gdc二进制。反编译器把字节码还原成可读的.gd,版本自动检测,也可以手动指定,逻辑很快就能定位。
PCK 双向操作。既能从 PCK 提取资源,也能反向从目录构建 PCK 或嵌入 EXE,适合需要热修游戏内容的场合。
资源格式互转。手工修改资源引用不用再看十六进制:二进制.res转文本.tres,改完再转回去。
加密项目处理。内置 Godot 默认的 AES-256-CFB 解密;游戏用了自定义加密时,可以挂载一个自定义解密脚本继续工作。
最小流程:四条命令从APK恢复出Godot工程
第一步,拿到工具。clone 源码,Windows 用户也可以直接装 release 版:
git clone https://gitcode.com/GitHub_Trending/gd/gdsdecompscoop install gdsdecomp装好后得到gdre_tools可执行文件,后面所有命令都基于它。
第二步,执行恢复。现在有了工具,跑主命令:
gdre_tools --headless --recover=game.apk --output=recovered日志末尾会打印恢复报告,关键特征是"检测到的 Godot 版本 + Decompiled scripts / Failed scripts 计数"。判断点:Failed scripts: 0就可以收工进编辑器;如果报版本错误,跳到下面的报错速查。
第三步,核对版本。当自动检测结果存疑时,先列出内置支持的字节码版本:
gdre_tools --list-bytecode-versions输出是版本号/commit hash 列表。判断点:与日志标注的版本比对,对不上就用--force-bytecode-version=4.3.0强制指定再跑一次。
第四步,处理加密项目。确认游戏开了加密后,补上密钥参数:
gdre_tools --headless --recover=game.apk --key=<64位hex密钥> --output=recovered密钥是 64 字符的 hex 串,一般从游戏二进制里提取。判断点:密钥无效时别硬试,走下面速查里的自定义解密方案。
黑盒透视:一个PCK进来,工程出去
数据进来时发生了什么。utility/pck_dumper.cpp解析 PCK/APK/EXE 的文件表,逐文件校验 MD5 后把任务分发给线程池。加密文件改道crypto/file_access_encrypted_custom.cpp,用标准 Godot 解密方案或你注册的自定义解密脚本还原明文。
中间经历了什么。bytecode/目录存放 60 多个版本的解析器,bytecode_versions.cpp负责把版本号或 commit hash 映射到对应解析器;先解析字节码结构,再重建控制流,最后生成 GDScript 文本。二进制资源与 Variant 数据由compat/resource_compat_binary.cpp这层跨版本兼容代码解码,全程由utility/task_manager.cpp做多线程队列与内存上限调度。
出去时变成什么。exporters/按原有 import 元数据写出.gd/.tscn/.tres,并附带一份导出报告;C# 程序集走godot-mono-decomp/里独立的 C# 反编译链路。
gdsdecomp 反编译报错速查:六个高频问题
报 unsupported bytecode version?通常是版本检测失败或该版本不在内置列表。先用--list-bytecode-versions查列表,再用--force-bytecode-version=4.3.0强制指定。
加密 PCK 打不开?多数情况是密钥不对,少数是游戏用了自定义加密。先试--key=<64位hex>;不行就按 docs/custom_decryptors.md 写一个CustomDecryptor脚本,通过--custom-decryption-script传入。
从二进制提取的密钥也不生效?游戏可能在加载后对密钥做了变换。先用 Ghidra 之类工具确认它到底是不是标准 AES-256-CFB;非标准方案只能走自定义解密脚本。
校验错误卡住提取?文件被篡改或 MD5 损坏。--ignore-checksum-errors忽略错误继续,--skip-checksum-check则直接跳过检查。
只想拿脚本,为什么全量提取了?用--scripts-only,或--include=res://**/*.gdc过滤(glob 以res://为根)。
恢复的工程一进编辑器就一堆报错?引擎版本不匹配。恢复日志标注了检测到的版本,用对应版本的 Godot 打开即可。
2.x 模型或 GDExtension 脚本恢复出来是空的?这两类资源尚不支持转换,是 README 列明的限制,暂无替代,关注后续版本。
gdsdecomp 版本覆盖与已知边界
- 版本覆盖:字节码解析器从 Godot 1.x 一路到 4.x 的 dev commit
ebc36a7;新版本用bytecode_generator.py批量生成,BYTECODE_HISTORY.md有完整历史表。 - 明确不支持:2.x 模型(
dae/fbx/glb等)与 GDNative/GDExtension 脚本的转换。 - 3.x 的现状:3.x 与 2.x 工程仍可反编译,但 3.x 的引擎构建支持已停止,不再推新特性。
- 环境依赖:C#(Godot Mono)反编译依赖 .NET 10 SDK;源码构建还需 rustup。
- 协议与构建:MIT 协议;自行编译需把仓库 clone 到 Godot 的
modules/目录并重编引擎。
gdsdecomp 把"只有安装包到可编辑工程"这条链路完整补上了。手边有哪个小游戏安装包,clone 下来先跑一次--recover试试。
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考