Delphihelperは、Delphiプログラミング言語で書かれたX86/X86_64バイナリの分析を支援することを目的としたPython Ida Proプラグインです。
IDAプラグインディレクトリ内のDelphiHelperディレクトリとDelphiHelper.pyをコピーします。
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/以下に示す手順に従って、IDRナレッジベースファイルを手動でダウンロードするか、スクリプトsetup_IDRKB.pyを実行します。
注:セットアップスクリプトを実行するには
py7zrインストールが必要です:pip install py7zr
Delphihelperは、Windows、MacOS、GNU/LinuxでIDA 8.4以降と互換性があるはずです。
Delphihelperプラグインを使用するには、リソースセクションをIDAにロードする必要があります。これは、ボックスロードリソースをチェックするか、コマンドラインスイッチにオプション-Rを使用して実現できます。
注:プラグインを使用する前に、IDA自己分析を完了する必要があります。
<Alt-Shift-H> :ヘルプを印刷します<Alt-Shift-R> :VMTパーサーを実行します<Alt-Shift-F> :dfmファインダーを実行する(delphiフォームビューアウィンドウを表示)<Alt-Shift-E> :エントリポイント関数ファインダーを実行します<Alt-Shift-S> : SysInitとSystemユニット用のIDRナレッジベースローダーを実行する<Alt-Shift-A> :選択したユニット用のIDRナレッジベースローダーを実行するホットキー: <Alt-Shift-R>
Virtual Method Table(VMT)パーサーは、 VMT構造の開始アドレスのカーソルで実行する必要があります。この構造は、 CreateForm 、 CreateObjectなどという名前の関数を検索することで配置できます。関数が見つかったら、最後の引数はVMT構造でなければなりません。
ほとんどの場合、2つの指示のシーケンスがあります。
mov <register>, <VMTStructureOffset>
call CreateForm
例えば:
構造(vmtStructureOffsetたとえばoff_664A8C )に着いたら、 <Enter>を押します:
Hotkey <Alt-Shift-R>を押します。結果は以下のようになります:
VMT構造には、さまざまなRTTIテーブルに保存されている多くの有用な情報が含まれています。最も興味深いものは次のとおりです。
VMTパーサーは、これらのテーブルからデータを自動的に抽出し、IDA enumsと構造に保存します。
フィールドテーブルには、公開された各フィールドの名前、タイプ、オフセットがあります。 VMTパーサーは、各VMT構造のこれらすべてのエントリを抽出および保存し、IDA enumsに保存します。
VMTパーサーによって作成された酵素には、次の形式があります: %ObjectName%_Fields 。 enumエントリの名前には、この形式があります: %ObjectName%_%FieldType%_%FieldName% :
VMTパーサーによって作成されたenumsからのエントリは、シンボリック定数の名前を付けて使用される内蔵IDAショートカット<M>を押すことで名前を付けることができます。
前に
後
仮想メソッドテーブルは、クラスとその基本クラスのために宣言されたすべての仮想メソッドへのポインターを保存します。
VMTパーサーは、VMTからポインターを抽出し、解析されたVMT構造によって名前が付けられたIDA構造にそれらを保存します。構造エントリの名前には、次の形式があります。 %MethodName%_%MethodOffset% :
VMTパーサーによって作成された構造からのエントリは、構造のオフセットの命名に使用される内蔵IDAショートカット<T>押すことで名前を付けます。
前に
後
メソッドテーブルは、公開されたメソッドの名前とポインターを保存します。メソッドテーブルには、Delphi Form Viewerから見つけてアクセスできるDelphiイベントハンドラーのポインターも含まれています(詳細については、DFM Finderを参照)
ホットキー: <Alt-Shift-F
DFMファインダーは、分析されたDelphiバイナリのリソースセクションに保存されているすべてのDFMを見つけようとし、その後、発見されたDMFに関連付けられたすべてのVMT構造でVMTパーサーを実行します。すべてのVMT構造が処理された後、新しいインタラクティブなIDAサブビュー( Delphi Form Viewer )が表示されます。サブビューは、DFMから抽出されたDelphiフォームの説明のツリービューを示しています。
太字ノードは、Delphiイベントが定義されているコンポーネントを表します。青色のデルファイイベントを見つけることができるBold Propertiesノードを見つけるまで、このような太字のノードをサブツリーのより深く進みます。イベントアイテムをクリックすると、IDA分解ウィンドウの対応するイベントハンドラーに移動します。
グリーンノードは、バイナリファイルが埋め込まれたコンポーネントを表します。緑色のPropertiesノードを見つけるまで、このような緑色のノードをサブツリーのより深く進みます。ここでは、緑色のアイテムを見つけることができます。このアイテムは、DFMファインダーによってドロップされた埋め込みバイナリファイルのファイルパスを示しています。抽出されたファイルの宛先サブディレクトリは現在のIDAワーキングディレクトリにあり、次の形式があります: %IDAWorkingDirectory%_extracted_%BinaryFileName%
Delphiフォームのルート(フォーム)ノードをクリックして、ビューアウィンドウを使用して、IDA分解ウィンドウのフォームのVMT構造に移動します。
ホットキー: <Alt-Shift-E>
エントリポイント関数ファインダーは、 CreateFrom 、 InitExeおよびInitLib呼び出しへの参照を検索することにより、可能なエントリポイント関数を見つけようとします。結果は、IDAの出力ウィンドウ(例)に示されています。
ホットキー: <Alt-Shift-S>および<Alt-Shift-A>
IDRナレッジベースローダーは、 KBファイルからIDR KB署名をロードします。プラグインは、KBファイルを次の場所に保存することを期待しています。
Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
on macos/linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> SysInitとSystemのみの機能シグネチャ。
<Alt-Shift-A> 、インポートされたユニットのリストから選択されたすべてのユニットの関数署名をロードしようとします。
注:KBファイルはIDRプロジェクトからダウンロードされます。
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
IDRプロジェクトは、MITライセンスに基づいてライセンスされています。
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
次のKBファイルをDelphiHelperIDR_KBIDR64ディレクトリにダウンロードしてコピーします。
https://github.com/crypto2011/idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/idr64/blob/master/syskb2014.bin
次のKBファイルをDelphiHelperIDR_KBIDRディレクトリにダウンロードして抽出します。
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z