例如,将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恢复。提防:这很容易误报!