Copiez le dossier DriverBuddyReloaded et le fichier de script DriverBuddyReloaded.py dans le dossier des plugins IDA, par exemple:
%APPDATA%Hex-RaysIDA PropluginsC:Program FilesIDA Pro 7.6plugins~/.idapro/plugins/ Si vous utilisez Python v. 3.x, exécutez le binaire idapyswitch.exe (situé dans le dossier d'Ida) à partir d'une invite de commande admin.
Remarque: Ida SDK> V.7.5 est requis pour que ce script l'exécute.
Pour utiliser la fonctionnalité d'analyse automatique:
Edit -> Plugins -> Driver Buddy Reloaded ou appuyez sur CTRL+ALT+A pour démarrer l'auto-analyse.<DRIVER_NAME>.sys-YYYY-MM-DD-TIME_STAMP-DriverBuddyReloaded_autoanalysis.txt contenant les résultats de l'analyse, sera écrit sous le répertoire DB d'IDA.Pour décoder un IOCTL:
Driver Buddy Reloaded -> Decode IOCTL ; Alternativement, appuyez sur le raccourci CTRL+ALT+DPour décoder tous les ioctls dans une fonction:
DispatchDeviceControl , DispatchInternalDeviceControl , Possible_DispatchDeviceControl_# )Driver Buddy Reloaded -> Decode ALL IOCTLs in Function ; Alternativement, appuyez sur le raccourci CTRL+ALT+FDriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt , contenant tous les ioctls décodés jusqu'à ce moment, sera écrit sous le répertoire db d'IDA. Le répertoire vulnérable_function_lists contient une liste de fonctions potentiellement dangereuses / problématiques, API Windows et opcodes; Une brève description sur la raison pour laquelle une fonction / API spécifique a été répertoriée est fournie. Vous pouvez modifier la liste custom , y compris les fonctions spécifiques du pilote.
Remarque : winapi_function_prefixes sera le match partiel pour démarrer le nom de la fonction (par exemple, Zw correspondra à ZwClose , ZwCommitComplete et ainsi de suite) tandis que winapi_functions effectuera uniquement des matchs exacts.
Dans find_opcodes.py, l'option find_opcode_data empêchera le buddy du pilote rechargé pour trouver des opcodes dans les sections de données. Le passage à True imprimera quelque chose le long de cette ligne: Found jnz short loc_15862 in sub_15820 at 0x00015852 généralement, en allant à l'adresse affichée et en redéfinissant la sélection car le code ramènera le Opcode recherché.
Attention : le passer à True , génère plus de faux positifs!
Driver Buddy Reloaded est un plugin Ida Pro Python qui aide à automatiser certaines tâches d'ingénierie inverse du noyau Windows fastidieux. Il a un certain nombre de fonctionnalités pratiques, telles que:
DispatchDeviceControl / DispatchInternalDeviceControl FonctionsWDF et WDMIRP et IO_STACK_LOCATIONWDF qui ne seraient normalement pas étiquetéesDeviceNamePooltags 
L'outil peut localiser et identifier automatiquement la routine DispatchDeviceControl . Cette fonction est utilisée pour acheminer tous les codes DeviceIoControl entrants vers la fonction de pilote spécifique associée à ce code. L'identification automatique de cette fonction rend beaucoup plus rapidement les codes DeviceIoControl valides pour chaque pilote. De plus, lors de l'étude des vulnérabilités possibles dans un pilote en raison d'un accident, la connaissance de l'emplacement de cette fonction aide à réduire la mise au point à l'appel de fonction spécifique associé au code de DeviceIoControl de découpage.
Lorsque l'analyse sera réussie, certains sous-marins seront renommés comme suit:
DriverEntry : la routine originale du premier pilote qui est appelée après le chargement d'un pilote. Il est responsable de l'initialisation du conducteur.Real_Driver_Entry : généralement la fonction où l'exécution de DriverEntry a été transférée. C'est généralement là que le DeviceName est initialisé.DispatchDeviceControl / DispatchInternalDeviceControl : Si l'outil a pu récupérer les fonctions à certains décalages spécifiques, les fonctions seront ensuite renommées avec le nom approprié.Possible_DispatchDeviceControl_# : Si l'outil n'a pas pu récupérer DispatchDeviceControl ou DispatchInternalDeviceControl , il utilise une recherche expérimentale, après le flux d'exécution et la vérification des cas où la fonction est de chargement connu IO_STACK_LOCATION & IRP Adresses; indiquant que la fonction pourrait être la DispatchDeviceControl. Comme il est basé sur l'heuristique, il pourrait retourner plus d'un résultat et il est sujet aux faux positifs. 
Plusieurs structures de pilotes sont partagées entre tous les pilotes WDM / WDF . L'outil est capable d'identifier automatiquement ces structures, telles que les structures IO_STACK_LOCATION , IRP et DeviceObject et peut aider à gagner du temps pendant le processus d'ingénierie inverse et à fournir un contexte aux zones du pilote où ces fonctions sont utilisées.

Tout en inversant les conducteurs, il est courant de rencontrer des codes IOCTL dans le cadre de l'analyse. Ces codes, lorsqu'ils sont décodés, révèlent des informations utiles et peuvent se concentrer sur des parties spécifiques du conducteur où les vulnérabilités sont plus susceptibles d'exister.
En cliquant avec le bouton droit sur un code IOCTL potentiel, une option de menu contextuel est présentée (à l'aide du raccourci Ctrl+Alt+D lorsque le curseur est sur la ligne contenant un code IOCTL suspecté) et peut être utilisé pour décoder la valeur. Cela imprimera une table avec tous les codes IOCTL décodés. En cliquant avec le bouton droit sur un code IOCTL décodé, dans la vue de démontage, il est possible de le marquer comme invalide; Cela laissera tout commentaire non ioctl intact.
Si vous cliquez avec le bouton droit, en utilisant alternativement le raccourci Ctrl+Alt+F , sur la première instruction de la fonction que vous croyez être le Dispatcher IOCTL ( DispatchDeviceControl , DispatchInternalDeviceControl , Possible_DispatchDeviceControl_# ) sous le menu de conduite Buddy, une option « Decode All » apparaît, cette tentative de décodeur All the Ioct Codades, une «décode de décodeur» apparaît, cette tentative pour décoder tout le Menu IOCTL, une «décode de décodeur» apparaît, cette tentative de décodeur All the ioctl Menu, une «décode de décodeur» apparaît, cette tentative de décodeur All the IOCTOd Menu, une «décode de décod fonction. C'est un peu hacky, mais la plupart du temps, cela peut accélérer les choses.
DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt , contenant tous les ioctls décodés jusqu'à ce moment, sera écrit sous le répertoire db d'IDA. 

Driver Buddy Reloaded a des listes de fonctions C / C ++, OPCodes et API Windows (définies dans le répertoire vulnérable_function_lists) qui sont généralement vulnérables ou qui peuvent faciliter les conditions de débordement de tampon. Toutes les instances trouvées sont signalées pendant la situation automatique et peuvent aider tout en recherchant des chemins de code contrôlés possibles par l'utilisateur atteignant des fonctions sensibles.

L'outil tente automatiquement de trouver les chemins de périphérique enregistrés des pilotes ( DeviceName ), si aucun chemin ne peut être trouvé en regardant les chaînes Unicode à l'intérieur du binaire, alors l'analyste peut essayer manuellement d'utiliser le fil de Madiant dans le but de trouver des chemins obscurcis.

Au cours de l'auto-analyse, l'outil jette également les Pooltags utilisés par le binaire dans un format qui fonctionne avec pooltags.txt . La sortie peut ensuite être copie à la fin du fichier et récupérée plus tard par WindBG.
DriverName.sys-2021-12-10-TIME_STAMP-pooltags.txt , contenant tous les pooltags vidés, sera écrit sous le répertoire DB d'IDA. 
0x10000 seront automatiquement décodées, donc pour éviter un nombre élevé de faux positifs. Numéro n ° 15DispatchDeviceControl fonctionne uniquement pour les pilotes x64find_opcode_data empêchera le buddy du pilote rechargé pour trouver des opcodes dans les sections de données. Le passage à True imprimera quelque chose le long de cette ligne: Found jnz short loc_15862 in sub_15820 at 0x00015852 généralement, en allant à l'adresse affichée et en redéfinissant la sélection car le code ramènera le Opcode recherché. Attention : il est sujet aux faux positifs!