* convert Google Chrome cache file to regular file
authormitty <mitty@7d2118f6-f56c-43e7-95a2-4bb3031d96e7>
Mon, 9 Jan 2012 13:49:56 +0000 (13:49 +0000)
committermitty <mitty@7d2118f6-f56c-43e7-95a2-4bb3031d96e7>
Mon, 9 Jan 2012 13:49:56 +0000 (13:49 +0000)
 * cache files from chrome://cache/

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@129 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

misc/chrome-about.cache.pl [new file with mode: 0644]

diff --git a/misc/chrome-about.cache.pl b/misc/chrome-about.cache.pl
new file mode 100644 (file)
index 0000000..02f2dfd
--- /dev/null
@@ -0,0 +1,61 @@
+#! /usr/bin/perl -w
+
+use strict;
+use warnings;
+
+my $cachefile = shift @ARGV || die "usage: $0 cache.file [filename.to.save]";
+if (! -r $cachefile) {
+    die "$0: cannot read $cachefile";
+}
+my $savefile = shift @ARGV;
+
+open CACHE, "<$cachefile";
+
+
+my $hrcount = 2;
+my $filename;
+my $line;
+while ($hrcount > 0) {
+    $line = <CACHE>;
+    if ($line =~ /<hr>/) { $hrcount--; }
+    if ($line =~ /https?:.+\/([^\/<]+)</) {
+        $filename = $1;
+    }
+    if ($line =~ /Content-Disposition:.+filename=(&quot;)?([\w.]+)(&quot;)?/) {
+        $filename = $2;
+    }
+}
+print STDERR "$0: filename from cache: '$filename'\n";
+if (! $savefile) {
+    $savefile = $filename;
+}
+print STDERR "$0: save file to '$savefile'\n";
+
+$hrcount = 1;
+while ($hrcount > 0) {
+    $line = <CACHE>;
+    if ($line =~ /<hr>/) { $hrcount--; }
+}
+
+$line = substr $line, 15;
+
+open SAVE, ">$savefile" || die "$0: cannot write $savefile";
+binmode(SAVE);
+
+$hrcount = 1;
+while ($hrcount > 0) {
+    print SAVE hex2bin($line);
+    
+    $line = <CACHE>;
+    if ($line =~ /<hr>/) { $hrcount--; }
+}
+
+print STDERR "$0: done\n";
+
+sub hex2bin {
+    my $str = shift @_;
+    
+    $str = substr $str, 11, 64;
+    
+    return pack("H*", join("", split(" ", $str)));
+}