Internet Explorer の Cookie ファイルの書式
Internet Exlorer の Cookie データは、Windows 2000 以降の OS ではテキスト形式のファイルとして以下の場所に保存される。
C:\Documents and Settings\ユーザ名\Cookies
ファイルには以下の形式で Cookie のデータが記述されている。
variable_name value www.example.com/hoge/ 1024 415452544 29847586 1068952320 29846580 *
各行の意味は以下の通り。
variable_name | 変数名 |
value | 値 |
www.example.com/hoge/ | Cookie を発行したサイトのアドレス |
1024 | フラグ |
415452544 | 有効期限の下位32bit値の符号付き整数表現 |
29847586 | 有効期限の上位32bit値の符号付き整数表現 |
1068952320 | 作成日時の下位32bit値の符号付き整数表現 |
29846580 | 作成日時の上位32bit値の符号付き整数表現 |
* | デリミタ |
有効期限および作成日時は Win32 FILETIME 形式の値になっている。
Win32 FILETIME 形式とは、1601/1/1(UTC) からの経過時間を 100 ナノ秒で表した 64bit の値である。
日付の値は、32bit 単位で上位と下位に分割されているため、元の値を得るためには結合する必要がある。また、それぞれの値は符号付き整数値として記述されているので、負の値になる事もある。
上記例の有効期限の値を 2 進数で表現すると
29847586 | 415452544 |
00000001110001110111000000100010 | 00011000110000110100110110000000 |
128194406150000000 = 0000000111000111011100000010001000011000110000110100110110000000
となる。
この値を UNIX 時間へ変換するためには、次の式を使用する。
UNIX 時間 = (Win32 FILETIME 時間) * (10^-7) - 11644473600
11644473600 という数値は、1601/1/1(UTC) から UNIX 時間の起点である 1970/1/1(UTC) までの差分秒数である。
上記例の有効期限をこの式に当てはめ UNIX 時間に変換すると
1174967015 = (128194406150000000) * (10^-7) - 11644473600
となる。
さらに日付表示に変換すれば、2007/3/27 03:43:35(UTC) となる。
ちなみに日時の上位 32bit 値を 1 増やすと 429.4967296 秒、約 7 分進む事になる。
参考資料
Forensic Analysis of Microsoft Internet Explorer Cookie Files (pdfファイル)