[功能请求] 支持查看 Chromium `.pak` 文件
Chromium 将许多内容包含在 resources.pak 文件中。 目前,在 7-zip 中打开这些文件时,它会在文件中间找到一个 gzip 头,然后由于垃圾数据而无法解压。 Chromium 的 .pak 文件是使用此 Python 脚本生成的:https://GitHub.com/chromium/chromium/blob/main/tools/grit/pak_util.py#L76(如果您不想克隆整个代码库,可以使用独立的 grit:https://chromium.googlesource.com/chromium/src/tools/grit/) - 你可以运行 python3 pak_util.py -h 来使用 CLI。 https://GitHub.com/chromium/chromium/blob/main/tools/grit/grit/format/data_pack.py#L135 是完成大部分工作的地方。 "spec": https://www.chromium.org/developers/design-documents/linuxresourcesandlocalizedstrings/#data-file-format-version-4 这是我阅读代码后的文件格式,因此可能不太准确(请参阅上面的文档): - 所有内容都是小端字节序 - 头部: - 首4个字节是版本:只能是4或5 - 在版本4中: - uint32,资源条目数 - 下一个字节是所有文本资源的编码: - 0:二进制(没有文本资源) - 1:UTF-8 - 2:UTF-16 - 在版本5中: - 下一个字节是所有文本资源的编码(定义相同) - 下3个字节被忽略 - uint16,资源条目数 - uint16,别名数 - 接下来是资源数量+1个条目头,每个6个字节: - uint16,资源 ID - uint32,文件偏移量 - 每个资源数据从当前文件偏移量到下一个条目的文件偏移量 - 这意味着最后一个条目头不引用任何数据**(我认为,请检查此事实)** - 接下来是别名,每个4个字节(有别名数个别名条目) - uint16,别名资源 ID - uint16,指向的资源的索引 - 其余部分是实际数据 - 如果某个资源的数据以1f 8b开头,则该数据应使用 gzip 解压 - 如果某个资源的数据以1e 9b开头,则接下来的6个字节是未压缩数据的大小,并且该数据应使用 brotli 解压(当然,不包括前8个字节) 因此,基本上,头部摘要: - 05 00 00 00 uu ?? ?? ?? nn nn mm mm 或 04 00 00 00 nn nn nn nn uu - 所有内容都是小端字节序 - u 是编码: - 0:二进制(没有文本资源) - 1:UTF-8 - 2:UTF-16 - n 是resource_count - m 是alias_count 一个示例 pak 文件(由于 GitHub 不允许我直接上传,所以放在 zip 文件中 - 其中包含两个文件:一个资源 ID 为1111的图像和一个资源 ID 为2222的文本文件
内容来源: mcmilk/7-Zip-zstd