IDA Structor — ポインタ演算から構造体を再構築するHex‑Raysプラグイン

Security

概要

StructorはHex‑Raysのデコンパイラ出力中に見えるポインタ演算を解析して、元のC構造体に近い形を再構築するプラグインです。ポインタに対するオフセットアクセスを集約し、繰り返し現れるオフセットや関数ポインタのパターンからフィールドの名前・型・配置を推測します。VTableや関数ポインタの検出、フィールドのアラインメント調整、パディングの挿入により、読みやすい構造体定義を自動生成して、デコンパイル結果を人間に理解しやすくします。

GitHub

リポジトリの統計情報

  • スター数: 9
  • フォーク数: 0
  • ウォッチャー数: 9
  • コミット数: 4
  • ファイル数: 10
  • メインの言語: C++

主な特徴

  • ポインタ演算((char*)ptr + offset)を解析して構造体フィールドを復元
  • VTable / 関数ポインタの検出とフィールドへの反映
  • フィールドのアラインメントと必要なパディングの自動挿入
  • 型情報の呼び出し元・被呼び出し先への伝播

技術的なポイント

StructorはHex‑Rays SDKとIDA APIを用いたC++プラグインとして実装されており、デコンパイルされた中間表現やアドレス参照を走査してポインタ演算の発生箇所を収集します。主な流れは、ポインタアクセスの抽出→オフセットとアクセス型の集約→同一オフセットに対するアクセスの頻度・型候補を基にフィールド型を推定→構造体定義の生成、というものです。関数ポインタや連続するポインタ参照から仮想テーブル(VTable)を推定し、構造体内に関数ポインタ配列として組み込みます。フィールドの境界はターゲットのポインタ幅(32/64ビット)や既知の型アライメントに基づき調整され、不足する領域には明示的なパディングフィールドを挿入します。また、得られた型情報はデコンパイラに反映して、呼び出し元/被呼び出し先の関数シグネチャやローカル変数の型にも伝播させることで、プログラム全体の可読性を向上させます。ビルドはCMake/Makefileが用意され、比較的コンパクトなコードベースでHex‑Raysプラグイン開発の典型的なワークフローに従っています。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • CMakeLists.txt: file
  • Makefile: file
  • README.md: file

…他 5 ファイル

まとめ

IDΑデコンパイル結果を人間可読な構造体に自動変換する有用なツール。

リポジトリ情報:

READMEの抜粋:

structor

Structor is a Hex-Rays plugin that synthesizes C structures from raw pointer arithmetic.
Where IDA shows *(int*)((char*)ptr + 8), Structor reveals ptr->field_8.
Access patterns analyzed. Types inferred. Layouts reconstructed automatically.

VTables detected. Fields aligned. Padding inserted where needed.
Types propagate through callers and callees alike.
The arithmetic fades. The structu...