@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

圧縮ファイルの再帰展開ツールその名も“蟹ハンマー”壱号

ツールの名前*1はともかく、指定したフォルダ配下にある圧縮ファイルを再帰的に展開していくツールを隣の席な人が作ってくれたので、調査チームのWebで公開しています。

フォレンジック調査ツール
http://www.ji2.co.jp/forensics/tools/index.html

“蟹ハンマー”は内部的には 7zip の DLL を呼び出して圧縮ファイルを展開するラッパープログラムになっていますので、7zip が対応している圧縮ファイルであれば再帰展開できます。

例えば、EnCaseは圧縮ファイルとしてZIPやRARに対応しているので、EnCase内で圧縮ファイルをマウントすることが可能です。しかし、この処理はオンメモリで処理されるので、大量の圧縮ファイルなどが存在する場合にはメモリを圧迫したりクラッシュしたりする可能性があります。また、日本でよく使われているlzh形式には対応していませんので、EnCaseが対応していない圧縮ファイルについてはいずれにしても別の展開作業が必要になります。
この為、EnCaseのトレーニングなどでは、証拠ファイル内から圧縮ファイルを外部にコピーし、展開処理を行なったものをLEF化するなどの手順が解説されます。取りだした圧縮ファイルの展開ツールについては、お好きなものをご利用くださいということになります。
圧縮ファイルの展開ツールは様々ありますが、なかなかこういった用途に向く再帰処理が可能でかつログなどを細かく出力するのが見当たらなかったので“蟹ハンマー”の登場となりました。(再帰処理するのはあるんですけど、ちょっと希望する方法と違っていたりしたので、圧縮ファイル名と同じフォルダ名を拡張子部分にアンダーバー付きで作成とかになっています)

ファイルのシグネチャをみて圧縮ファイルの形式を判断とか難しいことはやってませんが、拡張子パターンを指定することは可能です。例えば拡張子が .zip ではなく .zi_ などのパターンになっているケースでも、拡張子リストでそのパターンを指定することで、.zi_ を ZIP 形式の圧縮ファイルとして処理させることが可能です。ある意味ヘッダが多少壊れていても展開してくれるので7zipってすごいなぁとか思ったり。

パスワード付きのZIPファイルなどについては、とりあえずファイル名だけ展開し、ファイルの中身が空(サイズゼロ)の状態になります。パスワード付きのファイルがあったかはログに出力されるので、そのログファイルを確認して後からパスワードを入力して個別に展開するなどの作業を行なうことになります。とはいえ、ファイル名は展開されるので、EnCaseとかでファイル名の検索を行なうとかの作業はそのまま可能です。
パスワード付きのZIPファイルなどは、1行1ファイル名でログが出力されるので、該当ファイルを特定してパスワードを入力して個別に展開などの手順が必要になると想定しています。
ちなみにログファイルのエンコードUTF-8で作成されるようになっていますので、日本語以外のファイル名についてもいけると思います。*2

対象となる圧縮ファイルのフルパスが248文字を超えるケースついては、エラーになるのでそのファイルの展開処理をスキップしログに ERROR で記録するようになっています。将来的には代替パス上に展開処理を行ない作業を継続させる案も出ていますが、1号には搭載されていません。(というか248文字を超える時には短くして処理したのをテストしてもらったら、いずれにしても長すぎて失敗しちゃうのであきらめたんですけど)

もともと想定している用途がフォレンジックとかeDiscoveryの蟹工船的な作業の改善用ですので、一般用途向けではないかと思いますが、興味のある方は使ってみていただければです。(ツールに対するサポートはありませんけど、エラーとかご希望な機能など何かありましたら、隣の人のBlogなどにコメントいただければよいのではないかと思います)

忘れてましたが、実行環境としてマイクロソフト社の .NET Framework が必要です。

とりあえず、かなりネストした構造でのテストなどもやっていますが、蟹ハンマー 2号では指定したフォルダ配下に、ツリー構造を維持した状態で展開するオプションも必要かもしれないと考えている今日この頃です。

*1:鬼に金棒ではなく蟹にハンマーというか、単に蟹を使いたかっただけという噂もありますが、ちょっとモンハンチック?

*2:LZHファイルの中に932以外のCodePageでファイル名が入っている場合などでは化けると思います