Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Virtuailor — IDA ProでC++仮想関数テーブルを自動生成するIDAPythonツール | Kitploit
ツール/GitHubGitHub/0xgalz/virtuailor
静的分析動的分析 (サンドボックス)リバースエンジニアリングデバッガバイナリ解析
GitHub0xgalz/virtuailor

Virtuailor

IDA ProでC++仮想関数テーブルを自動生成するIDAPythonツール

リポジトリを見る
1.4k1396年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Virtuailor - C++ 仮想テーブル再構築のためのIDAPythonツール

Virtuailor は、Intelアーキテクチャ(32ビットおよび64ビットコード)およびAArch64(新機能!)向けに書かれたC++コードの仮想テーブルを再構築するIDAPythonツールです。 このツールは静的パートと動的パートの2つから構成されています。

最初の静的パートには以下の機能が含まれています:

  • 間接呼び出しを検出します。
  • 条件付きブレークポイントを使用して間接呼び出しの値割り当てをフックします(フックコード)。

2番目の動的パートには以下の機能が含まれています:

  • 仮想テーブル構造を作成します。
  • 関数と仮想テーブルアドレスの名前を変更します。
  • アセンブリの間接呼び出しに構造体オフセットを追加します。
  • 間接呼び出しからその仮想関数へのクロスリファレンスを追加します(複数のxref)。
  • AArch64の場合 - 未定義の仮想テーブルと関連する仮想関数の修正を試みます(ファームウェアのサポート)。

使用方法

Virtuailor は現在、IDA バージョン 7.0 から最新バージョン (7.5) をサポートしています。IDA バージョン 7.4 より前のものを使用している場合は、beforeIDA-7.4 ブランチに切り替える必要があります。master ブランチは利用可能な最新バージョン (7.5) をサポートしています。

  1. デフォルトでは、Virtuailor はコード内のすべてのアドレスで仮想呼び出しを検索します。特定のアドレス範囲のみに限定したい場合は、Main ファイルを編集して、変数 start_addr_range と end_addr_range に対象とする範囲を追加してください:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. オプションですが(強く推奨)、idb のスナップショットを作成してください。ctrl+shift+t を押してスナップショットを作成します。

  2. File->Run script... を選択し、Virtuailor フォルダに移動して Main.py を実行します。以下のGIFでより明確で視覚的な説明をご覧いただけます。 使用方法

GUI は対象範囲を選択するオプションを提供します。バイナリ全体を対象とする場合は、開始アドレスと終了アドレスのデフォルト値のまま OK を押してください。

その後、ブレークポイントがコードに配置されます。あとは IDA デバッガでコードを実行し、任意の操作を行うだけで、仮想テーブルが構築される様子を確認できます。AArch64 の場合は、リモート gdb サーバーをセットアップして IDA デバッガでデバッグできます。

ブレークポイントが不要になった場合は、IDA のブレークポイントリストタブに移動して、好きなようにブレークポイントを削除してください。

このツールは32ビットと64ビットおよびaarch64をサポートする第2バージョンであることも重要です。おそらく一部の場合、少数のブレークポイントが見逃される可能性があります。その場合は、Issueを開いて私に連絡してください。コードを改善し、修正をお手伝いします。よろしくお願いします:)

出力と一般的な機能

仮想テーブル構造

Virtuailor がヒットした仮想呼び出しで使用された vtable から作成する構造体です。vtable 関数は、BP オペコードで使用された関連レジスタに基づいてメモリから抽出されます。

vtableの例

IDA の構造体とデータセクションの vtable の間に関連性を持たせたかったため、BP はデータセクションの vtable アドレス名を構造体の名前に変更します。次の画像で確認できます: vtableの例

仮想関数の名前も変更されます。ただし、名前がデフォルトの IDA 名ではない場合(シンボルを持つ関数やユーザーが変更した関数)は、関数名はそのまま維持され、現在の名前で vtable 構造体に追加されます。

選択される名前は次のパターンで構成されます:

  • vtable_
  • vfunc_ 名前の残りの部分は、セグメントの先頭からのオフセットです。これは、最近のほとんどのバイナリが PIE および PIC であり、ASLR が有効であるためです(64ビット環境では完全なアドレス名を使用するとかなり長くなります)。

vtable 構造体には「Was called from offset: XXXX」というコメントも含まれています。このオフセットはセグメントの先頭からのオフセットです。

アセンブリへの構造体の追加

vtable を作成した後、Virtuailor は作成された構造体とアセンブリの間の接続も追加します。次の画像をご覧ください: 実行後のBP、例2

P.S: BPで使用される構造体オフセットは、最後に行われた呼び出しにのみ関連します。行われたすべての仮想呼び出しをよりよく理解するために、次のセクションで説明するように xref 機能が追加されました。

仮想関数へのXref

C++ を静的にリバースエンジニアリングする場合、誰が誰を呼び出したかを確認するのは容易ではありません。これはほとんどの呼び出しが間接呼び出しであるためです。しかし、Virtuailor を実行すると、間接的に呼び出されたすべての関数にそれらの場所への xref が追加されます。

次のGIFは、追加されたXrefとその間接関数呼び出しを示しています:

xref

これまでの講演と発表

このツールはRECon Brussels、Troopers、Warconで発表されました。 プレゼンテーションは次のリンクでご覧いただけます:https://www.youtube.com/watch?v=Xk75TM7NmtA

謝辞

REcon Brussels、Troopers、Warconのスタッフ、Nana、@tmr232、@matalaz、@oryandp、@talkain、@shiftreduce

ライセンス

このプラグインはGNU GPL v3ライセンスの下で提供されています。

ツールをダウンロード