如何读取 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://cache
和 chrome://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" 中的每个缓存条目包含一个名为 <16 char hex>_0
的文件:
如果您知道要查找的文件的 URI,应该很容易找到。如果没有,像域名这样的子字符串应该有助于缩小范围。在缓存中搜索 URI,如下所示:
fgrep -Rl '<URI>' $HOME/.cache/google-chrome/Default/Cache
注意:如果您没有使用默认的 Chrome 配置文件,请将 Default
替换为配置文件名称,例如Profile 1
.
【讨论】:
干杯,这有助于实现github.com/akx/cachemoney :)以上是关于如何读取 Chrome 缓存文件?的主要内容,如果未能解决你的问题,请参考以下文章