AnalyzeBin

English Page

概要

  AnalyzeBinは、バイナリデータを、C言語のデータ型を使って解析し、データグリッドでの表示と編集が行えるバイナリエディタです。
  Windowsの内部解析を行っている時に、C言語のデータ型を使い、可視化出来るツールがあればいいなと思い、作成しました。そのプログラムに、バイナリエディタ機能を追加したものが本プログラムです。現状のバイナリエディタ部分は、エディタとしては機能が不足していますが、データ構造の理解・編集に使えると考え、 公開しました。

特徴

  1. C言語のデータ型を解析し、バイナリデータをデータグリッドに表示し、編集が行えます。
  2. 配列データは、データグリッドで、指定したインデックスのデータの参照、更新が行えます。
  3. バイナリデータが無い状態で、データ型を解析させ、指定項目のデータを作成することができます。
  4. 解析するデータ型は、JMP命令により任意のアドレスから、マッピングさせることができます。
  5. バイナリファイルのロード時、ファイル読み込み開始位置を指定することができます。(利用例:PEファイルフォーマットのセクションデータのPointerToRawData)
  6. バイナリファイルのロード時、マッピングさせる表示開始位置を指定することができます。(利用例:PEファイルフォーマットのセクションデータのVirtualAddress)

動作環境

使用条件

フリーソフトウェアです。無料でご利用頂けます。

本ソフトウェアの使用はすべて自己責任で行ってください。使用した結果生じた損害、不利益については、作者は一切責任を負いません。

ダウンロード

AnalyzeBin.zip(64bit) Version 1.0.7.2
AnalyzeBin32.zip(32bit) Version 1.0.7.2
※解凍後、exeファイル実行時に、「WindowsによってPCが保護されました」のメッセージが表示された場合、「詳細情報」リンクをクリック後、「実行」ボタンを押下してください。

ご寄付について

気に入って頂けた方は、PayPalによるご寄付をご検討ください。頂きましたご寄付は、開発費に充てさせて頂きます。
一度送金頂いたご寄付の返金には、応じかねます。
また、寄付の有無により、機能追加ならびにサポート等に違いが発生することはございません。
ご了承ください。

PayPalによるご寄付

使用概要

  1. ダウンロードした圧縮ファイルを解凍し、適当なフォルダにコピーします。

  2. フォルダ内の「AnalyzeBin.exe」を、起動します。

  3. 本アプリは、3つの領域に分かれています。
    左から、下記になっています。
    • バイナリエディタ部
    • 解析テキスト部
    • データグリッド部
    データグリッド部は、解析テキスト部の行ごとのデータを表示したものです。

  4. 「ファイル」ー「バイナリファイルを開く」で、解析したいファイルを読み込みます。
    バイナリエディタ部に、ファイルがバイナリデータとして表示されます。
    ※解析テキスト部にテキストが入力されている場合は、解析処理、データグリッドへの表示も行われます。

  5. 解析テキスト部に、解析したいテキストを入力し、「解析」ボタン、またはF5キーを押します。
    例)
    char a[10]
    int b
    word c

  6. 正しく解析できた場合、解析テキスト部の変数に下線が引かれ、データグリッド部にデータが表示されます。

バイナリエディタ部

  1. バイナリファイルの読み込み時、最大サイズは、2GBytesです。全てオンメモリで処理しているため、ファイルサイズが大きいと重くなります。重くなる場合は、ファイル読み込みサイズを調整してください。

  2. 文字表示エリアは、下記の文字コードに切り替え出来ます。
    • ASCII
    • ShiftJIS
    • UTF-8
    • UTF-16

  3. 検索は、16進(0xを付けてください)または、文字列で行えます。文字列は、文字コードに対応したバイナリ値で検索を行います。

  4. バイナリファイルを開くときに、ファイル読み込み開始位置、またはファイル読み込みサイズを指定し保存を行った場合、元ファイルをコピー後、ファイルの読み込み開始位置以降から保存を行います。

解析テキスト部

  1. 解析テキスト部は、下記のC言語データ型、キーワードを記載出来ます。ヘッダファイルの構造体や共用体定義をそのまま貼り付けて利用することを想定し、「型 変数」の形式で記載出来ます。また、一次元までですが配列指定も行うことができます。行終端の;(セミコロン)は無くても問題ありません。

  2. 「解析」ボタン押下後、構造体の先頭またはデータ型記載の行をマウスクリックすると、対応するバイナリエディタ部、データグリッド部が選択されます。

  3. 認識できるデータ型
    初期状態では以下になります。データ型は、小文字でも認識します。
    データ型 バイト 符号あり・なし
    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」ファイ
     ルとして保存されます。

  4. 認識できるキーワード
    • 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になります

  5. 変数
    変数は、オフセットからバイナリデータを取得し、数値として設定します。変数を指定できる個所は、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配列のサイズになります。

  6. エンディアン コンボボックス
    エンディアンを変更します。データグリッド部の値(16進)、値(10進)の値が変わります。

  7. メモリアライメント コンボボックス
    変数のメモリアライメント調整を行うかを設定し、現在「なし」と「x86 | MS VisualC」が選択できます。
    • 「x86 | MS VisualC」が選択された場合、MS VisualCで生成されるアライメント調整を算出した値を、オフセットとします。
      例)
      struct A {
          char    a1; // ここのオフセットを、0とします。
          double b1; // ここのオフセットは、「なし」の場合 1で、「x86 | MS VisualC」の場合 8になります。
      }

  8. 解析処理では、データグリッドとの行一致を考え、下記に上げるC言語の記述を認識できません。
    • 構造体や共用体内の構造体
      →  構造体定義を、コピーしてください。
           認識できない例)
                    typedef struct {
                      char a1;
                    } A;
                    
                    struct B {
                      A C[10];
                    }
                  
           修正例)構造体定義を、コピーして入れてください
                    struct B {
                      typedef struct {
                        char a1;
                      } C[10];
                    }

    • 複数行にまたがる記載
        →  1行にしてください
           認識できない例)
                    char a
                        [100];

データグリッド部

  1. 解析テキスト部で、「解析」処理を行い、データ型を認識できた行のデータを表示します。コメント行や空行は、グレーの行となります。

  2. 行を選択すると、対応するバイナリエディタ部、解析テキスト部が選択されます。

  3. 編集可能なカラムは、下記です。それ以外のカラムは、解析テキスト部を編集し、「解析」処理を再度行ってください。
    • 値(16進)※浮動小数点(float, double)は除く
    • 値(10進)
    • 配列インデックス ※配列の場合

更新履歴

ご意見、ご感想


前のページに戻る