DriverBuddyReloadedフォルダーとDriverBuddyReloaded.pyスクリプトファイルをIDAプラグインフォルダーにコピーします。たとえば
%APPDATA%Hex-RaysIDA PropluginsC:Program FilesIDA Pro 7.6plugins~/.idapro/plugins/ pythonv。3.xを使用する場合は、adminコマンドプロンプトからidapyswitch.exeバイナリ(IDAのフォルダーにある)を実行します。
注:このスクリプトを実行するには、IDA SDK> v.7.5が必要です。
自動分析機能を使用するには:
Edit -> Plugins -> Driver Buddy ReloadedまたはCTRL+ALT+Aを押して、自動分析を開始します。<DRIVER_NAME>.sys-YYYY-MM-DD-TIME_STAMP-DriverBuddyReloaded_autoanalysis.txt分析結果を含むファイルは、IDAのDBディレクトリに記述されます。ioctlをデコードするには:
Driver Buddy Reloaded -> Decode IOCTL 。または、 CTRL+ALT+Dショートカットを押します。関数内のすべてのiOCTLをデコードするには:
DispatchDeviceControl 、 DispatchInternalDeviceControl 、 Possible_DispatchDeviceControl_# )Driver Buddy Reloaded -> Decode ALL IOCTLs in Function 。または、 CTRL+ALT+Fショートカットを押します。DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txtファイル。vilnerable_function_listsディレクトリには、潜在的に危険/問題のある関数、Windows API、およびOPCODEのリストが含まれています。特定の関数/APIがリストされている理由についての簡単な説明が提供されます。ドライバーの固有の機能を含むcustomリストを編集できます。
注: winapi_function_prefixes 、 winapi_functionsは正確な一致のみを実行するのに対し、winapi_function_prefixesは関数名の開始( ZwがZwClose 、 ZwCommitCompleteなどと一致します)と部分的に一致します。
find_opcodes.pyでは、 find_opcode_dataオプションは、ドライバーのバディがリロードされてデータセクションでオペコードを見つけるのを防ぎます。それをTrueに切り替えると、この行に沿って何かを印刷します:通常、 Found jnz short loc_15862 in sub_15820 at 0x00015852 、表示されているアドレスに移動し、選択をコードとして再定義すると、検索されたオペコードが戻ります。
気をつけてください:それをTrue切り替えると、より多くの誤検知が生成されます!
ドライバーバディリロードは、いくつかの退屈なWindowsカーネルドライバーリバースエンジニアリングタスクを自動化するのに役立つIDA Pro Pythonプラグインです。次のような多くの便利な機能があります。
DispatchDeviceControl / DispatchInternalDeviceControl関数の位置WDFおよびWDMドライバーの一般的な構造の居住IRPやIO_STACK_LOCATIONなどの構造を識別してラベル付けしようとしますWDF関数へのラベルコールDeviceNameを見つけるPooltags 
このツールは、 DispatchDeviceControlルーチンを自動的に見つけて識別できます。この関数は、そのコードに関連付けられている特定のドライバー関数にすべての着信DeviceIoControlコードをルーティングするために使用されます。この関数を自動的に識別することで、各ドライバーの有効なDeviceIoControlコードをより速く見つけることができます。さらに、クラッシュによるドライバーの脆弱性の可能性を調査する場合、この関数の位置を知ることで、クラッシュするDeviceIoControlコードに関連付けられた特定の関数呼び出しに焦点を絞るのに役立ちます。
分析が成功すると、いくつかの潜水艦は次のように名前が変更されます。
DriverEntry :ドライバーがロードされた後に呼び出される元の最初のドライバーがサプリしたルーチン。ドライバーの初期化を担当します。Real_Driver_Entry :通常、 DriverEntryからの実行が転送された関数。通常、 DeviceNameが初期化されている場所です。DispatchDeviceControl / DispatchInternalDeviceControl :ツールが特定のオフセットで関数を回復できた場合、関数は適切な名前で名前が変更されます。Possible_DispatchDeviceControl_# :ツールがDispatchDeviceControlまたはDispatchInternalDeviceControlを回復できなかった場合、実行フローに続いて実験検索を採用し、関数が既知のIO_STACK_LOCATION & IRPアドレスをロードする場合を確認します。関数がDispatchDeviceControlである可能性があることを示します。ヒューリスティックに基づいているため、複数の結果を返す可能性があり、偽陽性になりやすいです。 
いくつかのドライバー構造は、すべてのWDM / WDFドライバーの間で共有されています。このツールは、 IO_STACK_LOCATION 、 IRP 、およびDeviceObject構造などのこれらの構造を自動的に識別することができ、リバースエンジニアリングプロセス中に時間を節約し、これらの機能が使用されているドライバーの領域にコンテキストを提供することができます。

ドライバーを逆転させながら、分析の一部としてIOCTLコードに出くわすことが一般的です。これらのコードは、デコードされたときに有用な情報を明らかにし、脆弱性が存在する可能性が高いドライバーの特定の部分に焦点を当てる可能性があります。
潜在的なIOCTLコードを右クリックすることにより、コンテキストメニューオプションが表示されます(または、カーソルが疑わしいIOCTLコードを含むライン上にあるときにCtrl+Alt+Dショートカットを使用して)を使用し、値をデコードするために使用できます。これにより、すべてのデコードされたIOCTLコードを備えたテーブルが印刷されます。デコードされたIOCTLコードを右クリックすることにより、分解ビューでは、それを無効とマークすることが可能です。これにより、非IOCTLコメントはそのまま残ります。
右クリックすると、 Ctrl+Alt+Fショートカットを使用して、ioctlディスパッチャー( DispatchDeviceControl 、 DispatchInternalDeviceControl 、 Possible_DispatchDeviceControl_# )であると思われる関数の最初の命令について、ドライバーのバディの再配置されたメニューをデコードします。 関数。これは少しハッキーですが、ほとんどの場合、物事をスピードアップできます。
DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txtファイル。 

Driver Buddy Reloadedには、一般的に脆弱な、またはバッファーオーバーフロー条件を促進できるC/C ++関数、OpCodes、Windows API(vilnerable_function_listsディレクトリで定義)のリストがあります。見つかったすべてのインスタンスは、自動分析中に報告され、機密機能に到達する可能性のあるユーザー制御コードパスを探しているときに役立ちます。

このツールは、バイナリ内のユニコード文字列を見ることでパスが見つからない場合、ドライバーが登録されたデバイスパス( DeviceName )を自動的に見つけようとします。アナリストは、難読化されたパスを見つけるためにマディアンのフロスを手動で使用しようとすることができます。

自動分析中、このツールは、バイナリで使用されているPooltags pooltags.txtで動作させる形式でダンプします。その後、出力をファイルの最後にコピーして、後でWindBGによってピックアップできます。
DriverName.sys-2021-12-10-TIME_STAMP-pooltags.txtファイルは、すべてのダンプされたプールタグを含む、IDAのDBディレクトリの下に記述されます。 
0x10000のみが自動的にデコードされるため、多くの誤検知を防ぐために。問題#15DispatchDeviceControl検索は、X64ドライバーのみで機能しますfind_opcode_dataオプションは、ドライバーのバディがリロードされてデータセクションでオペコードを見つけるのを防ぎます。それをTrueに切り替えると、この行に沿って何かを印刷します:通常、 Found jnz short loc_15862 in sub_15820 at 0x00015852 、表示されているアドレスに移動し、選択をコードとして再定義すると、検索されたオペコードが戻ります。気をつけてください:それは誤ったポジティブになる傾向があります!