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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pythia — 純粋なPythonで書かれた、Delphi実行ファイルからRTTI情報を抽出するツール | Kitploit
ツール/GitHubGitHub/nccgroup/pythia
リバースエンジニアリングマルウェア分析バイナリ解析
GitHubnccgroup/pythia

pythia

純粋なPythonで書かれた、Delphi実行ファイルからRTTI情報を抽出するツール

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

人気

すべて見る →

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

すべてのツールを探索

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

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

はじめに / tl;dr

このツールは、実行可能ファイルをスキャンして、RTTIや仮想関数テーブルなどのDelphiデータを探します。特定されたクラスと関数に関する情報を含むJSONファイルを出力し、追加の分析に使用できます。例えば次のような用途です:

  • クラスツリーの生成。
  • IDA用の名前とコメントの生成。
  • 自動逆コンパイルなど、さらなる処理への入力。

出力をIDAに読み込むことができるIDAPythonスクリプトが提供されています。

このスクリプトは、Delphiのリバースエンジニアリング用の他のツールを補完するために作成されました。

作者とライセンス

NCC Group Plc によりオープンソースとして公開 - http://www.nccgroup.com/

開発者: David Cannings (@edeca) [email protected]

http://www.github.com/nccgroup/pythia

このプロジェクトはAGPLライセンスの下で公開されています。詳細はLICENSEを参照してください。

動作の仕組み

大まかな流れは以下の通りです:

  • PEファイルをロードしてコードセクションを見つける
  • 各コードセクションを一度に4バイトずつスキャンする
  • 潜在的なvftableを特定して検証する
  • クラス名と親クラスの関係を解析する
  • 関数の継承を特定する

潜在的なvftableの特定

Delphiのvftableは十分に文書化されています。最新バージョンの情報はEmbarcaderoから入手できます。非公式のドキュメントはDelphi 2005向けにあります(こちらを参照)。

Free Pascalのソースコードも役立ちます(Githubミラー)。

vftableの最初の項目はvmtSelfPtrで、これは仮想関数テーブルの先頭を指します。スクリプトはPEファイル内の各コードセグメントをスキャンして、前方+0x4Cバイトを指す場所を探します。Delphiコンパイラはvftableを4バイト境界に整列することに注意してください(最適化のため)。

例えば、次のVA 0x0046E1C8 にはオフセット 0x0046E214 が含まれており、これは現在の場所より 0x4C 先にあります。IDAでは次のように表示されます:

root@kitploit:~
.text:0046E1C8                   ; Classes::TComponent *vftable_TDCP_misty1
.text:0046E1C8 14 E2 46 00       vftable_TDCP_misty1 dd offset off_46E214

この方法では誤検知が発生する可能性があるため、vftable内の他のフィールドが妥当な値かどうかチェックされます。例えば、vmtInstanceSize が過大でないことを確認し、関数ポインタが実行可能セクション内にあることを検証します。テスト中、総当たり検索方法にもかかわらず、誤検知率は非常に低かったです。

継承

vftable内で見つかった各関数は、親から継承されているかオーバーロードされているかをチェックされます。Delphiは多重継承をサポートしていないため、親vftable内の同じオフセットのポインタをチェックすることでこれを実現できます。

両方のポインタが同じ関数を参照している場合、それは継承されています。子が異なるポインタを持つ場合、それはオーバーロードされています。

出力例

このツールの主な出力はJSONファイルで、後続の処理やツールに渡すことができます。ただし、他にもいくつかの出力形式が含まれています。

ツリー出力

--save-tree オプションを使用すると、次のようなファイルが生成されます:

root@kitploit:~
TObject (at 0x0040112c)
|-- Exception (at 0x004081f8)
|   |-- EAbort (at 0x00408260)
|   |-- EAbstractError (at 0x00408ad4)
|   |-- EAssertionFailed (at 0x00408a74)
|   |-- EBcdException (at 0x004bd110)
|   |   +-- EBcdOverflowException (at 0x004bd16c)
|   |-- EBitsError (at 0x0041ab04)
|   |-- EComponentError (at 0x0041abbc)
|   |-- EConvertError (at 0x00408850)
|   |-- EDCP_cipher (at 0x0046a0ac)
|   |   +-- EDCP_blockcipher (at 0x0046a29c)
|   |-- EDCP_hash (at 0x00469f20)
.. etc ..

今後の目標

  • Delphiのバージョンを特定し(例:PACKAGEINFOまたはDVCLALリソースから)、異なるvftableレイアウトに合わせてスキャンを調整する。
  • より多くのクラス情報を解析する(例:プロパティ(Delphi固有の項目)やメソッドテーブル)
  • Delphi RTTI情報を解析する(vftable内のvmtTypeInfo)
  • Capstoneでコードを逆アセンブルし、仮想呼び出しを特定する(例:call [ecx+3Fh] をインスタンスメソッドに一致させる)

注意事項

  • 現時点では32ビットコードでのみテストされています。64ビットのサンプルを送ってください。
  • Windows PEファイルのみをサポートしています(Delphiは他の形式にもコンパイルできます)。
  • 完全なDelphi逆コンパイラを意図していません。DeDe / IDR / Hex-Raysを使用してください。
  • オブジェクトを使用するDelphiバイナリでのみ有用です(すべてが使用するわけではありません)。
  • 現代のDelphiは TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> のような名前を使用し、IDAではかなり解読が困難です。

このツールが機能しないバイナリの例を送ってください。改善に役立てます。

ツールをダウンロード