【问题标题】:How can I read Chrome Cache files?如何读取 Chrome 缓存文件?
【发布时间】:2011-09-02 06:33:27
【问题描述】:

我经常去的一个论坛今天宕机了,恢复后发现前两天发的论坛已经完全回滚了。

不用说,我想从论坛丢失的数据中找回我能得到的数据,我希望我至少有一些这些数据存储在 Chrome 创建的缓存文件中。

我面临两个问题 - 缓存文件没有文件类型,我不确定如何以智能方式读取它们(尝试在 Chrome 中打开它们似乎会以 .gz 格式“重新下载”它们),并且有 ton 的缓存文件。

关于如何阅读和排序这些文件有什么建议吗? (一个简单的字符串搜索应该适合我的需要)

【问题讨论】:

    标签: google-chrome browser-cache


    【解决方案1】:

    试试 NirSoft 的 Chrome Cache View(免费)。

    【讨论】:

    • 我的防病毒程序 (Trend Micro) 向我发出有关该页面的警告 -- 你能验证它的安全性吗?
    • @Raven,我个人不认识这个人,但我使用过他的许多程序。您的防病毒软件具体说了什么?同一个网站有一些人所说的黑客工具(即密码恢复)
    • @Raven,我在其他网站上没有看到类似的评级:mywot.com/en/scorecard/nirsoft.net。 Google SafeBrowsing (google.com/safebrowsing/diagnostic?site=nirsoft.net) 表示该网站上有木马,但这些很可能是误报(因为许多安全工具都显示为木马)。没有路过式下载,所以无论如何你都是安全的。我相信这个网站很好。正如我所说,我一直使用他的工具。
    • 不幸的是,趋势科技扫描无法覆盖或暂时关闭自身。谢天谢地,我有两台电脑和一个闪存驱动器。
    • 也可以在 Mac 上使用 Wine。主 Chrome 配置文件的文件夹将类似于 H:\Library\Caches\Google\Chrome\Default\Cache 假设 H: 映射到您的主文件夹。
    【解决方案2】:

    编辑:以下答案不再有效,请参阅here


    在 Chrome 或 Opera 中,打开一个新标签并导航到 chrome://view-http-cache/

    单击您要查看的任何文件。 然后,您应该会看到一个包含一堆文本和数字的页面。 复制该页面上的所有文本。 将其粘贴到下面的文本框中。

    按“开始”。 缓存的数据将出现在下面的结果部分中。

    【讨论】:

    • 您收到的文件可能是不可读的转储。通过此 php 脚本发送文件以提取内容:sensefulsolutions.com/2012/01/…
    • 你甚至没有提到你正在使用 sensefulsolutions 页面。
    • 或者只是将文件的 hexdump 复制到剪贴板,然后运行 ​​pbpaste | xxd -r -p > file.ext,将 pbpaste 替换为此 OS X 实用程序的操作系统等效项。
    • 这将不再起作用,因为 chrome://view-http-cache 已从最近的 chrome 版本中删除。更多详情请见this
    【解决方案3】:

    编辑:以下答案不再有效,请参阅here


    Chrome 将缓存存储为十六进制转储。 OSX 安装了xxd,这是一个用于转换十六进制转储的命令行工具。我设法使用以下步骤从 OSX 上的 Chrome 的 HTTP 缓存中恢复了 jpg:

    1. 转到:chrome://cache
    2. 找到您要恢复的文件并点击它的链接。
    3. 将第 4 部分复制到剪贴板。这是文件的内容。
    4. 按照本要点中的步骤将剪贴板通过管道传输到 python 脚本,然后通过管道传输到 xxd 以从十六进制转储重建文件: https://gist.github.com/andychase/6513075

    您的最终命令应如下所示:

    pbpaste | python chrome_xxd.py | xxd -r - image.jpg

    如果您不确定 Chrome 缓存输出的哪一部分是内容十六进制转储,请查看此页面以获得良好的指南: http://www.sparxeng.com/blog/wp-content/uploads/2013/03/chrome_cache_html_report.png

    图片来源:http://www.sparxeng.com/blog/software/recovering-images-from-google-chrome-browser-cache

    更多关于XXD的信息:http://linuxcommand.org/man_pages/xxd1.html

    感谢上面的 Mathias Bynens 让我朝着正确的方向前进。

    【讨论】:

    • chrome://cache 在更高版本的 Chrome 中被删除,因此这将不再有效。
    【解决方案4】:

    编辑:以下答案不再有效,请参阅here


    如果您尝试恢复的文件在标题部分有 Content-Encoding: gzip,并且您使用的是 linux(或者在我的情况下,您安装了 Cygwin),您可以执行以下操作:

    1. 访问chrome://view-http-cache/并点击您要恢复的页面
    2. 将页面的最后(第四)部分逐字复制到文本文件(例如:a.txt)
    3. xxd -r a.txt| gzip -d

    请注意,其他答案建议将-p 选项传递给xxd - 我遇到了麻烦,大概是因为缓存的第四部分不是“postscript plain hexdump 样式”,而是“默认样式”。

    似乎也没有必要用一个空格替换双空格,就像chrome_xxd.py 正在做的那样(如果有必要,你可以使用sed 's/ / /g')。

    【讨论】:

    • 对我来说效果很好,其他方法都没有,谢谢!
    • 甚至无需保存到文件:选择标题下方的部分,并使用xsel | xxd -r | zcat | less(如果您不想要寻呼机,请省略| less)。
    • chrome://view-http-cache/ 在较新版本的 Chrome 中被移除。
    【解决方案5】:

    我制作了一个简短的、愚蠢的脚本来提取 JPG 和 PNG 文件:

    #!/usr/bin/php
    <?php
     $dir="/home/user/.cache/chromium/Default/Cache/";//Chrome or chromium cache folder. 
     $ppl="/home/user/Desktop/temporary/"; // Place for extracted files 
    
     $list=scandir($dir);
     foreach ($list as $filename)
     {
    
     if (is_file($dir.$filename))
        {
            $cont=file_get_contents($dir.$filename);
            if  (strstr($cont,'JFIF'))
            {
                echo ($filename."  JPEG \n");
                $start=(strpos($cont,"JFIF",0)-6);
                $end=strpos($cont,"HTTP/1.1 200 OK",0);
                $cont=substr($cont,$start,$end-6);
                $wholename=$ppl.$filename.".jpg";
                file_put_contents($wholename,$cont);
                echo("Saving :".$wholename." \n" );
    
    
                    }
            elseif  (strstr($cont,"\211PNG"))
            {
                echo ($filename."  PNG \n");
                $start=(strpos($cont,"PNG",0)-1);
                $end=strpos($cont,"HTTP/1.1 200 OK",0);
                $cont=substr($cont,$start,$end-1);
                $wholename=$ppl.$filename.".png";
                file_put_contents($wholename,$cont);
                echo("Saving :".$wholename." \n" );
    
    
                    }
            else
            {
                echo ($filename."  UNKNOWN \n");
            }
        }
     }
    ?>
    

    【讨论】:

      【解决方案6】:

      我对这个看似不活跃的开源 Python 项目很幸运: https://github.com/JRBANCEL/Chromagnon

      我跑了:

      python2 Chromagnon/chromagnonCache.py path/to/Chrome/Cache -o browsable_cache/
      

      我得到了所有打开的标签缓存的本地可浏览提取。

      【讨论】:

        【解决方案7】:

        注意:标志show-saved-copy已被删除,下面的答案将不起作用


        您可以单独使用 Chrome 读取缓存文件。

        Chrome 有一个名为“显示保存的副本按钮”的功能:

        显示保存的复制按钮 Mac、Windows、Linux、Chrome OS、Android

        当页面加载失败时,如果浏览器缓存中存在该页面的旧副本,则会显示一个按钮以允许用户加载该旧副本。主要启用选项将按钮置于错误页面上最显着的位置;次要启用选项将其置于重新加载按钮的次要位置。 #show-saved-copy

        首先断开与 Internet 的连接,以确保浏览器不会覆盖缓存条目。然后导航到chrome://flags/#show-saved-copy 并将标志值设置为Enable: Primary。重新启动浏览器后,将启用显示保存的复制按钮。现在将缓存的文件 URI 插入浏览器的地址栏中,然后按 Enter。 Chrome 将显示没有 Internet 连接页面以及显示已保存的副本按钮:

        点击按钮后浏览器会显示缓存文件。

        【讨论】:

          【解决方案8】:

          JPEXS Free Flash Decompilerin the source tree 处为 Chrome 和 Firefox 提供了执行此操作的 Java 代码(但不支持 Firefox 更新的缓存2)。

          【讨论】:

            【解决方案9】:

            编辑:以下答案不再有效,请参阅here


            Google Chrome cache file format description.

            缓存文件列表,查看网址(复制粘贴到浏览器地址栏):

            • chrome://cache/
            • chrome://view-http-cache/

            Linux 中的缓存文件夹:$~/.cache/google-chrome/Default/Cache

            让我们确定文件中的 GZIP 编码:

            $ head f84358af102b1064_0 | hexdump -C | grep --before-context=100 --after-context=5 "1f 8b 08"
            

            在 PHP 上逐行提取 Chrome 缓存文件(不包含标头、CRC32 和 ISIZE 块):

            $ php -r "echo gzinflate(substr(strchr(file_get_contents('f84358af102b1064_0'), \"\x1f\x8b\x08\"), 10,
            -8));"
            

            【讨论】:

              【解决方案10】:

              它被故意删除了,它不会再回来了。

              从 chrome 66 开始,chrome://cachechrome://view-http-cache 都已被删除。它们在 65 版中工作。

              解决方法

              您可以查看chrome://chrome-urls/ 以获取内部 Chrome 网址的完整列表。

              我想到的唯一解决方法是使用menu/more tools/developer tools 并选择Network 标签。

              之所以去掉就是这个bug:

              讨论:

              【讨论】:

                【解决方案11】:

                注意:以下答案已过时,因为 Chrome 磁盘缓存格式已更改。


                Joachim Metz 向some documentation of the Chrome cache file format 提供了更多信息的参考。

                对于我的用例,我只需要缓存 URL 及其各自时间戳的列表。我编写了一个 Python 脚本,通过解析 C:\Users\me\AppData\Local\Google\Chrome\User Data\Default\Cache\ 下的 data_* 文件来获取这些:

                import datetime
                with open('data_1', 'rb') as datafile:
                    data = datafile.read()
                
                for ptr in range(len(data)):
                    fourBytes = data[ptr : ptr + 4]
                    if fourBytes == b'http':
                
                        # Found the string 'http'. Hopefully this is a Cache Entry
                        endUrl = data.index(b'\x00', ptr)
                        urlBytes = data[ptr : endUrl]
                        try:
                            url = urlBytes.decode('utf-8')
                        except:
                            continue
                
                        # Extract the corresponding timestamp
                        try:
                            timeBytes = data[ptr - 72 : ptr - 64]
                            timeInt = int.from_bytes(timeBytes, byteorder='little')
                            secondsSince1601 = timeInt / 1000000
                            jan1601 = datetime.datetime(1601, 1, 1, 0, 0, 0)
                            timeStamp = jan1601 + datetime.timedelta(seconds=secondsSince1601)
                        except:
                            continue
                
                        print('{} {}'.format(str(timeStamp)[:19], url))
                

                【讨论】:

                  【解决方案12】:

                  Linux 上的 Google Chrome 缓存目录 $HOME/.cache/google-chrome/Default/Cache"simple entry format" 中的每个缓存条目包含一个名为 &lt;16 char hex&gt;_0 的文件:

                  • 20 字节 SimpleFileHeader
                  • 键(即 URI)
                  • payload(原始文件内容,在我们的例子中是 PDF)
                  • SimpleFileEOF 记录
                  • HTTP 标头
                  • 密钥的 SHA256(可选)
                  • SimpleFileEOF 记录

                  如果您知道要查找的文件的 URI,应该很容易找到。如果没有,像域名这样的子字符串应该有助于缩小范围。在缓存中搜索 URI,如下所示:

                  fgrep -Rl '<URI>' $HOME/.cache/google-chrome/Default/Cache
                  

                  注意:如果您没有使用默认的 Chrome 配置文件,请将 Default 替换为配置文件名称,例如Profile 1.

                  【讨论】:

                  猜你喜欢
                  • 2019-09-19
                  • 2016-03-22
                  • 2012-08-01
                  • 2023-04-07
                  • 2017-11-29
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-10
                  • 2016-07-03
                  相关资源
                  最近更新 更多