如何从Google Chrome中解压缩resources.pak?

时间:2012-05-17 09:50:43

标签: google-chrome compression

使用谷歌浏览器可以通过chrome://resources/*访问大量有趣的文件。

在Linux上该内容位于/opt/google/chrome/resources.pak。我知道我可以从http://chromium.googlecode.com/svn/trunk/获取所有来源,但我想解压缩resource.pak文件。

file resources.pak报道只是垃圾。

为了清楚起见,问题不在于获取这些资源的位置。问题是什么是resources.pak文件格式以及如何解压缩它?

3 个答案:

答案 0 :(得分:22)

取自https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-dev/agGjTt4Dmcw

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

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

最后有一个额外的资源条目,ID 0给出了最后一个资源的结尾(基本上是文件的长度)

这个python模块可以解压缩和重新打包文件:
来自data_pack.py

grit-i18n

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我发现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_count resourcealias_count alias

struct resource {
    uint16_t resource_id;
    uint32_t file_offset;
};
struct alias {
    uint16_t resource_id;
    uint16_t entry_index;
};

其中uint32_t = 4个字节,uint16_t = 2个字节,uint8_t = 1,所有小端整数。

来源可从https://github.com/chromium/chromium/blob/master/ui/base/resource/data_pack.cc获得。