Google chrome 如何从google chrome解包resources.pak?

Google chrome 如何从google chrome解包resources.pak?,google-chrome,compression,Google Chrome,Compression,通过chrome://resources/*使用谷歌浏览器 在linux上,内容位于/opt/google/chrome/resources.pak中。我知道我可以从中获得全部源代码,但我想解压缩resource.pak文件 file resources.pak只报告垃圾 需要明确的是,问题不在于从哪里获得这些资源。问题是resources.pak文件格式是什么以及如何解包?摘自 4字节版本号 资源的4字节数 1字节编码 对于每个资源: 2字节资源id 文件中的4字节资源偏移量 末尾有一个ID为

通过
chrome://resources/*
使用谷歌浏览器

在linux上,内容位于
/opt/google/chrome/resources.pak
中。我知道我可以从中获得全部源代码,但我想解压缩
resource.pak
文件

file resources.pak
只报告垃圾

需要明确的是,问题不在于从哪里获得这些资源。问题是resources.pak文件格式是什么以及如何解包?

摘自

4字节版本号
资源的4字节数
1字节编码

对于每个资源:
2字节资源id
文件中的4字节资源偏移量

末尾有一个ID为0的额外资源项,表示最后一个资源的末尾(本质上是文件的长度)

此python模块可以解压缩和重新打包文件:

来看,(MrU在上面的评论中指出)似乎可以很好地解压Chrome的
.pak
文件。如果您使用的是Windows,您可以从该页面下载并解压缩chrome pak.7z。然后将
.pak
文件放在
unpack.bat
脚本上以将其解压缩


对于其他平台,似乎需要从源代码构建工具。

我发现resource.pak V5有一种新格式:

struct header {
    // 5 is the latest version
    uint32_t version;
    // 0 = BINARY, 1 = UTF8, 2 = UTF16
    uint8_t encoding;
    // 3 bytes padding
    uint8_t padding[3];
    uint16_t resource_count;
    uint16_t alias_count;
};
然后是
resource\u count
resource
s和
alias\u count
alias
es

struct resource {
    uint16_t resource_id;
    uint32_t file_offset;
};
其中,
uint32\u t
=4字节,
uint16\u t
=2字节,
uint8\u t
=1,所有小端整数


源代码位于。

只需将data\u pack.py中的第160行从以下位置替换为:
将“%s:%s%”(resource\u id,text)
打印到:
,并将open(str(resource\u id),“wb”)作为file:file.write(text)
,然后运行:
python data\u pack.py yourfile.pak
,您将在当前目录中提取文件。@niutech,听起来好像你只需要下载一个文件,但实际上,你必须下载整个项目,否则
data\u pack.py
就没有依赖项了-P@pileofrocks我找到了这个,它可以解包和打包,但Opera似乎不接受重新打包的文件。@MrU我无法让它工作(仅限Windows?),但它位于Github页面的底部。这个成功了,勇敢的接受了重新打包的文件。@MrU这可能太模糊了,无法回答。。。但是在GITHUB页面的顶部有一个链接,另一个页面,在“ChrimaPak V5”页面的中间,有一个指向“PakoTooStV5.7z”的链接,它包含所有平台的命令行工具。当您调用“pak_tools(.exe)”时,您将看到使用示例。结果表明,chrome pak customizer与最新的chrome版本不兼容(通过在不修改pak文件的情况下解包和重新打包进行测试),ChromePAK似乎可以工作!我试着在Windows上用Chrome70或71解包一个pak文件,资产解包正确。我没有尝试重新打包这些文件。
struct alias {
    uint16_t resource_id;
    uint16_t entry_index;
};