はじめまして、 shibamoto と申します。業務では主にウェブアプリケーション診断を行ったり、関連する情報を調べたりしています。どうぞよろしくお願いします。今回はウェブアプリケーション診断からちょっとはずれたことを書こうと思います。
はじめに
ウェブアプリケーションを診断する時、私はよく Fiddler というツールを利用します。
Fiddler はローカルプロキシと呼ばれるもののひとつで、ウェブサイトへの通信を確認する時などに重宝します。通信内容を保存しておけば、あとでお客様にエビデンスとして提供することもできるのでいろいろと便利です。
今回の内容
Fiddler でキャプチャーした通信内容を保存すると .saz という拡張子のファイルが作成されます。自分などはたまにファイルの中身を整理したり編集したくなるのですが、最新の Fiddler であればキャプチャーした通信を Fiddler Viewer で整理したり、通信内容を編集して保存しなおすことが可能です。(注1)
そんな Fiddler を使用していてふと
Fiddler を使わなくたって SAZ 形式のファイルをごにょごにょすることができるのではないか?
と思ったのが、今回の話を書こうと思ったきっかけです。
検証 その1
さて、前述の SAZ 形式のファイルは正式には Session Archive ZIP と言います。名前からもわかるとおり、実際は ZIP 形式のファイルに過ぎません。そのため、拡張子を .zip に変更すれば、一般的なファイル圧縮・解凍ツールでも中身を見ることができます。
ということは、ファイルを解凍して編集した後、再度圧縮して拡張子を変更してあげれば、変更後の内容を Fiddler で見ることもできるはずです。
ためしにふだん利用している 7-Zip で解凍 → 圧縮してから Fiddler で表示してみたのですが…
やや、むじゃきに解凍・圧縮しただけでは怒られてしまいました。
エラーメッセージを見ると
The Session Archive File could not be loaded. The file may be corrupt; try redownloading or recreating it.
(SAZ 形式のアーカイブを読み込めませんでした。ファイルが破損している可能性があるので、再度ファイルをダウンロードするか作成してみてください。)The selected file is not a Fiddler-generated .SAZ archive of Web Sessions.
(選択されたファイルは Fiddler で生成された通信内容からなる SAZ 形式のアーカイブではありません。)
どうやら Fiddler がファイルの読み込みを嫌がっているようです。
調査 その1
解凍・圧縮するだけではだめということがわかりました。そこでまずファイルの中身に何かしら手がかりがないか探してみます。
ファイルを一旦 Linux 上に移し、 unzip コマンドでファイルの中身を覗いてみましょう。
$ unzip -l 2015-11-02.saz Archive: 2015-11-02.saz Fiddler (v4.6.0.2) Session Archive. See http://fiddler2.com Length Date Time Name --------- ---------- ----- ---- 0 2015-11-02 13:00 raw/ 2038 2015-11-02 13:00 raw/01_c.txt 1519 2015-11-02 13:00 raw/01_m.xml 814 2015-11-02 13:00 raw/01_s.txt ... 中略 ... 73 2015-11-02 13:00 raw/50_c.txt 910 2015-11-02 13:00 raw/50_m.xml 19 2015-11-02 13:00 raw/50_s.txt 293 2015-11-02 13:00 [Content_Types].xml 16255 2015-11-02 13:00 _index.htm --------- ------- 460564 153 files
たくさんのファイルで構成されていますが、よく見ると規則性があることがうかがえます。
まず raw というディレクトリがあり、 [Content_Types].xml と _index.htm というファイルがあります。続いて raw ディレクトリの中にテキスト形式と XML 形式のファイルが入っているようです。ファイルには三種類(サフィックスが _c と _m と _s のもの)あり、それらがキャプチャーした通信の数だけ存在します。
うーん… SAZ 形式のファイル構成はわかりましたが、 Fiddler がファイルを読み込めない理由はわかりません。
調査 その2
しかたがないので次に行きます。今度はファイルフォーマットに手がかりがないか探してみます。
とりあえずウェブで SAZ 形式のファイルフォーマットを検索したところ、ちょっと気になる情報を見つけました。
The SAZ/ZIP file’s comment field contains information about the version of Fiddler that generated the archive.
(SAZ および ZIP 形式のファイルのコメントフィールドにはアーカイブを生成した Fiddler のバージョン情報が格納される。)参考:SAZ Files
念のため ZIP 形式のファイルフォーマットについても確認したところ、最後のフィールドはたしかに「ZIP 形式のファイルのコメント」と定義されています。
4.4.26 .ZIP file comment: (Variable)
(4.4.26 ZIP 形式のファイルのコメント:(可変長))
いちおう SAZ 形式のファイルを BZ というバイナリエディターで確認すると、ファイルの末尾に Fiddler のバージョンや URL などが見えます。
この文字列は unzip コマンドを実行した時のヘッダーにも出力されているのですが、何も考えずにツールで解凍 → 圧縮しただけのファイルにはこのフィールドに値が入っていませんでした。
検証 その2
では、このコメントはどう追加すればよいのでしょうか? zip コマンドのヘルプから探してみます。
$ zip --help
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
... 中略 ...
-c add one-line comments -z add zipfile comment
どうやら -z オプションで追加できるようです。
ためしに -z オプションを指定して圧縮し、拡張子を .zip から .saz に変更してみます。
$ unzip 2015-11-02.zip -d 2015-11-02 ← ディレクトリを指定して解凍
$ cd 2015-11-02 ← ディレクトリを移動
$ echo '<!-- 2015-11-02 -->' >> _index.htm ← 任意のファイルを編集(ファイルの末尾に文字列を追加)
$ zip -r 2015-11-02.zip . -z ← カレントディレクトリを指定して圧縮
... 中略 ...
Fiddler (v4.6.0.2) Session Archive. See http://fiddler2.com ← コメントを追加
. ← ドットと[Enter]キーを入力して終了
$ mv 2015-11-02.zip 2015-11-02.saz ← 拡張子を変更
このファイルを Fiddler で開くと…
今度はきちんと中身を表示することができました。エラーメッセージも表示されません。
おわりに
SAZ 形式のファイルは Fiddler を使わなくても解凍 → 編集 → 圧縮 → 閲覧できることがわかりました。これで Windows 以外の OS 上でも気がねなく SAZ 形式のファイルをいじることができそうです(今のところこれといって使いみちはないのですが)
ちなみにコメントにはどのような文字列を入れても構わないようです。 Fiddler は SAZ 形式のファイルを読み込む時、値や書式まではチェックしていないようですね。
注1:Fiddler Viewer はメニューから[File] → [New Viewer]をクリックすることで起動できます。通信内容を編集するにはウェブセッションペイン(左のペイン)から編集したいセッションを選択し、[F2]キーを押します。編集後にもう一度[F2]キーを押せば変更した内容が反映されます。また、レスポンスペイン(右下のペイン)から[ImageView]タブを選択し、[Edit Image…]リンクをクリックすれば、画像ファイルを編集することも可能です。