Opera の cookie を管理するファイル cookies4.dat についての解析.

注意

この文書は,WindowsXPにWindows版の Opera9を インストールしたときの情報に基づいて作成してます.別のOS,別のバージョンの解析状況は追々.

この文書を基にして,Operaにカスタマイズその他の変更を加えて,不具合が発生しても責任は取れません.

突っ込み,感想,その他は,office@ashula.infoまで

説明

このページでは,OperaのCookie管理ファイル( cookies4.dat )について解説しています.

「ユーザごとの設定を使う」でインストールすると,通常,%APPDATA%\Opera\Opera\profile\以下に作られます. (%APPDATA%は,通常Documents and Settings\user_name\Application Data.エクスプローラの「ツール→フォルダオプション→表示→全てのファイルとフォルダを表示する」が設定されていないと見ることは出来ないです).正確な場所は opera:config#UserPrefs|CacheDirectory4の値を参照のこと.

ここにまとめた情報は主に,Opera File Formatsの公式の解説を基に作られています.ほかの資料は参考文献を参照してください.

構造

データ構造(レコード)についての概要は,binary filesを参照のこと.

cookies4.dat ファイルはヘッダと訪問済みリンク情報のデータレコードからなる.

ヘッダ

ヘッダは,4つの値からなり, cookies4.dat の ヘッダの4つの値はそれぞれ次のようになっている.

file version number
0x0000 1000
app. version number
0x0002 0000
idtag_length
0x0001
length_length
0x0002

なので,まとめるとファイルの先頭は以下のようになる.

     0        8        16       24
    +--------+--------+--------+--------+
    |  0x00  |  0x00  |  0x10  |  0x00  |
    +--------+--------+--------+--------+
    |  0x00  |  0x02  |  0x00  |  0x00  |
    +--------+--------+--------+--------+
    |  0x00  |  0x01  |  0x00  |  0x02  |
    +--------+--------+--------+--------+

本体

cookies4.dat ファイルの本体はドメイン,パス,クッキー本体の3種類のレコードと,ドメインの終了フラグ,パスの終了フラグのみの2種類のレコードの計5種類のレコードからなる.

これらの5種類のレコードは,Opera File Formats によれば以下のような構造を構成する.

["com" record]
 ["opera" record]
  ["www" record]
   [cookies]
   [Path components]
   [Path component terminator]
   [other domains]
   [end of domain flag ("www")]
  [end of domain flag ("opera")]
 [end of domain flag ("com")]

まず,TLDのレコードがあり,ドメインのレコード,必要ならばさらに細かいサブドメインのレコードが続く.パスのレコードがない場合でも,パスの終了フラグのレコードはある.

cookies4.dat ファイルで使われる レコードのタグIDとペイロードは以下の通り.vlink4.dat等と共通の要素と,いくつかの専用の要素からなる.

cookies4.dat の トップレベルのレコードの構成
タグID ペイロードの型説明
0x01 レコードドメインのレコード
(0x04 | MSB_VALUE)flagドメインの終了フラグ
0x02 レコードパスのレコード
(0x05 | MSB_VALUE)flagパスの終了フラグ
0x0003レコードクッキーのレコード
ドメインのレコード
タグの値内容の型説明
0x001Estringドメインの部分の名前
0x001F int8

このドメインに対するクッキーをどうフィルタリングするかをあらわす.このレコードがない場合,上位ドメインの設定が使われる.

  1. このドメインからの全クッキーを受け入れる.
  2. このドメインからの全クッキーを拒否する.
  3. このサーバからの全クッキーを受け入れる.上位ドメインでの設定より優先される.
  4. このサーバからの全クッキーを拒否する.上位ドメインでの設定より優先される.

ドメインに対する設定は,サブドメインに対する設定で上書きしない限り全サブドメインに対して適用される.

0x0021 int8 URLとは一致しないpath情報を含んだクッキーの取り扱う方法を定める.プライバシーの設定で受け入れる設定にしているとユーザに警告するようになるが,「警告する」が有効になっているときドメインによってフィルタリングされる.拒否するときは 1, 受け入れるときは 2. (Handling of cookies that have explicit paths which do not match the URL setting the cookies. If enabled in the privacy preferences the default is to warn the user, but when warning is enabled such cookies can be filtered by their domains: Value 1 indicates reject, and 2 is accept automatically.)
0x0025 int32

"Warn about third party cookies" モードになっているとき,このフィールドはその種のクッキーのフィルタリングに使われる.

  1. すべてのサードパーティーのクッキーを受け入れる.
  2. すべてのサードパーティーのクッキーを拒否する.
  3. このサーバからのすべてのサードパーティーのクッキーを受け入れる.上位ドメインでの設定より優先される.
  4. このサーバからのすべてのサードパーティーのクッキーを拒否する.上位ドメインでの設定より優先される.

ドメインに対する設定は,サブドメインに対する設定で上書きしない限り全サブドメインに対して適用される.

0x0026int32不詳
パスのレコード
タグの値内容の型説明
0x001Dstringpathパートの名前

構成

YAML(google://YAML)っぽい書式を使ってまとめるとファイルの構成は次のようになる.()

      header :
        file version number : 0x0000 1000 
        app version number  : 0x0002 0000 
        tag_id length       : 0x0001      
        length length       : 0x0002      
      body :
        - domain record :
            tag     : 0x01
            length  : 0xLLLL
            payload :
              domain_part_name :
                tag     : 0x001E
                length  : 0xLLLL
                payload : domain # 文字列(長さ domain_part_name record length)
              filtering_rule : 
                tag     : 0x001F
                length  : 0x0004
                payload : 0x0000 00RR # 
              explicit paths cookie handling rule : 
                tag     : 0x0021
                length  : 0x0004
                payload : 0x0000 00RR # 
              third party cookie filtering rule :
                tag     : 0x0025
                length  : 0x0004
                payload : 0x0000 00RR
        - path record :
            tag     : 0x02
            length  : 0xLLLL
            payload : 
              path_part_name : 
                tag     : 0x001D
                length  : 0xLLLL
                payload : path # 文字列
        - cookie record :
            tag     : 0x03
            length  : 0xLLLL
            payload : 
              cookie_name : 
                tag     : 0x0010
                length  : 0xLLLL
                payload : name # 文字列
              cookie_value : 
                tag     : 0x0011
                length  : 0xLLLL
                payload : value # 文字列
              expiry_date : 
                tag     : 0x0012
                length  : 0x0004
                payload : 0xTTTT TTTT # time_t 
              last_used :
                tag     : 0x0013
                length  : 0x0004
                payload : 0xTTTT TTTT # time_t
              rfc_2965_comment :
                tag     : 0x0014
                length  : 0xLLLL
                payload : value # 文字列
              rfc_2965_comment_url :
                tag     : 0x0015
                length  : 0xLLLL
                payload : value # 文字列
              v1_cookie_domain :
                tag     : 0x0016
                length  : 0xLLLL
                payload : value # 文字列
              v1_cookie_path :
                tag     : 0x0017
                length  : 0xLLLL
                payload : value # 文字列
              v1_cookie_port :
                tag     : 0x0018
                length  : 0xLLLL
                payload : value # 文字列
              https_flag :
                tag     : 0x0019
              cookie_version :
                tag     : 0x001a
                length  : 0x0004
                payload : 0xVVVV VVVV 
              only_sender_flag :
                tag     : 0x001b
              reserved_flag :
                tag     : 0x001c
              prefix_non_send_flag :
                tag     : 0x0020
              login_result_cookie_flag :
                tag     : 0x0022
              http_auth_cookie_flag :
                tag     : 0x0023
              third_party_send_flag :
                tag     : 0x0024
        - path_end_flag :
            tag     : 0x05
        - cookie_end_flag :
            tag     : 0x04
     

参考文献

Off

Opera File Formats, http://www.opera.com/docs/fileformats/ , opera.com

Off_jp

Opera のファイル形式, http://jp.opera.com/docs/fileformats/ , jp.opera.com

unofficial

Opera File Formats(私家訳), http://ashula.info/neta/opera/inis/OperaFileFormats-jp.html , t.ashula

O4FE

Opera4 File Explorer, http://users.westelcom.com/jsegur/O4FE.HTM , Josef W. Segur

更新履歴

  1. 2007/06/11 : 初版