阅读Chrome缓存数据c#

时间:2017-12-19 21:50:54

标签: c# google-chrome

我正在开发一个应用程序,我需要打开并阅读Chrome提供的缓存信息。

我想要实现的是构建一个应用程序,我可以在其中查看下面的数据并选择要删除的缓存文件。

以下是我需要的输出,它来自Chrome本身,但是,我需要从.Net应用程序访问它并且卡住了。

HTTP/1.1 200
status: 200
content-type: image/jpeg
date: Mon, 18 Dec 2017 23:55:54 GMT
expires: Sat, 16 Dec 2017 15:01:29 GMT
access-control-allow-origin: *
last-modified: Tue, 12 Dec 2017 17:33:35 GMT
x-content-type-options: nosniff
server: snapshot_btfe
content-length: 2362
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
age: 47358
cache-control: public, max-age=86400
alt-svc: hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303338; 
quic=51303337; quic=51303335,quic=":443"; ma=2592000; v="41,39,38,37,35"

阅读内容时此刻,我得到的只是

  

PvPÙÊÞÀqƒ¢q',ÿ¼...ø'+:¶Q?ü¢ð“€Ü € € € € D“Ô‰ ’Å C a…py}ÜÀ ¾ ÅŒÀ o (ŒÀ ‘Ãê¦Á} googlemapsParamsÀ „à ÍÀ „à‘‰£)定义'€Þqjquery-wrapper D”‰... p9“D ......

我也查看过它是否是一个压缩的gzip文件并打开一些文件,但其他文件无法打开。

这是我目前的代码,它打开了一些而不是其他代码。

static void Main()
{
    byte[] file = File.ReadAllBytes(@"C:\Users\simon\AppData\Local\Google\Chrome\User Data\Default\Cache\f_002063");
    byte[] decompressed = Decompress(file);

    string result = System.Text.Encoding.UTF8.GetString(decompressed);
    result.Dump();
}

static byte[] Decompress(byte[] gzip)
{
    using (GZipStream stream = new GZipStream(new MemoryStream(gzip),
        CompressionMode.Decompress))
    {
        const int size = 4096;
        byte[] buffer = new byte[size];
        using (MemoryStream memory = new MemoryStream())
        {
            int count = 0;
            do
            {
                count = stream.Read(buffer, 0, size);
                if (count > 0)
                {
                    memory.Write(buffer, 0, count);
                }
            }
            while (count > 0);
            return memory.ToArray();
        }
    }
}

解压缩文件的输出显示这是一个基于输出的Jquery文件

  

/ *! jQuery v2.0.3 | (c)2005年,2013 jQuery Foundation,Inc。| jquery.org/license   // @ sourceMappingURL = jquery.min.map   * /   (function(e,undefined){var t,n,r = typeof undefined,i = e.location ......

任何有助于此进展的帮助都会受到极大的欢迎。

2 个答案:

答案 0 :(得分:2)

我没有完整的解释,但在缓存文件夹中,较大的文件单独存储为f_xxxxx,而较小的文件组合为data_0,data_1等。我的猜测是你正确解密f_xxxx文件,但不是data_x文件?

如果是这样,您可以参考此信息以查看data_x中文件的组合方式:http://www.forensicswiki.org/wiki/Chrome_Disk_Cache_Format

我从未走过这条路,但看起来缓存文件夹中的索引文件是一个缓存地址数组,可以为您提供有关如何分解data_x文件的线索。您可能只需要获取所需的字节,然后解压缩(而不是尝试解压缩整个文件。)这是我最好的猜测,但没有确认,但链接可能会对您有所帮助。

Chrome将大部分数据存储在Sqlite数据库中,这些数据库只是与缓存位于同一位置的常规文件。您可以使用Sqlite studio获取大量有价值的信息,一旦您了解了自己想要做什么,就可以使用System.Data.Sqlite直接在C#中使用它。我不确定这是否会帮助您使用缓存,但我需要以编程方式使用Chrome完成的大部分内容都是使用该库或简单的File.Delete操作完成的。

答案 1 :(得分:0)

JPEXS Opensource flash SWF decompiler的Java代码可以在in the source tree上针对Chrome和Firefox进行此操作(不过,不支持Firefox的最新缓存2)。