Скопируйте папку DriverBuddyReloaded , а также файл скрипта DriverBuddyReloaded.py в папку плагинов IDA, например:
%APPDATA%Hex-RaysIDA PropluginsC:Program FilesIDA Pro 7.6plugins~/.idapro/plugins/ Если вы используете Python v. 3.x, запустите двоичный файл 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 , содержащий результаты анализа, будет записан в каталоге DB от IDA.Декодировать ioctl:
Driver Buddy Reloaded -> Decode IOCTL ; В качестве альтернативы нажмите ярлык CTRL+ALT+D .Декодировать все ioctls в функции:
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 до этого момента, будет написан в Difory IDA. Справочник upernableable_function_lists содержит списки потенциально опасных/проблемных функций, API Windows и Opcodes; Краткое описание того, почему указано конкретная функция/API, приведено. Вы можете редактировать custom список, включая конкретные функции драйвера.
Примечание : winapi_function_prefixes будет частично совпадать с началом имени функции (например, Zw будет соответствовать ZwClose , ZwCommitComplete и т. Д.), В то время как winapi_functions будет выполнять только точные совпадения.
В find_opcodes.py опция find_opcode_data предотвратит перезагрузку драйвера, чтобы найти Opcodes в разделах данных. Переключение его на True будет распечатать что-то вдоль этой линии: Found jnz short loc_15862 in sub_15820 at 0x00015852 обычно, и это выдвинуто по показанному адресу и переопределение выбора в качестве кода возвращает поисковый OpCode обратно.
Остерегайтесь : переключение на True , вызовет больше ложных срабатываний!
Driver Buddy Reloaded - это плагин IDA Pro Python, который помогает автоматизировать некоторые утомительные драйверы ядра Windows. Он имеет несколько удобных функций, таких как:
DispatchDeviceControl / DispatchInternalDeviceControlWDF и WDMIRP и IO_STACK_LOCATIONWDF , которые обычно были бы нематборенными.DeviceNamePooltags 
Инструмент может автоматически определять и определить процедуру DispatchDeviceControl . Эта функция используется для маршрутизации всех входящих кодов DeviceIoControl в конкретную функцию драйвера, связанную с этим кодом. Автоматически идентификация этой функции делает поиск действительных кодов DeviceIoControl для каждого драйвера намного быстрее. Кроме того, при расследовании возможных уязвимостей в драйвере из -за сбоя, знание местоположения этой функции помогает сфокусировать фокус на конкретный вызов функции, связанный с сбоем DeviceIoControl .
Когда анализ будет успешным, некоторые сабвуферы будут переименованы следующим образом:
DriverEntry : оригинальная первая подпрограмма, поставляемая водителем, которая называется после загрузки драйвера. Он отвечает за инициализацию драйвера.Real_Driver_Entry : Обычно функция, в которой выполнение от DriverEntry была передана. Обычно это инициализируется DeviceName .DispatchDeviceControl / DispatchInternalDeviceControl : если инструмент смог восстановить функции при некоторых конкретных смещениях, функции будут переименованы с помощью соответствующего имени.Possible_DispatchDeviceControl_# : Если инструмент не смог восстановить DispatchDeviceControl или DispatchInternalDeviceControl , он использует экспериментальный поиск после поток выполнения и проверяет случаи, когда функция загружает известные адреса IO_STACK_LOCATION & IRP ; Указывая, что функция может быть диспетчердовикоконтролем. Поскольку он основан на эвристике, он может вернуть более одного результата, и он подвержен ложным срабатыванию. 
Несколько структур драйверов распространяются среди всех драйверов WDM / WDF . Инструмент способен автоматически идентифицировать эти структуры, такие как структуры IO_STACK_LOCATION , IRP и DeviceObject , и может помочь сэкономить время в процессе обратного проектирования и обеспечить контекст для областей драйвера, где используются эти функции.

Во время изменения водителей обычно сталкиваться с кодами IOCTL как часть анализа. Эти коды, когда они декодированы, раскрывают полезную информацию и могут привлечь внимание к конкретным частям драйвера, где уязвимости чаще существуют.
Клявая правой кнопкой мыши по потенциальному коду IOCTL, представлена опция контекстного меню (альтернативно с использованием ярлыка Ctrl+Alt+D когда курсор находится в строке, содержащей подозреваемый код IOCTL), и может использоваться для декодирования значения. Это распечатает таблицу со всеми декодированными кодами IOCTL. Щелкнув правой кнопкой мыши по декодированному коду IOCTL, в представлении разборки можно пометить его как недействительный; Это оставит любой неэтапный комментарий.
Если вы щелкните правой кнопкой мыши, альтернативно используя ярлык Ctrl+Alt+F , в первой инструкции функции, по вашему мнению, является диспетчеры IOCTL ( DispatchDeviceControl , DispatchInternalDeviceControl , Possible_DispatchDeviceControl_# ) при перезагруженном меню Decode, это может находить все, что можно найти, чтобы найти все, что можно найти, чтобы найти все, что можно найти все , что можно найти все, что можно найти, в то время как можно найти все, что можно найти все, что может найти все, что можно найти все, что может найти все. Это немного взломанно, но большую часть времени он может ускорить.
DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt , содержащий все декодированные ioctls до этого момента, будет написан в Difory IDA. 

Driver Buddy Reloaded имеет списки функций C/C ++, OPCODES и Windows API (определяемые в каталоге vientable_function_lists), которые обычно уязвимы или могут облегчить условия переполнения буфера. Все найденные экземпляры сообщаются обратно во время автоматического анализа и могут помочь, в поисках возможных контролируемых пользователем пути кода, достигающих чувствительных функций.

Инструмент автоматически пытается найти пути зарегистрированных драйверов ( DeviceName ), если не можно найти пути, посмотрев на строки Unicode внутри двоичного файла, то аналитик может вручную попытаться использовать нити Мадиана, пытаясь найти запутанные пути.

Во время автоматического анализа инструмент также сбрасывает Pooltags используемые бинарным в формате, который работает с pooltags.txt . Вывод может затем быть скопирован в конце файла, а затем поднят WindBG.
DriverName.sys-2021-12-10-TIME_STAMP-pooltags.txt , содержащий все сброшенные бассейны, будет записан в каталоге DB от IDA. 
0x10000 будут автоматически декодированы, таким образом, чтобы предотвратить большое количество ложных срабатываний. Выпуск № 15DispatchDeviceControl работает только для драйверов x64find_opcode_data предотвратит перезагрузку драйвера, чтобы найти Opcodes в разделах данных. Переключение его на True будет распечатать что-то вдоль этой линии: Found jnz short loc_15862 in sub_15820 at 0x00015852 обычно, и это выдвинуто по показанному адресу и переопределение выбора в качестве кода возвращает поисковый OpCode обратно. Остерегайтесь : это склонно к ложным позитивам!