AnalyzeBin
概要
AnalyzeBinは、バイナリデータを、C言語のデータ型を使って解析し、データグリッドでの表示と編集が行えるバイナリエディタです。
Windowsの内部解析を行っている時に、C言語のデータ型を使い、可視化出来るツールがあればいいなと思い、作成しました。そのプログラムに、バイナリエディタ機能を追加したものが本プログラムです。現状のバイナリエディタ部分は、エディタとしては機能が不足していますが、データ構造の理解・編集に使えると考え、 公開しました。
特徴
- C言語のデータ型を解析し、バイナリデータをデータグリッドに表示し、編集が行えます。
- 配列データは、データグリッドで、指定したインデックスのデータの参照、更新が行えます。
- バイナリデータが無い状態で、データ型を解析させ、指定項目のデータを作成することができます。
- 解析するデータ型は、JMP命令により任意のアドレスから、マッピングさせることができます。
- バイナリファイルのロード時、ファイル読み込み開始位置を指定することができます。(利用例:PEファイルフォーマットのセクションデータのPointerToRawData)
- バイナリファイルのロード時、マッピングさせる表示開始位置を指定することができます。(利用例:PEファイルフォーマットのセクションデータのVirtualAddress)
動作環境
- OS:Windows 10, 11
※.NET 6.0以降が必要です。搭載されていない場合、インストール画面が表示されます。
使用条件
フリーソフトウェアです。無料でご利用頂けます。
本ソフトウェアの使用はすべて自己責任で行ってください。使用した結果生じた損害、不利益については、作者は一切責任を負いません。
ダウンロード
AnalyzeBin.zip(64bit) Version 1.0.7.2
AnalyzeBin32.zip(32bit) Version 1.0.7.2
※解凍後、exeファイル実行時に、「WindowsによってPCが保護されました」のメッセージが表示された場合、「詳細情報」リンクをクリック後、「実行」ボタンを押下してください。
ご寄付について
気に入って頂けた方は、PayPalによるご寄付をご検討ください。頂きましたご寄付は、開発費に充てさせて頂きます。
一度送金頂いたご寄付の返金には、応じかねます。
また、寄付の有無により、機能追加ならびにサポート等に違いが発生することはございません。
ご了承ください。
使用概要
- ダウンロードした圧縮ファイルを解凍し、適当なフォルダにコピーします。
- フォルダ内の「AnalyzeBin.exe」を、起動します。
- 本アプリは、3つの領域に分かれています。
左から、下記になっています。
- バイナリエディタ部
- 解析テキスト部
- データグリッド部
データグリッド部は、解析テキスト部の行ごとのデータを表示したものです。
- 「ファイル」ー「バイナリファイルを開く」で、解析したいファイルを読み込みます。
バイナリエディタ部に、ファイルがバイナリデータとして表示されます。
※解析テキスト部にテキストが入力されている場合は、解析処理、データグリッドへの表示も行われます。
- 解析テキスト部に、解析したいテキストを入力し、「解析」ボタン、またはF5キーを押します。
例)
char a[10]
int b
word c
- 正しく解析できた場合、解析テキスト部の変数に下線が引かれ、データグリッド部にデータが表示されます。
バイナリエディタ部
- バイナリファイルの読み込み時、最大サイズは、2GBytesです。全てオンメモリで処理しているため、ファイルサイズが大きいと重くなります。重くなる場合は、ファイル読み込みサイズを調整してください。
- 文字表示エリアは、下記の文字コードに切り替え出来ます。
- ASCII
- ShiftJIS
- UTF-8
- UTF-16
- 検索は、16進(0xを付けてください)または、文字列で行えます。文字列は、文字コードに対応したバイナリ値で検索を行います。
- バイナリファイルを開くときに、ファイル読み込み開始位置、またはファイル読み込みサイズを指定し保存を行った場合、元ファイルをコピー後、ファイルの読み込み開始位置以降から保存を行います。
解析テキスト部
- 解析テキスト部は、下記のC言語データ型、キーワードを記載出来ます。ヘッダファイルの構造体や共用体定義をそのまま貼り付けて利用することを想定し、「型 変数」の形式で記載出来ます。また、一次元までですが配列指定も行うことができます。行終端の;(セミコロン)は無くても問題ありません。
- 「解析」ボタン押下後、構造体の先頭またはデータ型記載の行をマウスクリックすると、対応するバイナリエディタ部、データグリッド部が選択されます。
- 認識できるデータ型
初期状態では以下になります。データ型は、小文字でも認識します。
データ型 |
バイト |
符号あり・なし |
BYTE |
1 |
なし |
CHAR |
1 |
あり |
SHORT |
2 |
あり |
WORD |
2 |
なし |
INT |
4 |
あり |
LONG |
4 |
あり |
DWORD |
4 |
なし |
LONGLONG |
8 |
あり |
ULONGLONG |
8 |
なし |
FLOAT |
4 |
あり |
DOUBLE |
8 |
あり |
また、メニュー「編集(E)」ー「データ型設定」で表示される「データ型設定」画面で、データ型を追加することが可能です。
※キーワードは、半角の英小文字大文字、数字と_(アンダーバー)を登録できますが、「解析」実行時は、英小文字大文
字の区別を行いません。
※バイト数は、1, 2, 4, 8のみ設定可能です。
※浮動小数点は、「符号あり」のみ設定可能です。
※データ型設定で行った設定は、プログラム終了時に、EXEファイルのあるディレクトリ下に「DataType.csv」ファイ
ルとして保存されます。
- 認識できるキーワード
- struct
- union
- #define ※1
- //
- /* */
- jmp ※2
※1・・・ 置換値は、16進数値(0xを付けてください)、10進数値、#define値を指定できます。
また、それらに四則演算を行うことができます。
使用例)
#define D_A 5
#define D_B (0x10 - D_A)*2 // (16 - 5)*2 = 22
#define D_C 3+D_A // 3 + 5 = 8
jmp D_B+3 // 22 + 3 = 25
char a[D_C + 0xd] // 8 + 13 = 21
※2・・・ jmpは、C言語ではないですが、次行の開始アドレスを指定することができます。
アドレスは、※1と同様の形式と、define値、後述する変数を記載することができます。
使用例)
JMP 0xF0
struct { // ここのアドレスは、0xF0になります
- 変数
変数は、オフセットからバイナリデータを取得し、数値として設定します。変数を指定できる個所は、jmpのアドレスと配列の添え字です。
変数のデータが取得できる条件は、使用する変数の上方に変数の宣言が記載されていること、バイナリデータが取得できることです。
使用例)
struct sA {
short size;
long addr;
}A[3];
JMP A[1].addr // A[1].addrのバイナリ値が、 次行の開始アドレスになります。
char test[ A[1].size ]; // A[1].sizeのバイナリ値が、test配列のサイズになります。
- エンディアン コンボボックス
エンディアンを変更します。データグリッド部の値(16進)、値(10進)の値が変わります。
- メモリアライメント コンボボックス
変数のメモリアライメント調整を行うかを設定し、現在「なし」と「x86 | MS VisualC」が選択できます。
- 「x86 | MS VisualC」が選択された場合、MS VisualCで生成されるアライメント調整を算出した値を、オフセットとします。
例)
struct A {
char a1; // ここのオフセットを、0とします。
double b1; // ここのオフセットは、「なし」の場合 1で、「x86 | MS VisualC」の場合 8になります。
}
- 解析処理では、データグリッドとの行一致を考え、下記に上げるC言語の記述を認識できません。
- 構造体や共用体内の構造体
→ 構造体定義を、コピーしてください。
認識できない例)
typedef struct {
char a1;
} A;
struct B {
A C[10];
}
修正例)構造体定義を、コピーして入れてください
struct B {
typedef struct {
char a1;
} C[10];
}
- 複数行にまたがる記載
→ 1行にしてください
認識できない例)
char a
[100];
データグリッド部
- 解析テキスト部で、「解析」処理を行い、データ型を認識できた行のデータを表示します。コメント行や空行は、グレーの行となります。
- 行を選択すると、対応するバイナリエディタ部、解析テキスト部が選択されます。
- 編集可能なカラムは、下記です。それ以外のカラムは、解析テキスト部を編集し、「解析」処理を再度行ってください。
- 値(16進)※浮動小数点(float, double)は除く
- 値(10進)
- 配列インデックス ※配列の場合
更新履歴
- Version 1.0.0.0 2023/04/21 初版リリース
- Version 1.0.1.0 2023/05/09
- バイナリエディタ部での検索結果を、スクロールバーに表示するように修正
- 検索結果の表示不具合修正
- 高DPI対応
- 32bit版のリリース
- Version 1.0.2.0 2023/05/12
- 起動中、バイナリエディタ部での検索を履歴管理
- 起動中、バイナリエディタ部でのファイル読み込み情報を履歴管理
- バイナリエディタと解析テキストの下線の色を変更
- Version 1.0.3.0 2023/05/19
- バイナリエディタ部でのカット、コピー、ペースト機能の実装
- バイナリエディタ部での文字コードコンボボックス化
- 検索不具合修正
- Version 1.0.3.1 2023/05/22
- バイナリエディタ部でのコンテキストメニュー(右クリックで表示)の実装
- バイナリエディタ部のカーソル位置を、ヘッダと行番号の色を変更して表示
- バイナリエディタ部のスクロールバーが表示されない状態で、マウスホイールスクロールが行えるように修正
- バイナリファイル保存時、ファイル読み込みサイズが指定されていた場合も、元のファイルに現在のバイナリ値が上書きとなるように変更
- Version 1.0.4.0 2023/06/30
- メモリアライメントコンボボックス追加
- Version 1.0.4.1 2023/08/08
- PageUp, PageDown不具合修正。
- ファイルダイアログの選択したディレクトリを保存するように修正。
- Version 1.0.4.2 2023/08/17
- 解析テキスト部にunionがあった場合のバイナリ部の下線は、union内が選択されていない時は先頭の項目を、選択された時は選択項目となるように修正。
- 解析テキストファイル読み込み時、前回の解析結果がある場合はクリアするように修正。
- Version 1.0.4.3 2023/08/24
- 解析テキスト部で、/**/によるコメントを行えるように修正。
- Version 1.0.5.0 2023/10/05
- 解析テキスト部で、文字列検索を行えるように修正。解析テキスト部の文字列検索は、英大文字小文字は区別しません。
- 解析テキスト部で、16進数が指定されていた場合、内部処理で10進数に変換するように修正。10進数との四則演算が行えるように修正。
- 解析テキスト部の#defineで、他の#define値が記載された場合、置換するように修正。
- Version 1.0.5.1 2023/10/16
- 解析テキスト部の文字列検索で、前を検索が効かない場合がある不具合修正。
- Version 1.0.6.0 2023/11/10
- データ型設定画面を追加し、任意のデータ型での解析処理を行えるように修正。
- ツールバーの検索、エンディアン、メモリアライメントのラベルをツールチップに変更。
- データグリッド部で、ESCキーによる入力キャンセルを行えるように修正。
- データグリッド部で、値変更時、キー入力が効かなくなる場合がある不具合修正。
- Version 1.0.7.0 2023/12/22
- JMPと配列の添え字に、変数を使用できるように対応。
- ステータスバーに、解析ファイルのパスを表示する対応。
- メモリアライメント計算時、構造体が連続して指定され、後方の構造体の開始位置に対して、メモリアライメント計算を行っていた不具合修正。
- データグリッドのインデックス変更時、2階層以上ある場合のオフセットが不正となる問題の修正。
- Version 1.0.7.1 2024/02/20
- バイナリエディタ部で、任意の位置に移動できるジャンプ機能(Ctrl+J)を追加。
- 解析処理を、F5キーでも行えるように対応。
- 解析テキストの改行記号がLFだけの場合、クリック位置を正しく認識できなかった不具合修正。
- 解析テキストのJMPのアドレスが、既に構造体定義等で使用されているアドレスの場合、メッセージボックスで解析続行の可否を選択できるように変更。
- Version 1.0.7.2 2024/06/18
- 解析処理で、変数と変数の演算が正しく行われない不具合修正。
ご意見、ご感想
前のページに戻る