読者です 読者をやめる 読者になる 読者になる

Mac版Internet ExplorerのWebアーカイブを分解するAppleScript その1

ちょっと内容が濃ゆいので、一回じゃ収まらない。記事を分割して書き込む。

 

ほとんど憶えてないが、昔の旧MacOSでは一時期MicrosoftからInternet Explorerが提供されていた。このブラウザの機能には、Webアーカイブを保存する機能がある。このWebアーカイブは、SafariにあるWebアーカイブとは全く違う形式で、しかもWindowsInternet ExplorerのWebアーカイブとも互換性の無い形式である。

 

WindowsInternet ExplorerのWebアーカイブは、MHTと呼ばれるメール添付ファイルをベースにした形式らしい。一応、Mac版も似た形式でこちらはWAFとも呼ばれている。

 

実は、MacInternet ExplorerのWebアーカイブは非常に強力な機能で、リンクのジャンプ数を設定してURLからサイト全体を保存出来たりする。あまりに便利だったので、大量にこのWebアーカイブのファイルが作成されているが、すでに現行のOSX上では動作しないので見る事が出来ない

 

しょうがない。しょうがない。しょうがない。自力でハックして見られるようにしよう。まずは、ファイル形式の解読から。

 

Webアーカイブのファイル仕様解説

WAFのファイル判別は、ファイル内容の先頭4バイト(つまりマジックナンバー)が「.WAF」になっている。また、クリエイターは「MSIE」で、ファイルタイプは「WAFF」となっている。

ターミナルからmdfindで検索するなら、以下のように打つと良い。

 

mdfind "kMDItemFSTypeCode == 0x57414646"

 

ファイル内容は、基本的に「ID」と「Size」と「Data」の項目を一組のレコードとして、それを連続的に並べています。

IDはDataの種別を示し、SizeはDataのサイズ、Dataは項目内容そのものでテキストやバイナリなど。

IDは4文字、Sizeは4バイトの整数型、Dataは可変サイズで型はIDに依存します。

 

ファイルの先頭はヘッダー(ID,Size,Data)があり、IDは、「.WAF」です。SizeはIDとSize,Dataを含んだものになり注意が必要。

以降はアーカイブしたファイル情報(複数のレコードで構成される)が連続しています。

ざっくり説明すると、以下のようになります。

 

Web Archive File = Header + Archived File × n

Header = ID+Size+Data (※Sizeの内容はIDとSizeとDataの各サイズを合算)

Archived File = Record × n

Record = ID+Size+Data (※Sizeの内容はDataのサイズ)

 

 

アーカイブしたファイル情報の第1エントリは、構成する複数レコードのIDが「ntry」、「url 」、「mime」、「data」等になっています。

ntryは、次のファイル情報への相対ロケーションを持ちます。

urlは、アーカイブしたファイルのurlです。例)http://hoge.com/hage.htm

mimeは、dataのmimeタイプです。例)text/html

dataは、アーカイブしたファイル内容です。dataのSizeは、必ず0になっているようで、次のレコードを辿るには、ntryの情報が必要です。

 

第2エントリ以降は、IDが「post」で始まります。その後ろに規則性を無視してオールXの文字列が128(80h)バイトだけなぜか存在します。

IDが「cate」が追加されます。

cateは、前のファイル情報への相対ロケーションを持ちます。

 

最終エントリは、ファイル情報ではなく、IDが「cat 」のレコードが存在します。また、ntryのレコードがありません。

各エントリのインデックスの様ですが解析してません。

 

その他、なぞのIDとそのdata内容

bsrl 例)http://hoge.com/hage.htm

hntt 例)"48697-1f30-3d390e91”

 

aux  例)http://hoge.com/hage.htm

 

またまた、ざっくり説明すると、アーカイブ内のレコード構成は以下のようになります。

 

First Archived File = ntry + url + mime + data + etc

Middle Archived File = post + XXXX + ntry + url + mime + data + etc + cate

Last Archived File = post + XXXX + etc + cate + cat

 

たぶん続く。

 

参考サイト

マジックナンバー (フォーマット識別子) - Wikipedia

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_(%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E8%AD%98%E5%88%A5%E5%AD%90)