跳转至

Godot PCK 存档

inspect-artifact 和 extract-artifact 可读取普通 Godot PCK 格式 2、3 和 4,无需运行游戏或安装 Godot。官方 Godot 4.4.1、4.6.1 和 4.7.1 在验证中分别生成了这些格式;其他引擎版本未经验证。不支持格式 1。

检查会保留原始头部和目录事实,包括引擎版本、标志、声明的文件数量、源路径、偏移量和声明的 MD5。观察到的明文字节会获得内容寻址的 SHA-256 标识。MD5 是容器完整性声明,与观察到的 SHA-256 相互独立。默认情况下,不匹配即失败;--integrity-policy record-and-continue 会保留观察到的字节和明确的不可信矛盾。全零 MD5 是未知声明,而非已验证的摘要。

CLI

从紧凑摘要开始,并保留完整的证据包:

rea inspect-artifact /artifacts/game.pck --detail summary \
  --evidence_output /evidence/game.json --json
rea extract-artifact /artifacts/game.pck --json

摘要交付需要 --evidence_output,并且绝不会覆盖该文件。响应包含 summary 证据和一个 evidence_bundle 回执。若未使用 --detail summary,检查会保留其完整的行内交付。提取会创建新的临时目录并返回其路径。它会在创建输出之前拒绝不安全的路径并验证容器身份。

相同的 CLI 命令会在文件开头定位 PCK,或在可执行载体中通过其 12 字节 EOF 尾部定位 PCK。它们不会扫描任意载荷,也不会发现附加尾随签名之后的包。根内容 SHA-256 覆盖整个载体;其内容分类保持原生,而清单记录 PCK 角色和精确的包边界。EOF 标记只是候选:无效大小或指向的位置没有 GDPC 头部,都会保持原生分类。一旦尾部指向包头部,格式错误或不支持的 PCK 内容仍将作为错误处理。此识别边界遵循固定源代码修订版 06d1e7a 中的 Godot 加载器。普通的原生 open_binary 检测保持不变。

MCP 与选定事实

对于独立包,使用其绝对路径调用 open_binary,然后使用 {"detail":"summary"} 调用 inspect_artifact。完整的检查及其嵌套清单保留在会话中。使用摘要的 normalized_result.parent_evidence_id 作为后续视图的来源:

{
  "name": "inspect_analysis_view",
  "arguments": {
    "source": {
      "kind": "retained-evidence",
      "evidence_id": "<parent_evidence_id>"
    },
    "view": {
      "kind": "inventory",
      "collection": "occurrences",
      "logical_paths": ["scripts/main.gd", "project.binary"],
      "fields": [
        "logical_path",
        "declared_integrity",
        "hash_status",
        "format_metadata"
      ],
      "offset": 0,
      "limit": 32
    }
  }
}

即使 fields 为空,出现项仍会保留 occurrence_id、artifact_id 和 parent_occurrence_id。使用 occurrence_ids 批量处理出现项 ID,或将返回的内容 ID 关联到 collection: "nodes"、artifact_ids: [...] 和 fields: ["sha256", "size"]。过滤器取交集;省略的过滤器选择所有可用行,而空数组则不选择任何行。分页遵循过滤后的规范顺序。多个出现项可能共享一个内容 ID。

视图重用经过认证的不可变清单事实和惰性查找索引;它们不会重新打开源。这些是历史观察结果,包括源更改或消失之后的情况。完成后使用 close_binary 关闭目标。要通过 CLI 读取导出的包,请在 JSON 请求文件中为其选择完整的检查记录作为 source: {kind: "inline", evidence: ...},用于 rea inspect-analysis-view request.json --json。

覆盖范围与限制

PCK 摘要会暴露根格式元数据、可用的图计数、available_hash_status_counts 和 source_coverage。清单页面会在页面覆盖范围之外同时保留生产者覆盖范围。source_complete 表示所有声明的保留图行都可用;它并不表示已检查加密或未知的目录。未知覆盖范围中的缺失匹配并不构成不存在的证据。

加密目录保留其头部和声明的文件数量,但条目覆盖范围未知。单独加密的成员保留目录元数据,但内容身份未知;REA 不会解密它们。稀疏包同样保留头部事实,但成员覆盖范围未知。提取会拒绝不可读的目录或加密成员。此功能无法恢复密钥、解码 Godot 资源、反编译 GDScript 字节码、分析信号、应用补丁/移除条目或执行目标。

可读的逻辑成员字节(包括重复的物理范围)共享 ZIP 归档扩展策略:最多为 256 MiB 或 PCK 编码字节跨度的 500 倍中的较大者。嵌入的载体字节不会扩大该预算。在任何成员被生成、哈希或提取之前,会先检查完整目录。加密成员不会被读取,也不会消耗此明文工作额度。小的有界别名仍然有效。这是处理/输出资源边界,与目录元数据保留预算和格式有效性分开。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea