ヤルキデナイズド

Unclassified Articles on Software and IT

Mac の Safari のキャッシュから画像その他を取り出すメモ

(以下の内容は Safari 8.0.6 現在のもの)

~/Library/Caches/com.apple.Safari/fsCachedData に blob が保存されている。 file コマンドで画像かどうか判別して適当に拡張子をつけてやれば復元できる。

% file fsCachedData/000DFAD8-B02E-47A2-AFA0-36D985C47D20
(略)/000DFAD8-B02E-47A2-AFA0-36D985C47D20: PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced

Finder で blob ファイルを選ぶと上手いことプレビューしてくれるのでそれでもいい。

f:id:uasi:20150619104639p:plain

その他レスポンスデータなどは ~/Library/Caches/com.apple.Safari/Cache.db に記録されている。これはただの SQLite3 データベースファイル。 BLOB カラムには binary plist らしきものが入っている。

% sqlite3 Cache.db 'SELECT * FROM cfurl_cache_schema_version;'
104

% sqlite3 Cache.db .schema
CREATE TABLE cfurl_cache_schema_version(schema_version INTEGER);
CREATE TABLE cfurl_cache_response(entry_ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,     version INTEGER, hash_value INTEGER, storage_policy INTEGER, request_key TEXT UNIQUE,   time_stamp NOT NULL DEFAULT CURRENT_TIMESTAMP, partition TEXT);
CREATE TABLE cfurl_cache_blob_data(entry_ID INTEGER PRIMARY KEY, response_object BLOB, request_object BLOB,               proto_props BLOB, user_info BLOB);
CREATE TABLE cfurl_cache_receiver_data(entry_ID INTEGER PRIMARY KEY, isDataOnFS INTEGER, receiver_data BLOB);
CREATE INDEX request_key_index ON cfurl_cache_response(request_key);
CREATE INDEX time_stamp_index ON cfurl_cache_response(time_stamp);
CREATE INDEX proto_props_index ON cfurl_cache_blob_data(entry_ID);
CREATE INDEX receiver_data_index ON cfurl_cache_receiver_data(entry_ID);

cfurl_cache_response.request_key は URL の文字列。ただし末尾に '[' + request_host + ']' が付属している場合がある。

cfurl_cache_receiver_data.receiver_data は UUID の文字列(大文字ハイフン区切りの形式)。 fsCachedData ディレクトリに UUID を名前とするバイナリファイルが格納されている。