汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(略称:青空白猫)
青い空を見上げればいつもそこに白い猫 目次
●概要・重要注意事項・基本操作●メイン画面:ファイル形式判定・ハッシュ生成
●バイナリデータ視覚化表示
●ヘキサエディタ(バイナリエディタ)
●ファイルサイズ変更・結合
●文字コード別文字列抽出
●時刻情報・バージョン情報表示
●x86/x64逆アセンブル
●各種ハッシュ・ssdeep等生成
●YARAルールでスキャン
●ステガノグラフィー解析
●ファイル・データ抽出
概要・重要注意事項・基本操作
●概要
●重要注意事項
●基本操作
|
各画面の説明(メイン画面:ファイル形式判定・ハッシュ生成)
●ファイル形式判別・ハッシュ生成機能の機能補足と基本注意事項- 表示される判別結果は、あくまでバイナリデータから推測したものであり、必ずしも正しいわけではありません。特に、暗号化されたファイルの判別は困難です。また、実行可能ファイルの場合には、ファイルアナライザ対策としての偽装もありえることに注意してください。例えば、マルウェアによっては、実行可能ファイルの前方に文書等別の形式のファイルを結合することで、ファイル形式の偽装を行います。この場合、マルウェアは実行可能ファイル本体である、オフセット0x200以降といった特定位置以降のバイナリデータを別途実行可能ファイルとして使用します。
- 解析対象ファイルとして、ユーザーモードでのプロセスのコアダンプ結果、すなわち特定プロセスが使用するユーザーモードでのプロセスメモリ全域を1つのファイルとして出力したものも解析可能です。この場合は、あらかじめ「うさみみハリケーン」でメニューの[デバッグ]→[アクセス可能な全てのメモリ領域のダンプファイルを作成]からコアダンプを行ってください。
-
メインのファイル形式判別機能には「TrID」の判別エンジンを使用しています。この判別エンジンが使用する定義ファイル「triddefs.trd」は、『うさみみハリケーン』のバージョンアップ時に最新のものを同梱しますが、折りを見て下記配布元から最新版を入手し、このソフトウェア同梱のものを更新されることをお勧めします。「TrID」の判別エンジンである「TrIDLib.dll」と「triddefs.trd」のライセンス文書「TrIDLib-License.txt」は、当ヘルプ内の「ライセンス情報」ページに格納しています。
■ Marco Pontello's Home Page
※「TrIDDefs.TRD package」をダウンロードして対象定義ファイルを「うさみみハリケーン」インストールフォルダに導入(上書き)
http://mark0.net/soft-trid-e.html
- このソフトウェアでは、汎用ファイルアナライザ「Detect It
Easy」の各種ファイル形式/パッカー/コンパイラ判別エンジンにも対応しています。同判別エンジンのDLL版「DetectHelper.zip」を下記配布元から入手して、ZIPファイル内のフォルダ「DetectItEasyDB」を、うさみみハリケーンのインストールフォルダに配置することで、「TrID」による判別結果と併せて「Detect
It Easy」による判別結果も表示します。 なお、このDLL版「Detect It Easy」は、「Detect It
Easy」作者による配布版から開発者用ファイル削除とデータベース内容更新を行ったものです。『うさみみハリケーン』のバージョンアップに併せて、データベースを更新した新しい「DetectHelper.zip」を配布していますので、折りを見て下記配布元から最新版を入手されることをお勧めします。過去に同梱していた「DetectHelper.exe」は、一部のセキュリティソフトが原因で動作不具合が生じたため、使用をやめました。必要に応じて、判別時にCtrlキーを押しておくか、あるいは配置したフォルダの名前を変更し、「Detect
It Easy」による判別処理をスキップすることもできます。「Detect It
Easy」の内部処理に多大な時間がかかることもある等の理由により、この機能の導入はユーザーの方の判断で行ってもらうことにしました。
■ Detect It Easy DLL版 (青い空を見上げればいつもそこに白い猫 専用)
DetectHelper.zip
- 上記「TrID」および「Detect It
Easy」ベースの判別機能は、日本製のソフトウェアが使用する独自のファイル形式は判別できません。そのため、このソフトウェアでは、日本独自のファイル形式に対応するために、日本人製作による拡張子判別エンジン「WinEx32.dll」を用いたファイル形式の判別にも対応しています。「WinEx32.dll」を下記配布元から入手して、うさみみハリケーンのインストールフォルダに「WinEx32.dll」を導入することで、
「TrID」による判別結果と併せて「WinEx32.dll」による判別結果も表示します。
■ 極-NTSOFT-55555
※「WINEX32.DLL」をダウンロードして対象DLLを「うさみみハリケーン」インストールフォルダに導入
http://www.55555.to/(アーカイブ)
- 指定された解析対象ファイルが、直接実行可能なファイルであるEXEファイル等であれば、Windows APIを用いた16/32/64ビット実行ファイルの判別も併せて行い、その結果も表示します。このWindows APIを用いた実行可能ファイルの判別は、拡張子を偽装したケースにも対処可能です。
- 指定されたファイルのMD5/SHA-1/SHA-256ハッシュ生成時には、それぞれのハッシュを別個のスレッドで同時に生成することで、生成時間の短縮を図っています。Windows 7が問題なく動作する程度のスペックのPCならば、約2GBのファイルに対して15秒ほどでこの3つのハッシュの生成を完了します。ハッシュ生成の待機中は、このソフトウェアが一時的に応答がないフリーズの状態になることがあります。
●画面説明 ●ダイアログ本体 ■(サイズ変更用サイズグリップ) ダイアログの右下最下部にあるサイズグリップをドラッグすることで、このダイアログのサイズを変更可能です。 ●ファイル形式判定 ■参照 解析対象ファイルのパスを指定します。メイン画面であるダイアログへ対象ファイルをドラッグ・アンド・ドロップしたり、このソフトウェア起動時のコマンドラインオプションでも解析対象ファイルのパスを指定可能です。このソフトウェアが作成するテキスト形式の設定保存ファイル「AoZoraSiroNeko.ini」の中に、「NoReadOnly=1」という文字列を追加すれば、指定したファイルが読み取り専用の場合に、その読み取り専用属性を自動的に解除します。このボタンの押し下げにより、実行環境によっては、隠しファイルに設定されているファイルも表示・選択可能です。 ■再解析 ファイル形式の判定と、ハッシュ生成を行います。このボタンは、エディットボックスに解析対象ファイルのパスを直接書き込んだりペーストした場合に使用します。 ■Web検索 ブラウザを起動して、パスを指定された解析対象ファイルのファイル名をWebで検索します。Shiftキーを押し下げた状態でこのボタンを押せば、表示済みのSHA-1ハッシュをWebで検索します。 ■ファイル情報解析結果(リストビュー) TrIDの判別エンジンによるファイル形式の判定結果を表示します。「推定度」はその推定されたファイル形式との合致度の高さを意味します。また、上述「Detect It Easy DLL版」が導入されているならば、推定度欄に「(DetectItEasy)」と表示し、推定されるファイル形式、パッカーおよびコンパイラの情報を併せて表示します。同様に、上述の日本製拡張子判別エンジン「WinEx32.dll」が導入されているならば、推定度の欄に「(WinEx32)」と表示し、この判別エンジンでの推定拡張子や推定ファイル情報を併せて表示します。さらに、EXEファイルといった単独で実行可能なファイルが指定された場合は、推定度の欄に「(WinAPI)」と表示し、API関数を用いた16/32/64ビット実行ファイルの判別結果を併せて表示します。もしもファイル形式の判定時にエラーが生じた場合は、リストビュー右上のエディットボックスにエラー内容を表示します。 このリストビュー上で項目を選択すると、その項目に表示されている「推定ファイル情報」文字列をクリップボードにコピーします。このコピー機能はWebでの検索の補助といった用途を想定しています。 ●指定ファイルの操作 ■バイナリデータ視覚化表示 指定されたファイルの全バイナリデータを読み込んで、そのバイナリデータの構造や出現頻度、色情報などを視覚化するダイアログを表示します。 ■バイナリエディタ起動・編集 指定されたファイルをこのソフトウェアのバイナリエディタでオープンします。 ■ファイルサイズ変更・結合 指定されたファイルのファイルサイズの変更(増加・減少)や、別途指定したファイルとの結合を行います。もしバイナリエディタのウィンドウが表示されているならば、誤操作防止のため、この機能を使用する前に必ずバイナリエディタのウィンドウを閉じてください。 ■文字コード別文字列抽出 指定されたファイルから文字列を抽出するダイアログを表示します。 ■エクスプローラのメニュー表示 指定されたファイルに対する、エクスプローラのコンテキストメニューを表示します。本来エクスプローラ上で表示されるものであるため、一部のメニュー項目は使用できません。このコンテキストメニューに、このソフトウェアなどの各種ファイル用プログラム解析ツールを登録しておけば、同ツールの起動を簡易化できます。エクスプローラのコンテキストメニューに独自のメニュー項目を追加するアプリケーションが実行されている等の原因により、この機能が正常に動作しないことや、正常に動作してもこのソフトウェアの終了時に不正終了を招くことがあります。この場合、状況によりますが、このソフトウェアを管理者権限あるいは非管理者権限で起動することで問題が解決するケースもあります。 ■時刻情報・バージョン情報表示 指定されたファイルの時刻情報や、実行ファイルでのバージョン情報等を表示します。時刻情報の変更にも対応しています。 ■x86/x64逆アセンブル 解析対象ファイルの指定オフセット以降のバイナリデータを逆アセンブルします。x86とx64の両方に対応しています。 ■各種ハッシュ・ssdeep等生成 解析対象ファイルのオフセット指定範囲、入力テキストおよび指定ファイルに対して、各種ハッシュやssdeepおよびエントロピーを生成します。 ■YARAルールでスキャン <参考>YARAについて 解析対象ファイル、あるいは別途指定したファイルや32ビットプロセスで、そのファイルやプロセスメモリのバイナリデータに対して、YARAルールを用いたスキャンを行います。 ■ステガノグラフィー解析 <参考>ステガノグラフィーの解析について 各種画像形式ファイルに隠蔽された色々なデータを解析します。解析対象となるのは、主にBMP、PNG、JPEG、GIFおよびTIFF形式の画像ファイルです。 ■ファイル・データ抽出 指定ファイルに内包される各種ファイル・データを検索します。また、検索結果を基にした、各種ファイル・データの抽出にも対応しています。指定ファイル内のzlib圧縮データを展開して保存することも可能です。ファームウェアの解析にこの機能を使用する場合は、解説「ファームウェア解析への『うさみみハリケーン』活用について」を参照願います。 ■ハッシュ生成 指定されたファイルに対する、MD5/SHA-1/SHA-256のハッシュを生成して表示します。このボタンは指定されたファイルのサイズが過大なため自動のハッシュ生成がスキップされた場合に使用します。また、リストビューでのチェックボックスにより、生成するハッシュを選択可能です。リストビュー上に表示されたハッシュ文字列を選択すると、そのハッシュ文字列をクリップボードにコピーします。 ■D&Dファイルとハッシュ比較 このチェックボックスにチェックが入っているならば、指定されたファイルと、このメイン画面のダイアログに対してドラッグ・アンド・ドロップされたファイルとでSHA-256のハッシュ比較を行い、その比較結果を右側エディットボックスに表示します。事前に指定されたファイルのSHA-256ハッシュが表示されている必要があります。 ■クリップボード内ハッシュ比較 クリップボード内の文字列の中に、指定されたファイルのMD5/SHA-1/SHA-256の半角英数字ハッシュ文字列いずれかが含まれているかを判定し、判定結果を右側エディットボックスに表示します。事前に指定されたファイルのいずれかのハッシュが表示されている必要があります。この機能はハッシュ文字列が含まれているか否かの判定であり、ハッシュ文字列の完全一致を検査しているものではありません。 ■青空白猫 のバージョン情報 このソフトウェアのバージョン情報ダイアログを表示します。また、同ダイアログから、ブラウザを起動して上述「triddefs.trd」や「Detect It Easy DLL版」および「WinEx32.dll」の配布元へ簡単にアクセスできるようにしています。このダイアログで表示されるソフトウェア名「青い空を見上げればいつもそこに白い猫」文字列部分は、一般的なテキストエディタ同様にドラッグで文字列を選択して右クリックからコピーできます。 ■当ソフトウェア正式名称をコピー このソフトウェアの正式名称「青い空を見上げればいつもそこに白い猫」を文字列としてクリップボードにコピーします。 ■終了 このソフトウェアを終了します。終了時にはこのダイアログの表示位置を設定保存ファイル「AoZoraSiroNeko.ini」に保存し、次回起動時には表示位置を復元して表示します。誤操作回避のため、縮小表示チェックボックスあるいは手動でこのダイアログのサイズを変更した結果は保存・復元しません。また、画面の解像度変更といった原因により、保存されたダイアログの左上端の位置が、使用されている全てのモニターの表示領域内に含まれない場合は、表示位置の復元は行いません。ダイアログ表示情報のリセットを行いたい場合は、上記「AoZoraSiroNeko.ini」をリネームまたは削除してください。 |
各画面の説明(バイナリデータ視覚化表示)
●バイナリデータ視覚化表示機能の機能補足と基本注意事項- この機能には指定ファイルのサイズ相当分のメモリを使用します。
- 解析対象ファイルのバイナリデータを、グラデーション、出現頻度、RGB配列といった13パターンの表示方法でビットマップとして視覚化表示可能です。ユーザーが特定バイナリデータに対する色情報を任意に設定できるパターンも2つ用意しています。
- 使用例としては、視覚化されたバイナリデータから、目視で解析の手がかりとなる特定データあるいはパターン等を探る、日本で「目Grep」と呼ばれるアプローチが挙げられます。
- 他の具体的な使用例として、例えば実行可能ファイルの解析時に0x00、0x90、0xCCのバイナリデータに対して任意の色情報を設定すると、コードセクション内で新たにプログラムコードを埋め込むことが可能な箇所「Code cave」を容易に探し出せるようになります(コードセクション外なら要DEP対策)。
- 各種カラーパターンを用いたビットマップ表示時には、バイナリデータをほぼ機械的に色情報に変換して表示します。このため、折り返し幅のサイズ指定状況によっては、ビットマップの構造上異常な状態となり、表示色が乱れることがあります。当機能では元のバイナリデータは加工せず、また適切ではない指定状況を視認できるようにするため、ソフトウェア側ではこの表示色の乱れへの対処は行いません。
- この機能ではダイアログ表示時に自動的に出現頻度解析を行い、画面右上方のリストビューに0x00から0xFFまでの1バイトのバイナリデータごとに出現頻度順でリストアップします。ただし、この処理は巨大なサイズのファイルでは時間がかかることから、256MB以上のファイルの場合は出現頻度解析をスキップし、後から任意のタイミングで行えるようにしています。
- この機能では、スクロールバーやボタンを用いてファイル中のオフセットを変更しながら、そのオフセット以降に対応する視覚化されたビットマップを表示可能です。この際、低スペックのPCでは、連続するビットマップ表示処理に遅延あるいはフリーズが生じることがあります。そのため、低スペックのPCでは、スクロールバーを高速で動かすといった急激な連続する表示更新はなるべく避けてください。
- この機能で表示されるビットマップからは、カラーパターンを用いた逆変換により元のバイナリデータを復元可能です。そのため、機密事項が含まれているバイナリデータを視覚化表示した場合は、スクリーンショットなどでの同ビットマップの公開は絶対に行わないでください。
- この機能のことを「バイナリデータの視覚化」と表現しているのは、プロセスメモリエディタなどによる「バイナリデータの可視化」を超えて、そこからさらに深い考察や解析を可能にすることを目指しているためです。
●画面説明 ●表示開始オフセット指定 ■(エディットボックス) ダイアログ左上部にあるエディットボックスで、視覚化表示を行うバイナリデータの開始オフセットを指定します。指定後に[左指定内容で表示更新]ボタン押し下げで視覚化表示を更新します。また、エディットボックス付属のスピンコントロールで、開始オフセットを折り返し幅だけ増減させながら視覚化表示を更新することもできます。 ■先頭・終端 視覚化表示を行うバイナリデータの開始オフセットを、ファイルの先頭あるいは終端へ変更して視覚化表示を更新します。ただし、終端ボタン押し下げ時には、開始オフセットはファイル終端オフセットから、最低限バイナリデータが表示可能なオフセットに自動修正されます。 ■≪・≫ 視覚化表示を行うバイナリデータの開始オフセットを、次のページまたは前のページに変更して視覚化表示を更新します。移動量すなわちページあたりの表示バイト数は、256に折り返し幅をかけた数値となります。 ■(水平スピンコントロール) 上記[≪][≫]ボタンの間に配置された水平スピンコントロールです。視覚化表示を行うバイナリデータの開始オフセットを、ページ半分だけ前後に移動させて視覚化表示を更新します。移動量は、256に折り返し幅と2分の1をかけた数値となります。 ■(水平スクロールバー) 視覚化表示を行うバイナリデータの開始オフセットを、前後に移動させて視覚化表示を更新します。移動量は、スクロールバー上のクリックする位置により、折り返し幅あるいは1ページ分となります。さらに、スクロールボックスをドラッグすることにより、ファイル内の指定した位置へ移動させることもできます。低スペックなPCでは、スクロールボックスを高速でドラッグすると、表示更新処理が間に合わずに処理遅延あるいはフリーズを招くことがありますので注意してください。 ●表示カラーパターン・折り返し幅・表示倍率 ■表示カラーパターン(コンボボックス) 視覚化表示に用いるカラーパターンを指定します。 「緑グラデーション」は0x00から0xFFまでの1バイトの16進数値それぞれに緑色の濃さを当てはめています。「緑グラデーション反転」は緑色の濃さを反転したもので、元の1バイトのバイナリデータをビット反転して「緑グラデーション」で表示したものに相当します。 「サーモグラフィー風」はいわゆる虹色のグラデーションを、0x00から0xFFまでの1バイトの16進数値それぞれに当てはめています。 「ASCII+NULL強調」は、半角英数字の文字列とその文字列終端を視認するためのカラーパターンです。 「右カスタムカラー指定」の場合は、コンボボックス右側の「16進数値別カスタムカラー」で、1バイトの16進数値とその数値に対応する色を設定し、チェックボックスをチェックして設定を有効にします。事前に上記カスタムカラーの設定を有効にしてから、コンボボックスでこのカラーパターンを選択してください。表示後にカスタムカラーの設定を変更・反映させたい場合は、設定変更後に[左指定内容で表示更新]ボタンを押し下げします。 「出現頻度階調マップ」は出現頻度の回数が多い順に、1バイトの16進数値それぞれに虹色のグラデーションを当てはめています。「出現頻度割合マップ」は出現頻度のパーセンテージに応じて、1バイトの16進数値それぞれに青から赤のグラデーションを当てはめています。なお、出現頻度の割合に突出した数値が無くほぼ均等ならば、この「出現頻度割合マップ」ではほとんど単色表示のように見えることになります。 「RGB配列」はバイナリデータを16/24/32ビットのRGB配列に当てはめて表示します。このカラーモードにより、対象ファイルにバイナリデータとして含まれるビットマップ画像を表示可能なケースがあります。なお、表示開始オフセットや色情報のビット数(16/24/32)および折り返し幅が適切でないと、正確に対象ファイル内ビットマップ画像を表示できません。また、ビットマップ画像は基本的にデータを下から上へ格納するボトムアップ型のため、このカラーパターンで表示されるビットマップ画像はたいてい上下反転となります。RGB配列ではなく独自のパレットを使用するビットマップ画像や他の特殊なビットマップ画像は、このカラーモードでは表示ができないという問題があるため、当ソフトウェアの「ファイル・データ抽出」機能あるいは、「スペシャルねこまんま57号」の汎用各種データ抽出機能(メニューの「ファイル」→「ファイルを指定してデータ抽出」)や、実行可能ファイルならば当ソフトウェア同梱のResStrView_DotNET35.exe/ResStrView_DotNET40.exeを併用してビットマップ画像(あるいは他形式の画像)を抽出されることをお勧めします。 「同梱ColorData24.bmp」は、同梱している同ビットマップファイルのRGB配列をカラーパターンとして、各座標の色をそのまま1バイトの16進数値それぞれに当てはめて表示します。このビットマップファイルは、サイズが16x16、色情報は24ビット固定です。このビットマップファイルを画像編集ソフトで編集することにより、任意のカラーパターンを製作し適用可能になります。 「エントロピーマップ」は、0x200バイト単位でのエントロピーの状態を視覚化したものです。エントロピーは、「バイナリデータの構成や状態」をデータ内容の乱雑さとして、対数ベースの式に当てはめて演算した結果(数値)です。このカラーパターンでは、通常エントロピーを青色のグラデーションで表示しますが、圧縮あるいは暗号化が行われたことの指標といえる数値7以上では、別途赤色のグラデーションで表示します。視覚化にあたっては、数値が高いほど明るい色で表示するようにしました。なお、PEファイルの各セクションのエントロピー値は、当ソフトウェア同梱のPEダンパー兼PEエディタ「UMPE」で取得可能です。 ■折り返し幅(エディットボックス) 視覚化表示の横幅を指定します。幅の上限は2048です。指定後に[左指定内容で表示更新]ボタン押し下げで視覚化表示を更新します。また、エディットボックス付属のスピンコントロールで折り返し幅を動的に変更可能です。 ■表示倍率(コンボボックス) 視覚化表示の表示倍率を指定します。表示対象となるバイナリデータのバイト数は変化しません。 ■左指定内容で表示更新 各指定内容を元に視覚化表示を更新します。このボタンは、開始オフセットや折り返し幅の値を手入力で指定した場合に使用します。また、カスタムカラーの設定を動的に変更する場合にも使用可能です。 ■カーソル直下オフセット情報(エディットボックス) 視覚化表示されている領域上で、カーソル位置にあるオフセットや同オフセットの格納値を表示します。カラーモードがRGB配列の場合は、ビットマップとしての座標情報も表示します。このソフトウェアのバイナリエディタが起動されているならば、この視覚化されている領域上でクリックすると、クリック時のカーソル位置にあるオフセットを使って、バイナリエディタでの表示オフセットを変更します。 ■(マウスホイール入力) 視覚化表示されている領域上で、マウスホイールを前後に回転させることにより、表示開始オフセットを変更して視覚化表示を更新可能です。この領域の外でマウスホイールを回転させると、コンボボックスなどフォーカスを持つコントロールにマウスホイール入力情報が送信され、コンボボックスの選択項目変更などが行われますので、不測の動作が起きないよう注意してください。なお、バイナリエディタが表示されているならば、バイナリエディタ側で優先的にマウスホイール入力情報を処理するため、上記の表示開始オフセットの変更はできません。 ●出現頻度解析 ■出現頻度解析実行 0x00から0xFFまでの1バイトの16進数値それぞれの値が、ファイル中のバイナリデータにどれだけ頻繁に出現したか解析し、その結果をこのボタンの下にあるリストビューに表示します。デフォルトでは出現頻度のパーセンテージすなわち出現回数が多い順でリストアップしますが、[Hex順]チェックボックスを使って、0x00から0xFFまでの順番によるリストアップに切り替えることもできます。 |
各画面の説明(バイナリエディタ)
●ヘキサエディタ(バイナリエディタ)「16Edit FX」の機能補足と基本注意事項- 「うさみみハリケーン」には、ヘキサエディタ「へきさにゃん」を同梱しています。必要に応じて使い分けてください。
- この機能には指定ファイルのサイズ相当分のメモリを使用します。
- このソフトウェアが実装しているバイナリエディタは、ヘキサエディタモジュール「16Edit
FX」に日本語対応化と機能追加を行ったものです。基本機能は一般的なバイナリエディタと同じですが、バイナリデータの貼り付けによるファイルサイズの増加には対応していません。このバイナリエディタが用いるクリップボードの形式は独自仕様です。このバイナリエディタでコピーされたデータしか貼り付けできません。
- このソフトウェアが何らかのメッセージボックスを表示している状態では、絶対にこのバイナリエディタのウィンドウを閉じないでください。バイナリエディタの終了処理との競合が発生し、このソフトウェアがフリーズする可能性があります。
-
このバイナリエディタはファイルサイズの増加は想定していません。貼り付け処理などで表示上ファイル終端を延長しても、実際のファイル書き込み時には延長分を切り捨てます。ファイルサイズの変更を行いたい場合は、このソフトウェアのメインダイアログから[ファイルサイズ変更・結合]ボタンで専用ダイアログを表示して、ファイルサイズの変更を行ってください。
-
もともとこのバイナリエディタは、基本的に4GBを超えることがない実行可能ファイル(PE32/PE32+ファイル)を対象としていることや、一般的な用途としてファイルアナライザでは対象ファイルのサイズが4GBを超えることはまず無いため、このバイナリエディタはオフセット0xFFFFFFFFまで編集可能にしています。
-
このバイナリエディタは、「バイナリデータ視覚化表示」機能や「文字コード別文字列抽出」機能、「x86/x64逆アセンブル」機能、「ファイル・データ抽出」機能および「YARAルールでスキャン」機能との連動が可能です。これらの機能の使用時には、このバイナリエディタも起動しておくことをお勧めします。なお、このバイナリエディタが表示されているならば、「バイナリデータ視覚化表示」機能や「文字コード別文字列抽出」機能、「x86/x64逆アセンブル」機能、「ファイル・データ抽出」機能および「YARAルールでスキャン」機能でのマウスホイール操作の入力情報が、このバイナリエディタ側で優先的に処理されます。
-
バイナリファイルの書き換えを改造コード(自動書き換え用のスクリプト)で行うならば、バイナリファイルの書き換え内容を『スペシャルねこまんま57号』用の改造コードに変換してください。改造コードの実行は、『スペシャルねこまんま57号』を起動してメニューの「ファイル」→「簡易バイナリファイル書き換え」から行います。なお、このバイナリファイル書き換え機能は、オフセットとバイナリデータを指定する「改造コード型」とは別に、差分を指定して書き換えを行う「差分書き換え型」の書式にも対応しています。これらの書式に用いられる英数字や記号は必ず半角で記述してください。『スペシャルねこまんま57号』はDEPの適用対象に設定すると起動できません。
当ソフトウェアには、『スペシャルねこまんま57号』をその非対応OS、つまりWindows Vista以降で使用するための補助ツール「Neko57Helper.exe」を同梱していますので、この補助ツールの併用をお勧めします。
■『スペシャルねこまんま57号』のバイナリファイル書き換え用コード書式 ▲改造コード型 010000-E703 →オフセット010000から2バイトを「E703」で書き換えます 0100>01FF-E703E7030001007EFFFFF80000000000 →オフセット0100から01FFを指定バイナリデータ「E703E7030001007EFFFFF80000000000」で埋めます 10$ねこまんま →オフセット10以降に文字列「ねこまんま」対応バイナリデータを書き込みます(Windows ANSI) 0200>02FFxAA →オフセット0200から02FFを、1バイト毎に値0xAAでXOR(排他的論理和)を演算して書き換えます 0200>02FFX12345678 →オフセット0200から02FFを、4バイト毎に値0x12345678でXORを演算して書き換えます ;コメント →セミコロン以降改行までをコメントと判断し無視します ;使用例 ;環境フラグセット 0080-010300FFFF ;CG・回想モードフラグALLON 0100>01C7-01 01D0>01DF-FF ▲差分書き換え型 ・先頭アスタリスクでコメント扱い ・オフセットは必ず8桁で指定 ・「FILENAME」の記述は表示用で書き換え対象の指定ではない ・コード中のコロンやスペースの位置は、以下の書式と厳密に比較 *使用例 *オフセット2054のバイナリデータが「74」ならば「EB」に書き換え FILENAME Target.exe 00002054: 74 EB 000051AC: 55 C3
-
『スペシャルねこまんま57号』の上記バイナリファイル書き換え機能の画面では、2つのファイルを指定して比較し、そのバイナリデータの差異を元に、上記差分書き換え型の改造コードを出力することも可能です。ただし、比較するファイルは同じサイズであることが必要です。
- 『スペシャルねこまんま57号』には、指定したファイルに含まれる、画像や音声、動画およびその他の任意のファイルを切り出す機能が実装されています。メニューの[ファイル]→[ファイルを指定してデータ抽出]でこの機能を呼び出します。状況によっては、このバイナリエディタで、含まれる画像等のファイルヘッダを探してから該当ファイルサイズ分を範囲指定して別ファイルに保存するよりも、大幅に少ない工数で目的のファイルを得ることが可能です。状況や必要に応じて当ソフトウェアの「ファイル・データ抽出」機能と併用してみてください。
●画面説明 ●バイナリエディタの基本操作 ■基本操作 基本操作は一般的なバイナリエディタと同様です。一部の操作はツールバーのボタンで行います。ツールバーのボタンにカーソルを重ねると、そのボタンの機能の説明文が表示されます。16進データ表示部と、文字列データ表示部の両方で、16進データあるいは文字列データの直接入力が可能です。文字列データの直接入力は、選択されている文字コードを基準にして行います。漢字・かな入力モードすなわちIMEが有効になっている場合は、誤入力防止のため16進データ表示部での入力は無視します。必要に応じ、左クリックで任意のオフセットを指定したり、ドラッグで選択範囲を指定します。書き換え結果の保存には、ツールバー上で保存ボタンを押し下げする必要があります。 このバイナリエディタで、ツールバーの左から5番目のボタンを押すと、選択範囲のバイナリデータを下記の文字列形式(C言語の配列形式)に変換してクリップボードにコピーし、さらに選択範囲のバイナリデータを別途ファイルとして保存します。このボタンを押す代わりにCtrlキー+Dキーでも同じ処理を行います。クリップボードへの文字列コピーのみ行いたい場合は、Altキーを押しておく(Ctrl+Dキー併用不可)か、ファイル保存をキャンセルしてください。 ▲クリップボードへコピーするバイナリデータの表示テキスト形式(例) unsigned char aData[] = { 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x92, 0x6C, 0x91, 0x9D, 0x89, 0xC1, 0x83, 0x7B, 0x83, 0x5E, 0x83, 0x93, 0x82, 0xAA, 0x89, 0x9F, 0x82, 0xB3, 0x82, 0xEA, 0x82, 0xDC, 0x82, 0xB5, 0x82, 0xBD, 0x00 }このバイナリエディタで使用する表示用フォントのサイズは変更可能です。標準ではサイズが22となっていますが、このソフトウェアが作成するテキスト形式の設定保存ファイル「AoZoraSiroNeko.ini」の中に、「HexFontSize=20」という文字列を追加することで変更されます(この例ではサイズ20に変更)。このフォントサイズは10から80で指定してください。 このバイナリエディタは終了時にウィンドウの位置とサイズを設定保存ファイル「16Edit.ini」に保存し、次回起動時に位置とサイズを復元して表示します。ただし、画面の解像度変更といった原因により、保存されたウィンドウの左上端の位置が、使用されている全てのモニターの表示領域内に含まれない場合は、表示位置の復元は行いません。 |
各画面の説明(ファイルサイズ変更・結合)
●ファイルサイズ変更・結合機能の機能補足と基本注意事項- 誤操作を避けるため、この機能はバイナリエディタとの同時使用はできません。
- ファイルサイズの変更は、増加・減少ともに可能です。
- ファイルの結合時には、解析対象として指定されたファイルの終端以降に、結合用ファイルの全バイナリデータを追加します。結合後のサイズが4GBを越えることはできません。
●画面説明 ●ファイルサイズ変更 ■新しいファイルサイズ(エディットボックス) 変更後のファイルサイズを16進数で入力します。何も入力されていないならば0バイトへの変更と判断します。 ■10進数でサイズ入力(チェックボックス) 入力した変更後のファイルサイズを、10進数の数値として認識します。この10進数での入力ならば、桁区切りに半角「,」が使用されていても入力値を認識可能です。 ●ファイル結合 ■指定ファイルを結合(チェックボックス) このチェックボックスが有効ならば、ファイルサイズの変更ではなく結合を行います。 ■結合用ファイルのパス(エディットボックス) [参照]ボタン、あるいはこのエディットボックスへの直接入力で、結合用ファイルのパスを指定します。また、ファイルをこのダイアログへドラッグ・アンド・ドロップすることでもパスを指定可能です。 ●ファイルサイズ変更・結合実行 ■ファイルサイズ変更・結合実行 ファイルサイズ変更・結合処理を行います。正常に処理が行われたならば、エラーメッセージが表示されることなく、当ダイアログ上部で「現在のファイルサイズ」の表示が更新されます。 |
各画面の説明(文字コード別文字列抽出)
●文字コード別の文字列抽出機能の機能補足と基本注意事項- 文字列抽出においては、誤抽出を低減させれば抽出漏れが増加するという問題があります。このソフトウェアでは膨大な誤抽出を回避するために、文字列か否かの判定をやや厳しく行っています。その結果、NULL終端を持たない特殊な文字列など、一部の文字列は抽出に失敗することがあります。当機能では、ASCII文字列のみNULL終端がなくても抽出できるようにしています。必要に応じて、上記バイナリエディタでの視認や文字列検索を併用してください。なお、基本的に、プログラムから参照される文字列はNULL終端を持ちます。
-
特定プロセスのプロセスメモリ全域から文字列の抽出を行いたいならば、まずうさみみハリケーンで対象プロセスをオープンしてから、メニューの[デバッグ]→[アクセス可能な全てのメモリ領域のダンプファイルを作成]でダンプファイルを出力します。次に、メニューの[その他]→[汎用ファイルアナライザ]で、このソフトウェアを起動し、出力したダンプファイルを指定後に当機能を使用します。上記ダンプファイル出力時には、必要に応じてうさみみハリケーンのメニュー[ファイル]→[プロセスを停止/再開]を併用してください。
- この機能では約50MBのメモリを使用します。
●画面説明 ●ダイアログ本体 ■(サイズ変更用サイズグリップ) ダイアログの右下最下部にあるサイズグリップをドラッグすることで、このダイアログのサイズを変更可能です。文字列抽出結果を表示するリストビューも、ダイアログのサイズ変更に連動してサイズが変動します。 ●文字列抽出 ■開始(エディットボックス) 文字列抽出を行う開始オフセットを指定します。このオフセットは0x10000単位で指定してください。 ■文字コード(コンボボックス) 文字列抽出対象となる文字列の文字コードを指定します。1バイトの半角英数字や半角記号からなる文字列が対象ならば、「ASCII」を選択してください。「ASCII(NULLなし)」は、文字列終端にNULL終端すなわち文字列終端を意味するバイナリデータ0x00が無くても抽出します。「ASCII(NULLあり)」では、文字列終端にNULL終端がある場合のみ抽出します。Unicodeでは、漢字やひらがなといった日本語文字列を抽出対象とすると多大な時間がかかるケースもあるため、文字列先頭が半角英数字と半角記号の場合にのみ抽出する「Unicode (英数)」モードを用意しました。もし「Unicode (LE)」で抽出に時間がかかりすぎる場合は、この「Unicode (英数)」を試してみてください。また、例えばバイナリデータ「005100510051005100...」を、「Unicode (LE)」ならば文字列「儀儀儀儀」(0051の連続)として抽出し、「Unicode (英数)」ならば文字列「QQQQ」(5100の連続)として抽出しますので、意図しない抽出が起きていないかの確認にも使用可能です。 ■最低字数(エディットボックス) 文字列抽出対象となる文字列の最低字数(1~99)を指定します。文字列抽出時に、文字列がこの字数未満ならば抽出をスキップします。このソフトウェアが使用するAPI関数の仕様により、この最低字数はWindows ANSIとUTF-8の場合には、文字列の字数ではなくバイト数の意味となります。 ■抽出実行 文字列抽出を実行します。抽出結果は下部リストビューにリストアップされます。誤抽出が膨大なケースに対処するため、抽出数には10万件の上限を設定しています。抽出された文字列が256文字以上の場合は誤抽出の可能性があるため、文字列を256文字で切って表示します。 ●検索 ■検索対象文字列(エディットボックス) 下部リストビューにリストアップされた抽出結果の中から検索する、検索対象文字列を指定します。最大指定字数は64文字です。 ■検索モード(コンボボックス) 指定文字列検索時に、抽出された文字列との文字列比較を「完全一致」あるいは「部分一致」のどちらで行うかを選択します。抽出された文字列に余計な文字が付くケースが多いことから、検索モードはまず部分一致で試されることをお勧めします。 ■前を検索・次を検索 指定された検索条件で前方あるいは後方への検索を実行します。下部リストビューで現在選択されている(複数選択時にはフォーカスがある)項目のオフセットが検索開始の基点となります。 ●抽出結果 ■抽出件数(エディットボックス) 下部リストビューにリストアップされた抽出結果の件数を表示します。この件数が上限の10万件ならば、開始オフセットを10万件分よりも後方に変更して再抽出してみてください。 ■全選択列をコピー 下部リストビューにリストアップされた抽出結果のうち、選択列のオフセットと抽出文字列をまとめて、クリップボードにコピーします。 ■全選択列の文字列のみコピー 下部リストビューにリストアップされた抽出結果のうち、選択列の抽出文字列だけをまとめて、クリップボードにコピーします。 ■全内容をファイルに保存 下部リストビューにリストアップされた抽出結果全部をまとめて、Unicode文字列のテキストファイルに出力します。必要に応じて、テキストエディタでの整形や可読文字への変換などを行ってください。 ■抽出結果リスト(リストビュー) 下部リストビューにリストアップされた抽出結果の中で項目を選択すると、その項目の抽出文字列をクリップボードにコピーします。同時に、このソフトウェアのバイナリエディタが起動されているならば、選択された項目のオフセットを元に、バイナリエディタでの表示オフセットを変更します。 |
各画面の説明(時刻情報・バージョン情報表示)
●画面説明 ●時刻情報・バージョン情報 ■時刻情報・バージョン情報(リストビュー) 指定されたファイルの時刻情報やバージョン情報などを表示します。バージョン情報は基本的に実行可能ファイルの場合に表示されます。実行可能ファイルのデジタル署名の署名者情報は、その存在がデジタル署名の有効性を意味しているわけではありません。使用するAPI関数の仕様により、バイナリエディタで読み書き可能としてオープンしているファイルの署名者情報は取得できません。リストビュー上で項目を選択して右クリックすることにより、ポップアップメニューが表示され各種コピー操作が可能になります。 ●時刻情報変更 ■変更対象(コンボボックス) 変更対象の時刻情報を設定します。「全て」ならば、作成・更新・アクセス全部の時刻情報を、右方で指定された時刻に変更します。 ■変更 時刻情報の変更を実行します。変更に用いる時刻は表示しているローカル時刻すなわち、日本ならば協定世界時(UTC)+9時間です。ファイルシステムの仕様により、ここで変更した時刻情報がシステム上で正確に保存されるとは限りません。 |
x86/x64逆アセンブル
●用途および仕様補足-
この機能は、実行可能ファイルではないファイルに埋め込まれたプログラムコードの解析や、断片化されたあるいは、一部のプログラムコードをデータセクションに保持するような、特殊な実行可能ファイルの解析等を想定して実装しました。このような用途のため、逆アセンブル対象とするバイナリデータは、ファイル全体ではなく開始オフセット以降の最大1MB(0x100000)分に絞り、解析の効率化を図っています。
●画面説明 ●逆アセンブル(開始オフセットからファイル終端までか1MB分) ■開始オフセット 逆アセンブルを行うバイナリデータの、開始点となるオフセットを16進数で指定します。 ■対象CPU(コンボボックス) 逆アセンブルをx86とx64のどちらのCPUベースで行うか指定します。併せて、逆アセンブルコードリストを、Intel構文とAT&T構文のどちらで出力するかも選択できます。たいていのWindows用逆アセンブラでは、Intel構文で逆アセンブルコードリストを出力します。 なお、x86/x64とは別に、8086/ARM/MIPS/PowerPC/SPARC/SuperHなどの逆アセンブルにも対応させていますが、これは実験的な実装であり、機能と安全性の検証が不十分なため、使用は非推奨です。 ■逆アセンブル実行 逆アセンブルを実行します。対象バイナリデータは指定した開始オフセットからファイル終端まで、あるいは1MB(0x100000)先までです。ただし、Shiftキーを押しながらこのボタンを押し下げると、逆アセンブル対象範囲サイズを4KBに変更してピンポイントで逆アセンブルできるようにしています。状況によっては逆アセンブル処理に時間がかかるケースも考えられます。そのため、逆アセンブル処理が止まっているようにみえる状況でも、このボタンを連打せず、しばらく様子を見てください。 ●出力逆アセンブルコード内文字列検索 ■検索対象文字列(エディットボックス) 検索対象の文字列を設定します。さらに、右にあるコンボボックスで、指定した文字列と完全に一致する文字列のみ検索するか、指定した文字列を含んでおり部分的に一致する文字列も検索するかを選択します。通常は初期設定の「部分一致」で対処可能ですが、検索該当件数が多いと予測される場合など、状況に応じて「完全一致」に切り替えてください。 ■前を検索・次を検索 出力済みの逆アセンブルコードリスト内で、選択されてフォーカスのある列を基準に、指定した検索条件で前方あるいは後方への検索を実行します。もし、選択されフォーカスのある列がなければ、逆アセンブルコードリストの最後あるいは最初の列を基準として検索を行います。 ●その他の機能 ■x86簡易アセンブラ兼逆アセンブラを起動 うさみみハリケーンに同梱している、x86簡易アセンブラ兼逆アセンブラの「ロケットねこみみ」(NekoAsm.exe)を起動します。64ビット版のWindows OS環境下ならば、「ロケットねこみみ」の64ビット版であるNekoAsm64.exeを起動します。操作方法等の詳細はリンク先を参照してください。 ■逆アセンブルコードリストの全選択列をコピー 出力された逆アセンブルコードリスト上の、全ての選択列を文字列としてクリップボードにコピーします。 ●逆アセンブルコードリスト ■逆アセンブルコードリスト(リストビュー) 出力された逆アセンブルコードリストを表示します。このリスト上でクリックした場合、当ソフトウェア付属のバイナリエディタが起動されているならば、クリックした列のオフセットを使って、バイナリエディタ上での表示オフセットを変更します。また、クリックした列の、カーソル直下のカラムすなわち、「オフセット」、「16進ダンプ」、「逆アセンブルコード」のいずれかの表示内容文字列をクリップボードにコピーします。 |
各種ハッシュ・ssdeep等生成
●各種ハッシュ・ssdeep等生成機能の機能補足と基本注意事項-
この機能が対応しているハッシュは、「CRC32」・「MD4」・「MD5」・「SHA1」・「SHA-256」・「SHA-384」・「SHA-512」・「SHA3-224」・「SHA3-256」・「SHA3-384」・「SHA3-512」・「RIPEMD-160」です。現在までの普及状況、あるいは今後の普及見込みを勘案して、これらのハッシュを選択しました。ちなみに「SHA」は「Secure
Hash Algorithm」の略です。
-
この機能で演算して出力する「MD5」や「SHA3-512」といったハッシュ(ハッシュ値)とは、本来は対象となるバイナリデータにのみ対応する固定長バイナリデータで、対象バイナリデータの正当性の検証などに用いられます。当機能ではこのハッシュのバイナリデータを文字列として表示しています。基本的に、ハッシュから元のバイナリデータを復元することはできません。ただし、改ざん済のバイナリデータでオリジナルと同じハッシュを生成させる(ハッシュ値の衝突)という、いわゆる「なりすまし」の方法があり、「CRC32」、「MD4」、「MD5」、「SHA-1」および「RIPEMD-160」には、必ずしも容易に攻撃できるわけではない、そのような脆弱性が指摘されています。
-
「SHA3-224」などの「SHA3-***」のハッシュは、現在は上記のような脆弱性がないとされる新しいハッシュの種類です。ハッシュの固定長サイズ(ビット数)が異なる「SHA3-224」・「SHA3-256」・「SHA3-384」・「SHA3-512」があります。ベースは「Keccak」という名称のハッシュでしたが、安全性の確保されたハッシュとしてその演算方法が公的に標準化される過程で、その演算方法に若干修正が加えられたため、たとえば元の「Keccak-224」と新しく標準化された「SHA3-224」では出力結果が異なります。
-
「ssdeep」は主にマルウェアの実行可能ファイルの類似度を検証するための、一種のハッシュといえます。複数のマルウェアの類似度を検証することで、亜種の判断や類似度によるグループ分けが容易になり、また、解析アプローチの指針が立てやすくなるといったメリットがあります。ただし、ssdeepの比較結果による類似度の数値は、実行可能ファイルの類似性を正しく反映できないこともあります。ssdeepの生成時には、ssdeepの公式サイトで配布されている専用DLL(改変なし)を、LoadLibrary関数で動的にロードして同生成処理を行っています。なお、このDLL「fuzzy.dll」は便宜上および視認性の理由により、名前を「ssdeep.dll」に変更しています。「impfuzzy」は実行可能ファイルが使用するインポート関数のリストを、ハッシュのような短い文字列に変換したものであり、ssdeepと同じく類似性の判断などに使用可能です。「impfuzzy」はその仕様上、実行可能ファイルかつファイル全体が指定された場合のみ出力します。
この機能では、ファイル単体でのssdeep・impfuzzy表示や類似度表示を行います。これに対し、当ソフトウェアの「YARAルールでスキャン」機能では、フォルダ指定による、多数のファイルとのssdeep・impfuzzy等を用いた類似度表示に対応しており、マルウェアの比較・分類等に役立つと見られます。
- この機能で出力する「エントロピー」は、「バイナリデータの構成や状態」をデータ内容の乱雑さとして、対数ベースの式に当てはめて演算し、数値で表現したものです。用途としては、マルウェアの解析などで、特定バイナリデータの類似度を考察するといった用途が挙げられます。なお、マルウェアの解析時には、実行可能ファイルの各セクションに対してエントロピーを算出し、他のマルウェアと比較することがあります。PEファイルの各セクションのエントロピー値は、当ソフトウェア同梱のPEダンパー兼PEエディタ「UMPE」で取得可能です。また、当ソフトウェアの「バイナリデータ視覚化表示」機能では、エントロピーの値を色に変換したエントロピーマップの表示に対応しています。
●画面説明 ●ハッシュ生成対象および条件を指定(オフセットやサイズは16進)・指定範囲バイナリデータをファイルに保存 ■指定範囲バイナリデータ 解析対象ファイルの指定された範囲のバイナリデータに対して、ハッシュやssdeep等の生成を行います。オフセットは16進数で指定します。初期設定では開始オフセットがファイル先頭、終端オフセットは未入力すなわちファイル終端扱いに設定しています。終端オフセットの設定はコンボボックスにより、オフセットによる指定と、開始オフセットからの範囲サイズによる指定を選択できます。 [左指定範囲をファイルに保存]ボタンで、指定範囲のバイナリデータを別途ファイルに保存することができます。 ■入力テキスト 入力されたテキストのバイナリデータに対して、ハッシュやssdeep等の生成を行います。コンボボックスで対象となるテキストの文字コードを指定可能です。ラジオボタン[入力テキスト]が選択された状態ならば、文字を入力や変更するごとにリアルタイムでハッシュ等の生成を行います。同様に、文字コードの切り替えでも自動的にハッシュ等の生成を行います。 ■指定ファイル パスを指定されたファイル全体のバイナリデータに対して、ハッシュやssdeep等の生成を行います。ファイルのパス指定は[参照]ボタン、あるいはファイルのドラッグ・アンド・ドロップによる指定が可能です。ラジオボタン[指定ファイル]が選択された状態ならば、上記ファイル指定時に自動でハッシュ等の生成を行います。 ●対象ハッシュ選択・ハッシュ等生成実行 ■生成対象ハッシュ全選択・全解除 ハッシュやssdeepなどの生成対象を一括して選択あるいは選択を解除します。対象バイナリデータのサイズが大きければ、それだけ各ハッシュの生成に時間を要することになります。そのため、状況に応じて、リスト上のハッシュは必要なもののみに選択を変更してください。 ■上指定条件で下選択ハッシュ生成実行・対象サイズ出力 対象に指定されたバイナリデータに対して、リスト上で選択されたハッシュ等を出力します。指定・選択状況によっては生成処理に時間がかかるケースもあります。そのため、ハッシュ等生成処理が止まっているようにみえる状況でも、このボタンを連打せず、しばらく様子を見てください。 ■ハッシュ・ssdeep・エントロピー・impfuzzy(リストビュー) ハッシュ等の生成結果をリスト表示します。選択されていないハッシュ等は、処理をスキップし文字列「-----」を表示します。このリスト上でハッシュ等の項目を選択すると、その項目の生成結果である文字列をクリップボードにコピーします。impfuzzyは、対象ファイルが32ビットあるいは64ビットの実行可能ファイル(PEファイル)である場合のみ表示します。 ●ハッシュ・ssdeep比較 ■上指定ファイルとssdeep類似度算出 画面上部の[指定ファイル]ラジオボタン右側でパスを指定されたファイルと、解析対象ファイルで、ssdeepおよびimpfuzzyの比較を行います。あらかじめ解析対象ファイルの全体あるいは部分に対するssdeep等を出力しておく必要があります。比較結果はこの2つのバイナリデータの類似度として数値(0~100%)で表示します。もし[指定ファイル]ラジオボタンが選択された状態ならば、当ダイアログへ任意のファイルをドラッグ・アンド・ドロップするか、[参照]ボタンで任意のファイルを指定すると、自動的にそのファイルで各ハッシュの表示を更新しますので、ドラッグ・アンド・ドロップなどによる比較対象ファイル指定時には注意してください。 解析対象ファイルと多数のファイルとのssdeep・impfuzzy類似度算出には、当ソフトウェアの「YARAルールでスキャン」機能を使用してください。 ■クリップボード内テキストと上各ハッシュ比較 + ssdeep類似度算出 クリップボード内にある半角英数文字列と、リストに出力されたハッシュ・ssdeep・impfuzzyを比較します。クリップボード内にある文字列が、リスト上に出力済のいずれかのハッシュと完全一致あるいは同ハッシュ文字列を含んでいるならば、ハッシュ合致と判断します。文字列比較時にアルファベット大文字・小文字の区別は行いません。ハッシュが合致した場合はssdeep等の比較はスキップします。ssdeep等の比較結果は類似度として数値(0~100%)で表示します。なお、ハッシュ一覧作成時に誤作動回避を目的としてクリップボードをクリアするため、クリップボード内テキストとの比較時には注意してください。 |
YARAルールでスキャン
●YARAルールでスキャン機能の機能補足と基本注意事項- YARAとYARAルール等については、解説「YARAについて」を参照願います。この機能では、YARAのルールを用いた各種バイナリデータへのスキャンを行い、その結果を表示します。また、YARAルールで複数ファイルをスキャン時に、ssdeep・impfuzzy類似度やエントロピー差異といった、比較・分類用の付属情報を併せて表示する機能も実装しています。
- 本来この機能の実行には、Microsoftが配布している、「Visual C++ 2010 ランタイム
x86版/x64版」のインストールが必要です。これは、公開されているYARAのソースコードでは、このランタイムが別途インストールされていることを前提としているためです。しかし、当ソフトウェアのユーザーの方々からいただいた要望により、この機能が必要とするランタイムのDLL「msvcr100.dll」(再配布可能)を同梱することで、上記ランタイムのインストールを不要にしました。ただし、万一この
msvcr100.dll に脆弱性などの問題が見つかった場合、たとえWindows
Updateを適用しても、当ソフトウェアのインストールフォルダ内にある同DLLは更新されませんので、十分にご注意願います。
-
この機能は、複数の要素が原因となってスキャン処理に多大な時間を要することもあります。その要因としては、実行環境のPCスペック、対象ファイルのサイズ、対象ファイルまたはプロセスの数、対象プロセスの実行状況やメモリ使用状況、ルールの複雑さや多さなどが挙げられます。そのため、たとえスキャン実行時にフリーズに見える状況となっても、しばらくは強制終了はせずに様子を見てください。
-
スキャン対象がプロセスの場合には、当ソフトウェアは管理者権限で起動しないと全ての32ビットプロセスを列挙できません。また、32ビットプロセスとなる当ソフトウェアでは、64ビットプロセスのプロセスメモリはスキャンできません。うさみみハリケーン本体の64ビット版(UsaMimi64.exe)が64ビットプロセスのプロセスメモリのスキャンに対応しています(メニューの[検索]→[YARAルールでスキャン])ので、必要に応じて使い分けてください。なお、うさみみハリケーン本体の32ビット版(UsaMimi.exe)では、使用するコンパイラの制約により、YARAルールを用いた32ビットプロセスのプロセスメモリのスキャン機能が実装できないため、当ソフトウェアに同機能の実装を行いました。ただしその後、うさみみハリケーン本体の新型32ビット版(UsaMimi32.exe)に、YARAルールを用いた32ビットプロセスのプロセスメモリのスキャン機能を実装しましたので、こちらも使用可能です。
-
YARAの仕様により、巨大なサイズのファイルがスキャン対象の場合には、スキャン対象ファイルの読み込み(マッピング)に失敗することがあります。
-
YARAはバージョンアップ時に、YARAルールの仕様を部分的に変更することがあります。そのため、ネットで入手できるような一部のYARAルールは、記述を修正しないと当ソフトウェアでのスキャンに使用できないことがあります。当ソフトウェアで使用可能なYARAルールの例については、当ソフトウェア同梱の「yara_rule_file.txt」を参照してください。
- 当機能ではスキャン結果のXML形式での出力に対応しています。出力するXMLファイルでの「ルール名」等の指定には、どんなXMLパーサーでも問題なく対応できるように英数文字列を使用しています。YARAを用いたユーザーモードでのスキャンには、カーネルモードに対応できないといった制約があることを明示するために、各企業や組織でのサイバー攻撃に関する情報共有を行うための仕様である「MAEC」や「CybOX」および「OpenIOC」等への準拠は行わず、これらの仕様に流用は可能な、当ソフトウェア独自のスキャン結果としてXMLファイルを出力しています。ちなみに、XML形式は、構造化された情報格納すなわちツリー形式の構造になっています。
●画面説明 ●参考画像:「YARAルールでスキャン」時のssdeepやimpfuzzy等の類似度表示機能 ●参考画像:「YARAルールでスキャン」時のssdeepやimpfuzzy等の類似度表示機能(YARAルール合致表示なし) ●表示サイズ変更・最前面表示 ■縮小表示 ダイアログの縮小表示と通常表示を切り替えます。ダイアログ右下のサイズグリップをドラッグすることや最大化ボタンでも、ダイアログのサイズを変更可能です。 ■最前面表示 ダイアログの最前面表示と通常表示を切り替えます。 ●スキャン対象を指定(メインダイアログでオープンしたファイル以外を指定する場合用) ■指定ファィルをスキャン 当ソフトウェアのメインダイアログでオープンしたファイルとは別のファイルをスキャン対象に指定する場合に使用します。ファイルのパスの指定は、[参照]ボタンあるいは、ドラッグ・アンド・ドロップで指定することもできます。もしも後述[対象ファイルのあるフォルダごとスキャン]を有効にするならば、ここでフォルダのパスを指定することも可能です。[参照]ボタンやドラッグ・アンド・ドロップでファイルまたはフォルダを指定すると、自動的にチェックをいれます。[参照]ボタンの押し下げにより、実行環境によっては、隠しファイルに設定されているファイルも表示・選択可能です。 ■32Bit プロセスをスキャン 指定したプロセスのプロセスメモリ、あるいはそのプロセスが使用する全ての実行可能ファイルをスキャンする場合に指定します。単一のプロセスだけではなく、実行されている全ての32ビットプロセスをスキャン対象に指定することもできます。なお、当ソフトウェアが32ビットプロセスとなる以上、64ビットプロセスの列挙やスキャンはできません。ただし、うさみみハリケーン本体の64ビット版(UsaMimi64.exe)が64ビットプロセスのプロセスメモリのスキャンに対応しています(メニューの[検索]→[YARAルールでスキャン])。また、もし当ソフトウェアを非管理者権限で起動した場合、一部の32ビットプロセスは列挙できません。[更新]ボタン押し下げにより、32ビットプロセスのリストを最新の内容で更新します。さらにその右側のコンボボックスで、スキャン対象の詳細として、メモリエリアのタイプや属性、あるいは使用される実行可能ファイルを指定できます。32ビットプロセス一覧の選択を変更すると、自動的にチェックをいれます。 ●スキャン条件を指定 ■対象ファイルのあるフォルダごとスキャン 対象ファイルだけではなく、そのファイルが存在するフォルダ内の全てのファイルをスキャン対象に設定します。追加条件として、[サブフォルダもスキャン]でそのフォルダに含まれるサブフォルダ内のファイルもスキャンします。この指定では、サブフォルダ内のサブフォルダといった、サブフォルダがある限り深い階層までスキャンすることになりますので注意してください。また、フォルダごとスキャンする場合の追加条件として、[スキャン対象拡張子を指定]で対象ファイルを拡張子でフィルタリングすることも可能です。この場合は「DLL」といった拡張子のみをエディットボックスで指定してください。 ■合致しないルールも表示(赤色) 本来はスキャン結果として合致したルールのみ表示しますが、この指定を行うと合致しないものを含む全てのルールを表示します。合致しないルールは赤色で表示します。 ■複数のstrings合致条件を分割表示 本来、1つのルールに含まれる、複数の文字列条件が合致した場合は、その合致分を1つの列にまとめて表示します。この指定では、1つのルール内の複数の文字列条件が合致した場合に、それぞれの文字列条件に分割して表示します。 ■単一stringに対する合致表示数上限 YARAのスキャンはその用途上、1つの条件文字列に対する合致数が膨大になるケースは想定されていません。また、合致数が多ければスキャン結果の表示内容の視認性も低下します。そのため、1つの条件文字列に対して、表示する合致数の上限を定められるようにしています。 ■下の指定タグを持つルールのみ表示 表示されるスキャン結果を、各ルールに設定されたタグを使ってフィルタリングします。エディットボックスで指定するタグは大文字・小文字を区別しますので正確に入力してください。この入力時には、「Crypto Malware Network」といった複数のタグの指定が可能です。エディットボックスの右側に、既定のタグ名の入力を補助するコンボボックスを用意しています。このコンボボックスでShiftキーを押しながらタグ名を選択すると、エディットボックスに入力済みのタグ名はそのまま保持して、選択したタグ名を追記します。フィルタリング時のタグ一致の判断は、タグ名が指定フィルタリング文字列中に含まれるか否かで判断します。そのため、フィルタリングで「Test1 Test2」と指定すると、「Test」タグの場合でも表示することになりますので、必要に応じて文字列の重複のないタグを設定してください。 ■ファイルのハッシュ等併記(コンボボックス) スキャン結果を表示する際に、ファイル名にハッシュ等を併記します。ハッシュはMD5/SHA-1/SHA-256/SHA3-256、他にssdeep・impfuzzyやその類似度、エントロピーや差異、コンパイル日時などを選択できます。このハッシュ等の併記は、フォルダごとスキャンするような、複数のファイルをスキャン対象とする場合に有効となるオプションです。 ssdeep・impfuzzy類似度、エントロピー差異、コンパイル日時、開発環境言語、コード類似度およびエントリーポイント情報は、主用途として実行ファイルの比較・分類を想定しているため、YARAルールでの合致が無いファイルでも列挙して表示します。スキャンにあたり、スキャン設定の[下の指定タグを持つルールのみ表示]をチェックして、存在しないタグ「None」を指定しておけば、YARAルールのスキャン結果は表示されず、ファイル名と類似度あるいは差異などの情報だけが列挙されることになります。 ●ルールファイル操作・スキャン開始・スキャン結果操作 ■ルール定義ファイルを開く 所定のルールファイルである、当ソフトウェア同梱の「yara_rule_file.txt」をオープンします。このルールファイルを編集して上書き保存すれば、次のスキャン時に変更内容が反映されます。このルールファイルは、文字コードがWindows ANSI(Shift-JIS)固定です。そのため、テキストエディタでのこのルールファイル編集時に、別の文字コードで上書き保存しないよう注意してください。 ■スキャン開始 「yara_rule_file.txt」に記述されたYARAルールを使ってスキャンを行います。色々な要因によりスキャンには多大な時間を要することもありますので、フリーズしたように見えてもしばらくは強制終了せずに様子を見てください。また、このボタンを連打することのないようにしてください。 ■リストの全選択列をコピー スキャン結果のリスト上で選択された全ての列の内容をクリップボードにコピーします。リスト上の複数列選択には、ShiftキーあるいはCtrlキーを押しながらのクリックが使用できます。 ■XML出力 スキャン結果であるリストの全ての列を、XML形式のテキストファイルとして出力します。出力ファイル名指定時には、その時点の時刻情報をファイル名にしたものをファイル名候補として表示します。出力されるテキストファイルの文字コードはUTF-8です。XML形式での各項目名は、当ソフトウェア独自のものです。 ●スキャン結果 ■スキャン結果(リストビュー) スキャン結果を表示します。フォルダ指定時など、複数のファイルをスキャン対象にした場合は、緑色の列でファイル情報(ファイルパス・ファイル名・ハッシュなど)を併記します。また、プロセスをスキャン対象とした場合は、オレンジ色の列でプロセス情報(PID・メモリエリアのアドレスやサイズとアクセス属性・モジュール名など)を併記します。 リスト上で条件合致のオフセットが出力された列をクリックすれば、もしバイナリエディタが表示されているならば表示オフセットの変更を行います。ただし、バイナリエディタの表示はあくまでメインダイアログでの指定ファイルのバイナリデータですので、別のファイルのバイナリデータと混同しないでください。メインダイアログでの指定ファイルの類似ファイルをスキャンすることもありうるため、同指定ファイル以外のファイルのオフセットでも、バイナリエディタでの表示オフセットを変更するようにしています。また、リスト上でクリックされた際には、カーソル直下にあるカラムの内容をクリップボードにコピーします。 |
各画面の説明(ステガノグラフィー解析)
●ステガノグラフィー解析機能の機能補足と基本注意事項- ステガノグラフィーおよびCTFについての解説は、「ステガノグラフィーの解析について」を参照願います。
- 当機能は、CTFにおけるステガノグラフィーの解析が、プログラム解析初心者の方にとって解析スキル向上に有用との判断から実装しました。実装に当たっては、画像のステガノグラフィー解析用ツール「Stegsolve」を参考にしています。さらに、近年のCTFにみられる、Stegsolveでは対応できない問題にも対処できるよう、ビット抽出機能などの色々な拡張やTIFF画像対応なども行いました。また、当機能では、ステガノグラフィーの解析だけではなく、画像ファイルへの各種バイナリデータの埋め込み機能も実装しています。なお、当機能にはImageMagickやlibpngのプログラムコードは使用していません。
-
当ソフトウェアには、「バイナリエディタ」、「文字コード別の文字列抽出」、「バイナリデータの視覚化表示」、「ファイル・データ抽出」および「YARAルールでスキャン」といった機能が実装されており、これらの機能を活用すれば、状況によってはステガノグラフィーの解析を行うよりも大幅に少ない工数でフラグ文字列にたどり着くこともあります。
たとえば、「バイナリデータの視覚化表示」機能ならば、ヘッダの存在しない色情報データだけで構成されるバイナリファイルが問題として与えられても、簡単に16/24/32ビット画像として表示しフラグを得ることが可能です。この際、変換先画像の縦横のサイズは不明でも、「バイナリデータの視覚化表示」機能では折り返し幅(横幅)をリアルタイムで自由に変更できるため、適切な横幅のサイズが解析しやすいといえます(バイナリファイルのサイズを素因数分解で縦横サイズが簡単に取得できるケースもある)。
- 当機能でのステガノグラフィーの解析時に、特にプログラム解析初心者の方は、ただ当機能を使うだけではなく、ビットやバイトへの処理の結果として「なぜこのようになるのか」を意識して解析にあたることをお勧めします。
- 当機能でのステガノグラフィー解析はあくまで汎用的なものです。各種データの埋め込み用ツールを使用したり、オリジナルの手法を用いられたならば対処は困難です。たいていのデータの埋め込み用ツールでは、埋め込むデータに独自の暗号化を施したり、データ埋め込み処理に独自のアルゴリズムを使います。CTFではヒント無しでデータ埋め込み用ツール「Steghide」が使用されたケースも散見されます。各データ埋め込み用ツールの入手先については、解説「ステガノグラフィーの解析について」の「データ埋め込み用ツール リンク集」欄を参照してください。
●画面説明(画像解析) ■最前面 このダイアログの最前面表示とその解除を切り替えます。 ●解析対象画像と表示モード候補指定 ■(エディットボックス) ダイアログ左上部にあるエディットボックスで、解析対象画像ファイルを指定します。当ダイアログにファイルをドラッグ・アンド・ドロップすれば、そのパスがエディットボックスに入力されます。これにより、メインダイアログでオープンしたファイルとは別のファイルを指定して解析することが可能になります。 ■前候補・次候補 ステガノグラフィーで隠蔽されたデータを表示するための表示モードを切り替えます。同ボタン右側のコンボボックスで、表示モードを選択して切り替えることもできます。コンボボックス右側にある「FF:FF:FF」と入力されているエディットボックスには、特定の色情報をRGBの順番で入力してから、表示モードの「右指定色(R:G:B)ピクセルを強調」を指定すると、指定色のピクセルだけを表示します。なお、画像上でCtrlキーを押すとカーソル直下の色を取得して同色のピクセルだけを表示し、Shiftキーを押すと通常表示に切り替えます。また、Altキーを押しながら表示モードを変更すると、32ビット画像ではアルファチャンネル(透過情報)を無効化します。ほとんどの表示モードは24/32ビット画像を想定した処理を行うため、8ビット画像など24ビット未満の画像ならば、一部の表示モードを除き24ビット化(RGB化)して表示します。また、画像表示時の描画ベースは黒色にしており、画像の透過色設定によっては正常に表示できないこともあります(解析は可能)。 ■参照・表示 解析対象画像ファイルを指定します。パスをエディットボックスに手動で入力した場合は、Altキーを押しながらこのボタンを押し下げれば、パスを指定した画像ファイルを表示します。 ■ビット抽出 ビット抽出用ダイアログを表示します。ビット抽出用ダイアログでは、画像のフォーマット解析結果の表示も行います。 ■フレーム表示 マルチフレームGIF/TIFF画像用のフレーム表示用ダイアログを表示します。 ■拡大・縮小 指定画像を拡大あるいは縮小して表示し、ダイアログ内に画像全体が表示されるようにします。 ■画像合成 画像合成用ダイアログを表示します。 ■画像保存 現在表示している画像を保存します。保存される画像の縦横サイズは、ダイアログ内に全体が表示されていないか拡大縮小表示中であってもオリジナルのサイズとなります。保存ファイル名の拡張子の指定により、画像形式を変更して保存することも可能ですが、BMP形式とPNG形式の相互変換以外では、ステガノグラフィーにより隠蔽されたデータが破損するケースもあります。 ■(擬似スクロールバー) ダイアログ右上にある2つのアップダウンコントロールで、スクロールバーのような動作を行います。また、ダイアログ右上のボタンには、横方向と縦方向のスクロール可能回数つまり、実画像サイズが現在のダイアログ内表示サイズの何倍になっているかを表示します。同ボタン上のカッコ内は現在のスクロール位置を示します。このボタンを押せば、スクロール位置を原点(画像左上)に戻します。この擬似スクロールバーとスクロール補助ボタンは、実画像サイズが現在のダイアログ内表示サイズよりも大きく、表示されていない部分がある場合にのみ有効です。ダイアログ内で画像全体が表示されていたり、拡大縮小表示中は無効になります。 ■(画像上で左ドラッグによる範囲選択) 画像上で左ドラッグにより範囲選択を行うと、その選択範囲内を画像としてクリップボードにコピーします。 ●画面説明(フォーマット解析) ●フォーマット解析 ■画像フォーマット解析結果表示(エディットボックス) 当ダイアログの表示時には、まず指定画像のフォーマット解析結果をエディットボックスに表示します。このフォーマット解析は、CTFにおけるフラグそのもの、あるいはヒントを得ることを目的としており、画像フォーマットの仕様全体の情報ではなく、特に必要と見られる情報のみ出力します。 もし、画像データの後にZIPファイルなどの各種圧縮ファイルや、各種画像ファイルあるいはPCAPファイルが結合されているならば、フォーマット解析情報に併せて、その結合されたファイルの情報も表示します。また、画像データの後に未知のバイナリデータが見つかったならば、そのバイナリデータと対応ASCII文字列を表示します。 ●画面説明(ビット抽出) ●ビット抽出 ■テキストのみ表示 [バイナリデータ表示]ボタンでビット抽出結果を表示する際に、バイナリデータの16進文字列表示を省略し、バイナリデータに対応する文字列のみ表示します。 ■文字コード(コンボボックス) [バイナリデータ表示]ボタンでビット抽出結果を表示する際に、バイナリデータに対応するテキストを表示するための文字コードを指定します。初期設定の「ASCII」では日本語文字列を表示できないことに注意してください。 ■バイナリデータ表示 ビット抽出結果を表示します。事前に抽出対象ビットやバイト列構築の設定をしておく必要があります。基本的に、ビット操作は24/32ビット画像を想定した処理を行うため、8ビット画像など24ビット未満の画像ならば24ビット化(RGB化)して処理します。 ■バイナリデータ保存 [バイナリデータ表示]ボタンによりビット抽出結果として表示されたバイナリデータをファイルに保存します。 ■抽出対象ビット(チェックボックス) 赤色・緑色・青色・アルファチャンネルから抽出するビットを指定します。32ビット画像の場合のみアルファチャンネルのビット指定が可能になります。このビットの指定が適切でないと、抽出したビットから正しいバイト列を構築することができません。各色の全8ビットを指定すると、その色の色情報そのものであるバイトを抽出することになります。 ■対象ビットをMSBからLSBへ逆順で抽出 たとえば赤色のビット0とビット1が抽出対象に指定されていて、このオプションが有効ならば、まずビット1、次にビット0の順で抽出します。この順序が適切でないと、抽出したビットから正しいバイト列を構築することができません。 ■ピクセルを縦方向に読み込む 初期設定では、ビットを抽出する際のピクセルを読み込む順序は、左上端から右方向へ読んでいき、右端まで読んだらピクセルを下に一つずらして左端からまた右に読んでいきます。一方、このオプションが有効ならば、ビットを抽出する際のピクセルを読み込む順序は、左上端から下方向へ読んでいき、下端まで読んだらピクセルを右に一つずらして上端からまた下に読んでいきます。この順序が適切でないと、抽出したビットから正しいバイト列を構築することができません。 ■抽出ビットをバイトのLSBから充填 初期設定では、抽出したビットからバイト列を構築する際に、抽出したビットをバイトのMSBから8ビット充填していきます。このオプションが有効ならば、逆にLSBから8ビット充填していきます。この順序が適切でないと、抽出したビットから正しいバイト列を構築することができません。 ■色情報の取得順序(ラジオボタン) 抽出対象ビットがRGBのうち2色以上からなる場合に、どの色のビットから抽出するか順序を指定します。抽出対象ビットが赤色のビットのみといった1色分だけの場合は、このオプションは意味を持ちません。この順序が適切でないと、抽出したビットから正しいバイト列を構築することができません。 ■ビット抽出前バイト列 ビットを抽出する前の、色情報が格納されたバイト列そのものを表示あるいはファイルに保存します。CTFにおいては、この色情報のバイト列をそっくりそのまま文字列やアーカイブファイル等のバイナリデータに置き換えるケースがあります。この表示処理は、全ての抽出対象ビットを選択してからバイナリデータを表示する処理と同じです。この処理は24/32ビット画像を想定しているため、8ビット画像など24ビット未満の画像ならば24ビット化(RGB化)して処理します。 ●バイナリデータ埋め込み ■バイナリデータ埋め込み(エディットボックス) 文字列あるいはファイルパスを指定します。文字列指定時には上設定の文字コードが適用されます。 ■左でファイルパスを指定 エディットボックスでファイルパスを指定したならば、このチェックボックスをチェックします。当ダイアログへのファイルのドラッグ・アンド・ドロップでもファイルパスを指定することができます。 ■複製画像を保存 エディットボックスで指定された文字列あるいはファイルのバイナリデータを、文字コードやビット抽出およびバイト列構築の設定を使って、ビット単位に分解した上で複製画像に埋め込みます。ピクセルの色情報の保持が必要なため、複製画像の保存形式はBMPあるいはPNGとなります。元画像が24ビット未満ならば自動的に24ビット化(RGB化)して処理します。指定可能な全てのビットを指定すると、色情報のバイト列そのものを、指定したバイナリデータで置き換えることになります。 ●画面説明(画像合成) ●画像合成 ■合成用画像(エディットボックス) エディットボックスに合成対象画像ファイルのパスを指定します。当ダイアログに画像ファイルをドラッグ・アンド・ドロップすれば、合成用画像1に指定されます。また、合成用画像2のエディットボックス内に画像ファイルをドラッグ・アンド・ドロップすれば、そのファイルが合成用画像2に指定されます。 合成対象画像の色情報のビット数が24ビット未満ならば、RGB色情報を用いた演算処理に支障が生じます。そこで、画像の色情報のビット数が1, 4, 8, 16といった24未満ならば、自動的に画像を24ビット化して表示します。これにより、合成対象画像の片方あるいは両方で色情報のビット数が24ビット未満に変更されているケースにも対処可能です。なお、片方の画像だけ色情報のビット数が操作されているケースでは、たいてい、2枚の画像に明らかなファイルサイズの違いが見られます。 ■参照 合成対象画像ファイルのパスを指定します。 ■前候補 合成方法を前の候補に変更して合成結果を表示します。 ■次候補 合成方法を次の候補に変更して合成結果を表示します。 ■合成方法(コンボボックス) 合成方法を選択して合成結果を表示します。合成結果として視認可能なフラグ(文字列や2進ビットパターンおよびモールス符号など)が得られない場合は、合成結果である画像ファイルのRGB色情報の値が、文字コードASCIIの表示可能文字(0x20から0x7E)を指している可能性を考慮してください。 ■拡大・縮小 合成結果画像を拡大あるいは縮小して表示し、ダイアログ内に画像全体が表示されるようにします。 ■画像表示 エディットボックスに合成対象画像ファイルのパスを手入力した場合は、このボタンで合成結果を表示します。パス入力後に合成方法を再指定した場合も同様の処理を行います。 ■画像保存 表示している合成結果を画像として保存します。保存される画像の縦横サイズは、ダイアログ内に全体が表示されていないか拡大縮小表示中であってもオリジナルのサイズとなります。 ■(画像上で左ドラッグによる範囲選択) 画像上で左ドラッグにより範囲選択を行うと、その選択範囲内を画像としてクリップボードにコピーします。 ●画面説明(フレーム表示) ●フレーム表示 この機能は、マルチフレームであるGIF画像あるいはTIFF画像専用です。このフレーム表示機能はWindows OSの機能を使用するため、Windows XPといった古いOSでは、TIFF画像のフレームが表示できません(GIF画像のフレーム表示は可能)。 ■< >(ボタン) ダイアログ左上の2つのボタンで、次のフレームや前のフレームを表示します。このボタンを押し続ければ、マルチフレームのコマ送りが可能です。 ■現在表示フレーム番号と全フレーム数(エディットボックス) 現在表示しているフレームの番号と全フレーム数を「表示フレーム番号/全フレーム数」の形式で表示します。 ■表示フレーム指定(エディットボックス) 表示させたいフレームの番号を指定します。 ■左指定フレーム表示 左側エディットボックスで指定したフレームを表示します。 ■拡大・縮小 フレームを拡大あるいは縮小して表示し、ダイアログ内に画像全体が表示されるようにします。 ■現フレーム保存 現在表示しているフレームを画像ファイルとして元画像があるフォルダにPNG形式で保存します。この処理は手作業による手間を省くため自動で行います。保存される画像の縦横サイズは、ダイアログ内に全体が表示されていないか拡大縮小表示中であってもオリジナルのサイズとなります。 ■全フレーム抽出保存 全てのフレームを一括して抽出し、元画像があるフォルダに連番PNG形式で保存します。この処理は手作業による手間を省くため一括・自動で行います。保存される画像の縦横サイズは、ダイアログ内に全体が表示されていないか拡大縮小表示中であってもオリジナルのサイズとなります。ShiftキーかCtrlキーを押しながらこのボタン押し下げにより、GIFファイルの全フレームの表示遅延時間(100分の1秒単位)をリスト化し、テキストファイルとして保存します。このリスト保存先は元画像があるフォルダです。Shiftキーならば表示遅延時間を10進数で出力し、Ctrlキーならば16進数で出力します。 ■(画像上で左ドラッグによる範囲選択) 画像上で左ドラッグにより範囲選択を行うと、その選択範囲内を画像としてクリップボードにコピーします。 |
ファイル・データ抽出
●ファイル・データ抽出機能の機能補足と基本注意事項-
この機能では、指定ファイルに内包される各種ファイルやデータを、「Magic」あるいは「マジックナンバー」や「マジックバイト」と呼ばれる特有のバイト列を基に検索します。さらに、その検索結果を基にして内包ファイル・データの抽出を行います。
-
この機能のダイアログは、右下最下部にあるサイズグリップをドラッグすることでサイズを変更できます。サイズ変更時には、検索結果リストのサイズを拡大してより多くの情報を表示できるようにします。
-
この機能は、あくまで連続した領域にバイナリデータが存在する、各種ファイル等の検出および抽出を行うものです。デジタル・フォレンジックの技術解説で述べられるような、NTFSやFATなどのファイルシステムを基に解析し、元ファイル内の分散した抽出対象ファイル部分を集約・結合して抽出対象ファイルを復元するようなことはできません。また、抽出対象ファイルのデータ格納状況として、圧縮や暗号化あるいはファイル分割などがある場合は、検索結果から抽出・保存したファイルが、ファイル形式上「壊れた」状態になります。
-
検索中に既知のファイル形式が見つかった場合は、そのファイルサイズを算出し、そのファイル終端以降から検索を続行することで、検索所要時間の短縮を図ります。この際、そのファイル中に含まれるファイル・データの検索はスキップされることになります。そのため、ファイル中に含まれるファイルやデータを再帰的に検索する、[算出サイズを無視して1バイト毎に検索]オプションも用意しています。このオプションが有効ならば、ファイルサイズ算出によるファイル正当性チェックをスキップするため、ファイルヘッダさえあればそれ以降のデータが欠けていても検索にヒットします。
-
検索の仕様上、判別用バイト列が短い場合には、誤検出も増えることになります。また、検索結果からファイルとして保存する際には、保存先ドライブに十分な空き容量があるか注意してください。抽出時に1ファイルとして保存できる最大サイズは4GBです。
-
使用PCのスペックあるいは、検索範囲サイズが大きいといった原因により、内包ファイル・データの検索に時間がかかることもあります。もし、検索中にフリーズに見える状況となっても、しばらくは強制終了はせずに様子を見てください。
-
検索中に見つかった既知のファイル形式では、必要に応じて簡単なファイル情報を取得して表示します。ただし、当ソフトウェアは、ファイルアナライザの「TrID」や「Detect
It Easy」の互換機能があるため、当機能では詳細なファイル情報は取得しません。
-
指定ファイルに含まれる、任意の文字列やバイナリデータを検索したい場合は、当ソフトウェアが実装しているバイナリエディタあるいは「YARAルールでスキャン」機能を使用してください。「YARAルールでスキャン」機能ならば、検索に「正規表現」を用いることも可能です。また、含まれる文字列の抽出ならば、「文字コード別文字列抽出」機能が役立つと見られます。
-
当ソフトウェアが実装しているバイナリエディタを併用することで、検出されたファイルのヘッダや終端の情報を基に、ファイル該当部分を目視で正確に選択し保存する、手動での抽出アプローチも可能です。
-
zlib形式で圧縮されたデータは、膨大な誤検出を回避するために、一般的な圧縮パターンのもののみ検索します。さらに、ファイル保存時にzlib展開を試行し、展開に成功したデータだけを保存します。PNGファイル内の複数に分割されたIDATチャンクは、「TweakPNG」でIDATチャンクを1つに結合することで、IDATチャンクの適切なzlib展開が可能になります。なお、PNGファイル内のIDATチャンクを展開して得られる画像の色情報データでは、フィルター情報のバイトが付加され、さらに色情報の値にフィルターがかかっているケースもあることに注意してください。当ソフトウェアの「ステガノグラフィー解析」機能では、「ビット抽出」ダイアログで、読み込んだ各種画像ファイルのピクセルの正しい色情報だけを、RGB/BGR順といった条件を指定してバイナリファイルとして表示や保存することができます(ビット抽出前バイト列の保存)。ちなみに、zlib形式で圧縮されたデータの、多様な圧縮パターンを網羅した抽出と展開は、Windows用ではバイナリエディタ「Bz」の正規改造版が対応しています。
-
ZIPファイルの抽出では、保存時に本来のファイル終端以降に余分なバイナリデータが付加されることから、圧縮・解凍ソフトによってはZIPファイルが壊れていると判断することもあります。この場合は、余分なバイナリデータが付加されたZIPファイルを適切に解凍できる、「7-Zip」などの圧縮・解凍ソフトを使用します。あるいは、圧縮・解凍ソフトのZIPファイル修復機能で対処することもできます。また、当ソフトウェアは「ファイルサイズ変更・結合」機能を実装していますので、必要に応じて保存したファイルのファイルサイズ修正を行うことも可能です。
-
検索で見つかった各種圧縮ファイルと各種ディスクイメージや、ファームウェアなどに使われる圧縮ファイルシステム(SquashFS等)および圧縮データ(LZMA等)は、ファイル保存後に「7-Zip」あるいは「Explzh」などの圧縮・解凍ソフトで確実に展開可能と見られるため、当機能では展開処理の実装を見送りました。なお、ファームウェアの解析に当機能を使用する場合は、解説「ファームウェア解析への『うさみみハリケーン』活用について」を参照願います。
- 当機能で抽出したファイルやデータの、譲渡や配布あるいは販売などによる、著作権等の侵害にあたる行為は行わないでください。当機能は、著作権等の侵害を目的としない、抽出したファイルやデータの私的利用や、公益を目的とする情報セキュリティ関連の解析行為を想定して実装しました。
-
英語の各種解析ツールにおける、内包ファイル・データの抽出処理は、「RIP」(引き裂く、裂き取る)、「EXTRACT」(抜き取る、抽出する)、「CARVE」(切り分ける、刻んで造る)といった単語で表現されます。デジタル・フォレンジック分野では基本的に「CARVE」を用います。
-
ちなみに日本では、PCゲームのCG抽出等を目的とした、内包ファイルの抽出ツールが1990年代後半から複数公開されており、「指定ファイルから画像等の各種データ抽出機能」を実装する「スペシャルねこまんま57号」も抽出ツールの一つに挙げられます。このような抽出ツールの一部は、流用に制限のないソースコードが付属しており、PCゲーム解析ツールを製作する上で有用とされていました。
●画面説明(右下最下部のサイズグリップを使ってダイアログを拡大しています) ●最前面表示 ■最前面 ダイアログの最前面表示と通常表示を切り替えます。 ●検索対象ファイル指定 ■検索対象ファイル指定(エディットボックス) 検索対象ファイルのパスを指定します。このダイアログへファイルをドラッグ・アンド・ドロップすれば、メインダイアログで指定したファイルとは別のファイルを指定可能です。 ■参照 メインダイアログで指定したファイルとは別のファイルを選択し、そのパスを指定します。 ●検索開始オフセット・検索範囲サイズ指定 ■検索開始オフセット 指定ファイル内の各種ファイル・データ検索を行う、開始オフセットを指定します。指定は16進数で、4GB超のオフセットにも対応しています。その右側にあるコンボボックスで、開始オフセットの指定を簡易化することもできます。また、[左オフセットでダンプ表示]ボタンで、指定オフセット以降のバイナリデータを下部エディットボックスに表示します。 ■検索範囲サイズ 検索開始オフセットからの検索範囲を指定します。指定は16進数で行います。その右側にあるコンボボックスで、検索範囲サイズの指定を簡易化することもできます。検索時には、この検索範囲サイズ分のバイナリデータを物理メモリに読み込むため、指定する検索範囲サイズは、必ず空き物理メモリサイズ以下にしてください。 ●内包ファイル・データ検索 ■検索実行 指定された検索開始オフセット以降の検索範囲サイズ内で、各種ファイル・データ検索を実行します。検索結果リストへの出力は10万件が上限です。 ■算出サイズを無視して1バイト毎に検索 検索中に既知のファイル形式が見つかった場合は、そのファイルサイズを算出し、そのファイル終端以降から検索を続行することで、検索所要時間の短縮を図ります。このオプションを有効にすれば、算出されたファイルサイズ分の検索スキップを行わず、見つかったファイル中に含まれるファイルやデータを再帰的に検索します。また、このオプションが有効ならば、ファイルサイズ算出によるファイル正当性チェックをスキップするため、ファイルヘッダさえあればそれ以降のデータが欠けていても検索にヒットします。 ■検索除外対象を指定(リストビュー) 一部のファイル・データ形式は多くの誤検出を生じかねないため、標準では検索除外対象に指定しています。必要に応じてチェックを外し、検索対象に含めてください。 ●ファイル・データ抽出 ■リスト選択項目を保存 検索結果リストで選択された項目をファイルに保存します。ファイル名にはオフセットの値と推定拡張子を用い、元ファイルと同じフォルダに一括出力します。選択項目中のzlib圧縮データは展開を試行し、展開に成功したらその展開後のデータを保存します。元ファイルがあるドライブの空き容量に注意してください。保存されるファイルのサイズは、下記の、算出されたサイズあるいは指定された仮定サイズとなります。これらのサイズとは異なる任意のサイズで保存する場合は、当ソフトウェアが実装しているバイナリエディタ上で任意サイズ分のバイナリデータを選択し保存してください。また、仮定サイズで保存後に、当ソフトウェアの「ファイルサイズ変更・結合」機能でサイズの修正を行うことも可能です。 ■算出サイズを下選択で修正 検索中に既知のファイル形式が見つかった場合は、そのファイルサイズを自動で算出し、保存もそのサイズで行います。もし算出サイズが不正な場合には、このオプションを有効にして保存サイズを修正します。 ■サイズ不明分の仮定サイズ 検索中に見つかったファイルの、ファイルサイズが算出できなかった場合は、このコンボボックスでファイルサイズを仮定し、その仮定のサイズで保存を行います。仮定サイズが不十分であれば、保存したファイルが「壊れた」状態になってしまうため、必要十分なサイズを指定してください。指定した仮定サイズが、選択オフセットから元ファイルの終端までのサイズを超えた場合は、元ファイルの終端までのバイナリデータを保存します。 ●リスト文字列コピー ■リスト選択項目文字列をコピー 検索結果リストの選択項目の文字列をクリップボードにコピーします。 ■リスト全項目選択/選択解除 検索結果リストの全項目選択と選択解除を切り替えます。 ●検索結果リスト ■検索結果リスト(リストビュー) 検索結果リストを表示します。リスト上部「オフセット」や「形式名」、「推定拡張子」などのカラムをクリックすれば、そのカラムの内容で並び替え(ソート)を行います。同じカラムを連続でクリックすれば、昇順と降順の切り替えを行います。ShiftキーあるいはCtrlキーを押しながらクリックで項目の複数選択が可能です。もしメインダイアログで指定したファイルが検索対象で、かつ当ソフトウェアのバイナリエディタが表示されているならば、項目選択時に、選択項目のオフセットでバイナリエディタでの表示オフセットを変更します。ダイアログ右下最下部にあるサイズグリップをドラッグすることで、この検索結果リストのサイズを拡大して、より多くの情報を表示できるようにすることが可能です。 ●ダンプ表示・画像プレビュー ■ダンプ表示(エディットボックス) 検索結果リストで項目を選択すると、そのオフセット以降のバイナリデータをダンプ表示します。バイナリデータに対応するASCII文字列も表示します。 ■画像プレビュー(ピクチャーボックス) 検索結果リストで項目を選択した際に、その項目がBMP・JPEG・PNG・GIFファイルならば、画像のプレビューを表示します。 |