はじめまして、ネットエージェント株式会社の村中と申します。今回はバイナリファイルの可視化ツール BinVis を紹介したいと思います。

-----

 BinVis はバイナリファイルを解析、可視化し、特徴ある部分を探したり、特定のパターンや(場合によっては)暗号データを調べたり、といった用途で使用される高機能なファイル可視化ツールです。とは言っても、最終的には目視による解析は必須なのですが、それらを可能な限り支援してくれるツールとして、主にリバースエンジニアリングやフォレンジックの分野で利用できます。
binvis_annotated3_prob では、早速使ってみます。BinVis を用いて、wav ファイルを開いた時の表示を右図に示します。各ウィンドウは、それぞれ以下の形式でバイナリデータを解析、表示します。
  1. Text
  2. Byte Plot
  3. RGB Plot
  4. Bit Plot
  5. Dot Plot
  6. Byte Presence
  7. Strings
  8. Byte Cloud
  9. Byte Frequency
 まず 1. の Text ですが、これは 16 進ダンプと ASCII でデータ列を表示します。ヘキサエディタによくある表示ですね。この Text ウィンドウには 336 バイトしか表示されませんが、後述の Byte Plot から表示オフセットを変更できます。
 2. の Byte Plot は、1 バイトを 1 ピクセルに、つまり「値」を「色」に対応させて表示します。色づけは Color Coding ウィンドウから変更でき、Normal、ASCII、Frequency、Invert の4つから選択できます。ボタンの効果は順に、0~255 の値をそのまま緑色の明るさに、ASCII 文字だけ青色で表示、低頻度の値は青で高頻度の値は赤で表示、色の反転となっているようです。また、Byte Plot の任意の位置をクリックすると、クリックした位置に対応した部分が Text 表示に反映されます。
 続いて 3. の RGB Plot ですが、これは 3 バイトを 1 ピクセルに、つまり 1 バイトごとの値にそれぞれ三原色の赤・緑・青を対応させて表示します。このウィンドウでは折り返しする幅を 1~640 の値で設定でき (地味なバグで、一度スライドバーを動かすと 631 までしか設定できないが…)、これをうまく使うとベタに保存された画像を簡単に確認できます。
 4. の Bit Plot は 1 ビットを 1 ピクセルに対応させて表示、つまりは ON/OFF での表示です。
 以上の 4 つが、もっとも基本的な可視化機能となります。これらに加えて、さらに解析をやりやすくするための機能が以降の 5 つになります。
 5. Dot Plot は、縦軸と横軸をファイルのオフセットとして、その交差する部分の値が同じなら色をつけます。値によって明るさが変わるようです。6. Byte Presence は、ある一定の範囲に 0~255 の値がそれぞれあるかどうかを調べ、あれば色をつけます。横軸が 0~255 の値、縦軸がブロックとなっています。7. Strings は、ASCII 文字が 5 文字以上続いたデータを文字列と見なし、一覧で表示するもので、いわゆる strings コマンドと同等の機能です。8. Byte Cloud は 0~255 の値がそれぞれファイル内にどれくらいあるかによって文字の大きさを変えて表示するものです。4~5 年ほど前に登場したタグクラウドのバイナリ版と思えばよいでしょう。そして最後の 9. Byte Frequency は、ある範囲内で、それぞれの値が出現する頻度をヒストグラムで表示するもので、頻度解析などでよく利用されます。
 以上、各ウィンドウを簡単に解説しましたが、より詳しい説明は、Visual Forensic Analysis and Reverse Engineering of Binary Data がご参考になると思いますので、興味がある方はぜひ参照ください。

 さて、以上で機能解説は終わりですが、個人的な感想としては、紹介した表示のほとんどは Navigator ウィンドウから表示位置を変更でき、Plot 系や Byte Presence や Byte Frequency の表示は同期するため、かなり「分かりやすい」目視が可能だと感じました。また、Navigator ウィンドウにある Play/Stop ボタンを使うと自動的にスクロールする機能もあるため、流し読みもできます。
 特に気に入った機能は Dot Plot と Byte Presence で、これらの表示はファイル内に出てくるデータの特徴をかなりはっきり表示できており、特に Dot Plot は値の周期や繰り返しがあった場合の表示が特徴的で、wav ファイルを見るとかなり興味深い絵が見られます。また、Byte Presence は値に偏りがあるときの表示が特徴的で、Byte Plot の横に並べるとより効果的にデータの特徴を確認できます。
 逆に、Bit Plot や Normal 色づけの Byte Plot は、BMP 形式くらいでないと違いがわかりにくく、これらは少し使いにくく、利用頻度に欠けると感じました(対象データによるとは思いますが…)。

-----

 BinVis は、全体的にグラフィカルに表示する機能が充実しているので、シグネチャや値を見て解析するような用途にはあまり向かないかもしれませんが、データを大雑把に見る、眺めるといった用途にはかなり適していると感じました。
 今回は BinVis 自体の紹介をさせていただきましたが、Visual Reverse Engineering of Binary and Data Files では、利用する際のケーススタディが 4 つほど紹介されており、BinVis の非常に有用な使い方が載っています。また、BinVis のソースコードも公開されていますので、その気があれば自分で改良もできます。
 BinVis自体は今のところ Attractor が動かなかったり、最後までスクロールした時や Byte Plot 表示でファイルの終端以降をクリックした時に例外が発生したり、Color Coding を変更しても Navigator を操作するまで変更が反映されなかったりと、まだ完璧とは言い難い品質ですが、ファイル解析のアプローチを増やしてくれる点ではかなり面白いツールです。興味があれば、ぜひとも触ってみてください。