如何读取 Chrome 缓存文件?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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:

    转到:chrome://cache 找到您要恢复的文件并点击它的链接。 将第 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),您可以执行以下操作:

    访问chrome://view-http-cache/并点击您要恢复的页面 将页面的最后(第四)部分逐字复制到文本文件(例如:a.txt) 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 Decompiler 在in 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:

https://chromium.googlesource.com/chromium/src.git/+/6ebc11f6f6d112e4cca5251d4c0203e18cd79adc https://bugs.chromium.org/p/chromium/issues/detail?id=811956

讨论:

https://groups.google.com/a/chromium.org/forum/#!msg/net-dev/YNct7Nk6bd8/ODeGPq6KAAAJ

【讨论】:

【参考方案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.

【讨论】:

干杯,这有助于实现github.com/akx/cachemoney :)

以上是关于如何读取 Chrome 缓存文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何提取chrome浏览器缓存中的视频和音乐

chrome如何清除缓存 chrome清除缓存方法

怎样设置chrome不缓存文件

chrome浏览器缓存文件在哪

如何在没有缓存的情况下测量文件读取速度?

Chrome浏览器的使用技巧