例如,將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文件,其中包含所有解碼的IOCTLS,直到那一刻,都將在IDA的DB DB Directory下寫。vulnerable_function_lists目錄包含潛在危險/有問題的功能,Windows API和OPCODE的列表;簡要說明了為什麼提供了特定功能/API。您可以編輯custom列表,包括驅動程序的特定功能。
注意: winapi_function_prefixes將部分匹配功能名稱的啟動(例如Zw將匹配ZwClose , ZwCommitComplete等),而winapi_functions只能執行精確的匹配。
在find_opcodes.py中, find_opcode_data選項將阻止驅動程序buddy重新加載以在數據部分中查找opcodes。將其切換到True將沿著這一行打印一些東西: Found jnz short loc_15862 in sub_15820 at 0x00015852 ,在顯示的地址上進行,並重新定義選擇,因為代碼將使搜索的OpCode恢復。
提防:將其切換到True ,將產生更多的誤報!
驅動程序Buddy Reloaded是一個IDA Pro Python插件,可幫助自動化一些乏味的Windows內核驅動程序逆向工程任務。它具有許多方便的功能,例如:
DispatchDeviceControl / DispatchInternalDeviceControl功能WDF和WDM驅動程序的填充共同結構IRP和IO_STACK_LOCATION等結構WDF函數的標籤調用DeviceNamePooltags 
該工具可以自動定位並確定DispatchDeviceControl例程。此功能用於將所有傳入的DeviceIoControl代碼路由到與該代碼關聯的特定驅動程序功能。自動識別此功能,可以更快地找到每個驅動程序的有效的DeviceIoControl代碼。此外,當由於崩潰而研究驅動程序中可能的漏洞時,知道此功能的位置有助於將焦點範圍縮小到與崩潰的DeviceIoControl代碼相關的特定功能調用。
當分析成功時,一些潛艇將被重命名如下:
DriverEntry :原始的第一個驅動程序供應的例程是加載驅動程序後調用的。它負責初始化駕駛員。Real_Driver_Entry :通常將DriverEntry執行的函數傳輸到。通常是初始化DeviceName的地方。DispatchDeviceControl / DispatchInternalDeviceControl :如果該工具能夠在某些特定的偏移量中恢復功能,則該功能將用適當的名稱重命名。Possible_DispatchDeviceControl_# :如果該工具無法恢復DispatchDeviceControl或DispatchInternalDeviceControl ,則在執行流程後採用實驗搜索,並檢查函數已加載已知IO_STACK_LOCATION & IRP地址的情況;表明該函數可以是dispatchDeviceContol。由於它是基於啟發式的,因此它可以返回多個結果,並且很容易獲得誤報。 
在所有WDM / WDF驅動程序中共享幾個驅動程序結構。該工具能夠自動識別這些結構,例如IO_STACK_LOCATION , IRP和DeviceObject結構,並可以在反向工程過程中節省時間,並為使用這些功能的驅動程序區域提供上下文。

在逆轉驅動程序時,通常會遇到IOCTL代碼作為分析的一部分。這些代碼在解碼時揭示了有用的信息,並可能將重點放在漏洞更可能存在的驅動程序的特定部分。
通過右鍵單擊潛在的IOCTL代碼,會提供上下文菜單選項(或者使用Ctrl+Alt+D快捷方式),並可以用於解碼該值。這將打印出所有解碼IOCTL代碼的表。通過右鍵單擊解碼的IOCTL代碼,在拆卸視圖中,可以將其標記為無效;這將使任何非ioctl評論完好無損。
If you right-click, alternatively using the Ctrl+Alt+F shortcut, on the first instruction of the function you believe to be the IOCTL dispatcher ( DispatchDeviceControl , DispatchInternalDeviceControl , Possible_DispatchDeviceControl_# ) under the Driver Buddy Reloaded menu, a “ Decode All ” option appears, this attempt to decode all the IOCTL codes it can find in功能。這有點駭客,但是大多數時候它可以加快事情的速度。
DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt文件,其中包含所有解碼的IOCTLS,直到那一刻,都將在IDA的DB DB Directory下寫。 

驅動程序Buddy重新加載具有C/C ++功能,OpCodes和Windows API的列表(在oulnerable_function_lists Directory中定義),通常是脆弱的,或可以促進緩衝溢出條件。所有發現的實例在自動分析過程中都報告回,並且可以在尋找可以達到敏感功能的用戶控制的代碼路徑時提供幫助。

該工具會自動嘗試查找驅動程序註冊的設備路徑( DeviceName ),如果通過查看二進制中的Unicode字符串無法找到路徑,則分析師可以手動嘗試使用Madiant的牙線以尋找迷惑的路徑。

在自動分析過程中,該工具還以與pooltags.txt合作的格式傾倒二進制使用的Pooltags 。然後可以在文件末尾複製輸出,然後由WindBG拾取。
DriverName.sys-2021-12-10-TIME_STAMP-pooltags.txt文件,包含所有傾倒pooltags,將寫在IDA的DB目錄下。 
0x10000將自動解碼,以防止大量的誤報數。問題#15DispatchDeviceControl搜索僅適用於X64驅動程序find_opcode_data選項將阻止驅動程序buddy重新加載以在數據部分中查找opcodes。將其切換到True將沿著這一行打印一些東西: Found jnz short loc_15862 in sub_15820 at 0x00015852 ,在顯示的地址上進行,並重新定義選擇,因為代碼將使搜索的OpCode恢復。提防:這很容易誤報!