从 APK/PCK 恢复完整 Godot 项目:gdsdecomp 上手与实战指南

📅 发布时间:2026/10/18 16:15:05
从 APK/PCK 恢复完整 Godot 项目:gdsdecomp 上手与实战指南
从 APK/PCK 恢复完整 Godot 项目gdsdecomp 上手与实战指南【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecompgdsdecompGodot RE Tools是一个面向 Godot 引擎的逆向工程工具集它能从 APK、PCK 或内嵌 EXE 中加载项目资源反编译全部 GDScript 脚本重建 project.godot并把导入后的二进制资源还原为原始格式——覆盖 Godot 4.x、3.x 与 2.x 三代字节码。如果你手上只有一个打包后的 Godot 游戏又想看到它的源码和资源这就是为这件事做的工具。什么情况下你会需要它三个真实场景基本覆盖了这类工具的全部需求源码丢失只剩包项目误删磁盘上只剩下game.pck或 Android 的APK。手工解析 PCK 格式、逐版本手写字节码解释器不现实gdsdecomp 一条--recover命令即可恢复可编辑的完整项目。学习/分析别人的实现拿到竞品或演示项目的发布包想知道某个系统比如战斗状态机具体怎么写的。--decompile可以只反编译脚本不动资源。改包再打包想给别人的 PCK 打补丁或自己重建 PCK--pck-patch和--pck-create支持从目录生成 PCK、把 PCK 嵌入可执行文件--embed还能顺带加密--key。工具以 Godot 模块的形式开发仓库根目录有SCsub、register_types.cpp但日常使用不需要源码编译——直接拿 release 版的gdre_tools二进制或者在 Windows 上用 Scoop 安装git clone https://gitcode.com/GitHub_Trending/gd/gdsdecomp scoop bucket add games scoop install gdsdecomp预期结果本地有一份仓库里面有测试用的 PCK 和脚本后面直接拿来练手以及一个可执行的gdre_tools。所有命令行用法都遵循同一模式gdre_tools --headless 主命令 [选项]--help可查看全部参数。场景一一条命令恢复整个项目仓库自带 17 个不同 Godot 版本导出的示例项目2.1.1 到 4.5.1不用等自己找到目标游戏就能验证流程。以 4.5.1 为例执行恢复命令gdre_tools --headless --recovertests/test_projects/exported/4.5.1/2d/platformer/platformer.pck --outputrecovered_451预期会看到按步骤推进的恢复日志加载 PCK、检测引擎版本、逐个反编译.gdc、还原资源。跑完后recovered_451目录里应该出现project.godot、反编译出的.gd源码以及从导入格式还原的资源文件比如纹理还原为 PNG、.res二进制还原为.tres文本。几个高频参数值得记住--key64位十六进制串项目加密时提供 AES-256-CFB 密钥。注意大多数解不开的问题是密钥不对而不是格式不支持。--scripts-only只恢复脚本速度快很多适合只想看代码的情况。--include/--excludeglob 过滤如--includeres://**/*.gdc。注意匹配的是 PCK 里实际存在的文件.gdc不是源文件名.gd。--force-bytecode-version4.3.0版本自动检测失败时手动指定也接受 commit hash如f3f05dc。恢复日志会打印检测到的引擎版本——编辑恢复出的项目时请装同一版本的 Godot这是官方 README 明确提示的一点。场景二批量反编译 .gdc 脚本如果只需要代码不必恢复整个项目。仓库tests/test_scripts/4.4/code/里正好有成对的.gd源码和.gdc字节码方便对比反编译质量gdre_tools --headless --decompiletests/test_scripts/4.4/code/*.gdc --bytecode4.4.0 --outputdecompiled_44--bytecode既可以是版本号4.4.0也可以是字节码的 commit hash--output省略时编译/反编译结果会直接落在原文件旁边main.gd对应main.gdc。预期输出是decompiled_44下出现main.gd、player.gd等文本脚本内容可读、缩进正常。反过来工具也能把.gd编译成字节码--compile... --bytecode...以及做.res/.tres的二进制与文本互转--txt-to-bin/--bin-to-txt。这两组命令对改完脚本再塞回 PCK的工作流很有用。它是怎么做到的三个关键模块理解三块实现基本就理解了 gdsdecomp 的能力边界。1. 字节码版本调度bytecode/Godot 每个版本的 GDScript 字节码格式都不同这正是逆向里最容易踩的坑。该目录里有 60 多个版本专用的解析器bytecode_*.cpp每个对应一个字节码修订号由 bytecode_versions.cpp 统一注册和调度先读.gdc文件头的版本号再查表路由到对应解析器。完整版本谱系记录在 BYTECODE_HISTORY.md——从 2014 年分支 1.0 的 bytecode 1 一路到 4.x每个 commit 改了什么一目了然。新增版本解析器不需要手写bytecode_generator.py 可以自动生成。2. PCK/EXE 容器解析utility/gdre_packed_source.cpp 是容器层的核心不仅解析 PCK 的头部与文件表还实现了从 Windows PE、Linux ELF、macOS MachO 可执行文件中定位内嵌 PCK 的逻辑EXEPCKInfo结构里能看到三种 EXE 类型的枚举。这就是直接拖一个game.exe进去也能恢复的原因。pck_dumper.cpp 负责把解析出的文件落盘pck_creator.cpp 则负责反向打包task_manager基于 WorkerThreadPool 把独立任务分给多线程跑。3. 资源还原与版本兼容compat/ 与 exporters/Godot 4 导入后的资源大多是二进制格式.res、.ctex等要还原成编辑器里能直接编辑的文本/原始格式且 3.x 与 4.x 的资源二进制结构还不通用。resource_compat_binary.cpp 和 resource_compat_text.cpp 提供跨版本的资源读写兼容层exporters/ 里的gdscript_exporter、scene_exporter、texture_exporter等则按资源类型分派导出策略保留原始导入设置确保恢复出来的项目能在编辑器里正常打开。加密项目怎么解标准流程确认游戏用的是 Godot 原生加密AES-256-CFB从 exe 里提取 32 字节密钥转成 64 字符十六进制串传给--key。如果游戏用的是自定义加密密钥在加载后被置换、或换用了别的算法原生解密必然失败。此时可以写一个自定义解密脚本继承CustomDecryptor类实现_parse_and_decrypt()用仓库内置的AESContextGDRE、CamelliaContext、AriaContext三种加密上下文完成解密。完整的写法约定文件头结构、解密流程、脚本如何注入见 docs/custom_decryptors.md标准加密的参考实现可以直接照抄 docs/gdre_standard_encryption.gd。C# 项目是另一条支线Godot 4 的 .NET 游戏需要额外提供程序集--csharp-assembly路径.dll不给时会从 PCK 路径自动检测。反编译由 godot-mono-decomp/ 下的 C# 工程完成从源码构建时需要 .NET SDK。进阶与避坑报 Unsupported bytecode version先--list-bytecode-versions确认工具覆盖的范围再用--force-bytecode-version版本或commit强制指定仍不行说明游戏用的引擎版本超出支持区间。MD5 校验报错--ignore-checksum-errors忽略校验失败继续提取--skip-checksum-check则直接跳过校验。改包后校验必然不匹配属正常现象。恢复的项目在编辑器里打不开九成是引擎版本不一致。恢复日志里会写明检测到的版本用它打开项目即可资源引用问题再看恢复日志中的警告条目。已知能力边界README 明说2.x 的模型格式dae/fbx/glb和 GDNative/GDExtension 脚本暂无转换支持遇到这类资源只能拿到二进制原件。大型项目不必一次全量恢复。先--extract拿资源再对**/*.gdc分批--decompile最后--bin-to-txt处理二进制资源既省内存也方便断点续做。打补丁回写--pck-patchoriginal.pck --patch-file/abs/path/new.gdres://scripts/main.gd --outputpatched.pck--patch-file可重复多次配合--embed能把补丁 PCK 直接写回可执行文件。下一步gdsdecomp 把只能拿到编译产物的 Godot 项目变成可以打开、可以改、可以重新打包的项目核心就是版本全覆盖的字节码反编译 容器级 PCK 读写。建议的动作先跑通上面 4.5.1 测试项目的--recover流程打开recovered_451目录和反编译出的.gd文件确认效果然后再拿一个真实目标包从--list-files开始逐步深入。遇到新引擎版本时查一下 BYTECODE_HISTORY.md 里对应 commit 的字节码改动基本就能判断该版本是否已被覆盖。【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考