バイナリファイル比較ツール「NekoBinDiff」
概要と注意事項
■概要この当ソフトウェア『うさみみハリケーン』補助ツール(同梱NekoBinDiff.exe)は、バイナリファイルの比較を行うツールです。2つのバイナリファイルを比較して差分解析を行い、変更・挿入・削除されたバイト(列)を表示します。
「NekoBinDiff」の動作環境は、.NET Framework 4.7.2 以上が(プレ)インストールされた64ビット環境です。Windows 10 バージョン1803以降ならば、.NET Framework 4.7.2 以上がプレインストールされています。
このソフトウェアは、オープンソースのフリーウェア「BinDiff」のソースコードをベースにして、機能追加を行ったものです。なお、ネット上で「BinDiff」という名称のソフトウェアが複数公開されていることから、ネット上で他の「BinDiff」を検索したい方々のノイズとならないよう、名称を変更しました。
■派生元ライセンス情報
ソフトウェア名: BinDiff
著作権者: Manfred Bittersam
ライセンス: The Code Project Open License(CPOL)
派生元からの変更時期および変更内容: 2024年6月以降、差分解析結果のテキスト表示機能の追加等
参考リンク:BinDiff のソースコードおよび実行ファイル
■注意事項
このソフトウェアは、比較する2つのファイルの全体を自身のプロセスメモリ上に読み込みます。そのため、安全に比較可能なファイルのサイズは、800MB程度(環境依存あり)が上限となります。
バイナリファイル内での、差分探索を行う範囲を大きくすると、差分解析の精度は向上しますが、差分解析に要する時間が大幅に増加します。
差分解析結果の表示は、ヘキサエディタの表示と親和性を持たせるため、変更・挿入・削除されたバイトだけではなく、その周辺のバイトを合わせてなるべく16バイト単位で表示しています。
基本操作
基本操作は、比較する2つのファイルのパスを指定し、「差分解析開始」ボタン押し下げです。 比較する2つのファイルのパスは、「参照」ボタンあるいは、パス入力欄へのファイルのドラッグ・アンド・ドロップで指定することができます。また、当ソフトウェア起動時のコマンドラインオプションでも指定可能です。差分保存先ファイルは、パスが指定されない場合は自動的にファイル名「NekoBinDiffOutput.txt」を指定します。同ファイルのフォルダには、「うさみみハリケーン」のインストールフォルダが指定されます。
差分解析結果が表示されたら、オフセットを16進数で指定して「上オフセット」ボタンで指定オフセット以降を表示したり、「次の挿入箇所」あるいは「次の削除箇所」ボタンで次の挿入・削除箇所に表示を変更することができます。なお、Shiftキーを押しながら「次の挿入箇所」あるいは「次の削除箇所」ボタンで、前の挿入・削除箇所に表示を変更可能です。
当ソフトウェアは、「うさみみハリケーン」同梱のヘキサエディタ「へきさにゃん」との併用を想定しています。同様に、同梱の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」との併用が役立つケースもあると考えられます。また、対象ファイルのメタデータといった詳細情報は、同梱の簡易エクスプローラー「Portable Explorer」で「拡張プロパティ」として取得可能です。「Portable Explorer」にはフォルダ比較機能も実装しています。
「へきさにゃんで開く」ボタンで、指定したファイルをへきさにゃんで開きます。ファイル1をへきさにゃんで開いている状態で、ファイル2をへきさにゃんで開くと、へきさにゃん側で2つのファイルを同時に開くことが可能です。この場合、へきさにゃん上でShift+F4キーにより、2つのファイルを上下に並べて表示することができます。また、Shiftキーを押しながらファイル2用の「へきさにゃんで開く」ボタンで、ファイル1とファイル2の両方をへきさにゃんで同時に開きます。
「差分探索範囲」で指定するサイズは、大きくすれば差分解析の精度が上がりますが、差分解析の所要時間は大幅に増加します。そのため、最初はコンボボックスから小さいサイズを指定して差分解析を試されることをお勧めします。
当ソフトウェアの終了時に各種設定を保存します。保存先は「うさみみハリケーン」のインストールフォルダです。
差分解析結果の活用について
当ソフトウェアによる差分解析結果は、汎用性のあるテキスト形式で出力されるため、その結果を流用して、バイナリファイル書き換えを行うためのスクリプトを作成することも可能です。ただし、このようなスクリプトは一般的にバイト(列)の挿入や削除には対応しておらず、同一オフセットでの変更結果を、バイナリファイル書き換え用スクリプトに変換して書き換えの自動化を実現させることになります。日本では「改造コード」とも呼ばれる、スクリプトを用いたバイナリファイルの書き換えは、「うさみみハリケーン」の姉妹ソフトである、「スペシャルねこまんま57号」が対応しています(メニュー「ファイル」→「簡易バイナリファイル書き換え」)。このバイナリファイル書き換え機能は、オフセットとバイナリデータを指定する「改造コード型」とは別に、差分を指定して書き換えを行う「差分書き換え型」の書式にも対応しています。さらに、変更前と変更後の2つのファイルを指定して、「差分書き換え型」のスクリプトを出力可能です。これらの書式に用いられる英数字や記号は必ず半角で記述してください。なお、『スペシャルねこまんま57号』はDEPの適用対象に設定すると起動できません。また、「スペシャルねこまんま57号」は2003年に最終リリースを行い、すでに開発とサポートは終了しています。
当ソフトウェアには、『スペシャルねこまんま57号』をその非対応OS、つまりWindows Vista以降で使用するための補助ツール「Neko57Helper.exe」を同梱していますので、この補助ツールの併用をお勧めします。
「スペシャルねこまんま57号」のバイナリファイル書き換え用改造コードの解説(ヘルプから転載)
●コード書式一覧 1.改造コード型 <注意事項> 複数コード実行時は、各コードを改行で区切ってください 複数コード中の改行のみの行は無視します 連続書き換え型コードでは、指定範囲サイズが書き換え内容として指定したバイナリデータのバイト数の倍数でない場合、指定範囲内で安全と考えられる上限まで書き替えます(範囲指定ミスの可能性があるため) 書き換え内容に指定するバイナリデータのサイズは1024バイトが上限です バイナリデータは必ず1バイトを半角英数2文字で指定してください(1→01等) コード中に余計なスペースがあるとエラーになります <書式> 010000-E703 →オフセット010000から2バイトを「E703」で書き替えます 0100>01FF-E703E7030001007EFFFFF80000000000 →オフセット0100から01FFを指定バイナリデータ「E703E7030001007EFFFFF80000000000」で埋めます 10$ねこまんま →オフセット10以降に文字列「ねこまんま」対応バイナリデータを書き込みます 0200>02FFxAA →オフセット0200から02FFを、1バイト毎に値AAhでXORして書き換えます 0200>02FFX12345678 →オフセット0200から02FFを、4バイト毎に値12345678hでXORして書き換えます ;コメント →セミコロン以降改行までをコメントと判断し無視します <使用例> ;環境フラグセット 0080-010300FFFF ;CG・回想モードフラグALLON 0100>01C7-01 01D0>01DF-FF 2.差分書き換え型 <注意事項> 複数コード実行時は、各コードを改行で区切ってください 複数コード中の改行のみの行は無視します 「FILENAME」での指定は無視します(書き換え対象ファイルを当ソフト実行ファイルと同じフォルダに配置させる必要が生じるため)。 オフセットは必ず8桁で指定してください コード中のコロンやスペースの位置は、以下の書式と厳密に比較します コード中に余計なスペースがあるとエラーになります <書式>以下では分かりやすいようにスペースをアンダーバーで表示しました 00002054:_74_EB →オフセット2054のバイナリデータが「74」ならば「EB」に書き換えます *コメント →アスタリスク以降改行までをコメントと判断し無視します <使用例> *Ver7.4用 FILENAME_Target.exe 00002054:_74_EB 000051AC:_55_C3 |
開発補記
当初はバイナリファイルの差分解析機能を「へきさにゃん」に組み込もうと考えたのですが、ヘキサエディタのユーザーインターフェイスに差分解析結果表示を組み合わせることは、視認性の低下を招くと判断し、別途ツール化しました。次の時代の定番となるであろう、新しい日本語ベースのヘキサエディタを開発される方にとって、「へきさにゃん」および「NekoBinDiff」が少しでも参考になれば幸いです。