Kopieren Sie den Ordner DriverBuddyReloaded und die Skriptdatei DriverBuddyReloaded.py in den Ordner ida plugins, z. B. in den Ordner IDA Plugins:
%APPDATA%Hex-RaysIDA PropluginsC:Program FilesIDA Pro 7.6plugins~/.idapro/plugins/ Wenn Sie Python v. 3.x verwenden, führen Sie die idapyswitch.exe Binary (befindet sich in IDAs Ordner) aus einer Admin -Eingabeaufforderung aus.
Hinweis: IDA SDK> V.7.5 ist erforderlich, damit dieses Skript ausgeführt wird.
Um die Autoanalyse-Funktion zu verwenden:
Edit -> Plugins -> Driver Buddy Reloaded oder drücken Sie CTRL+ALT+A um die Autoanalyse zu starten.<DRIVER_NAME>.sys-YYYY-MM-DD-TIME_STAMP-DriverBuddyReloaded_autoanalysis.txt Datei mit den Analyseergebnissen im DB-Verzeichnis der IDA geschrieben.Um ein IOCTL zu dekodieren:
Driver Buddy Reloaded -> Decode IOCTL ; Drücken Sie alternativ die T -T -Verknüpfung CTRL+ALT+D .Um alle IOCTLs innerhalb einer Funktion zu dekodieren:
DispatchDeviceControl den Mauszeiger auf die erste Anweisung der Funktion, Possible_DispatchDeviceControl_# der Sie der DispatchInternalDeviceControl sindDriver Buddy Reloaded -> Decode ALL IOCTLs in Function Drücken Sie alternativ die T -T -Verknüpfung CTRL+ALT+F .DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt Datei, das alle dekodierten IOCTLs bis hin zu diesem Moment enthält, wird unter IDAs DB-Verzeichnis geschrieben. Das Verzeichnis des verwundbaren_function_lists enthält eine Listen potenziell gefährlicher/problematischer Funktionen, Windows -APIs und Opcodes. Eine kurze Beschreibung darüber, warum eine bestimmte Funktion/API aufgelistet wurde, wird angegeben. Sie können die custom Liste einschließlich der spezifischen Funktionen des Fahrers bearbeiten.
HINWEIS : winapi_function_prefixes wird teilweise mit dem Start des Funktionsnamens übereinstimmen (z. B. Zw stimmt ZwClose , ZwCommitComplete usw. überein, während winapi_functions nur genaue Übereinstimmungen durchführen.
In find_opcodes.py verhindert die Option find_opcode_data , dass der Treiberkumpel nachgeladen wird, um Opcodes in Datenabschnitten zu finden. Wenn Sie es auf True schalten, werden Sie etwas entlang dieser Zeile ausdrucken: Found jnz short loc_15862 in sub_15820 at 0x00015852 Normalerweise werden die angezeigten Adresse und neu definiert, da der Code den durchsuchten Opcode zurückbringt.
Achten Sie auf : Schalten Sie es auf True und erzeugen mehr falsch positive Aspekte!
Treiber Buddy Reloaded ist ein IDA Pro Python -Plugin, mit dem einige mühsame Windows -Kernel -Treiber umgekehrte technische Aufgaben automatisiert werden können. Es hat eine Reihe von praktischen Funktionen wie:
DispatchDeviceControl DispatchInternalDeviceControlWDF und WDM -TreiberIRP und IO_STACK_LOCATION zu identifizieren und zu kennzeichnenWDF -Funktionen beschriftenDeviceName findenPooltags Dumpeln 
Das Tool kann automatisch die DispatchDeviceControl -Routine lokalisieren und identifizieren. Diese Funktion wird verwendet, um alle eingehenden DeviceIoControl -Codes an die mit diesem Code zugeordnete spezifische Treiberfunktion zu leiten. Durch die automatische Identifizierung dieser Funktion wird das Auffinden der gültigen DeviceIoControl -Codes für jeden Treiber viel schneller. Bei der Untersuchung möglicher Schwachstellen in einem Treiber aufgrund eines Absturzes hilft die Kenntnis des Standorts dieser Funktion dazu, den Fokus auf den spezifischen Funktionsaufruf zu beschränken, der dem Absturz -Geräte DeviceIoControl -Code zugeordnet ist.
Wenn die Analyse erfolgreich ist, werden einige Subs wie folgt umbenannt:
DriverEntry : Die ursprüngliche Routine für den ersten Treiber, die nach dem Laden eines Treibers aufgerufen wird. Es ist für die Initialisierung des Fahrers verantwortlich.Real_Driver_Entry : Normalerweise die Funktion, in die die Ausführung von DriverEntry übertragen wurde. Hier wird normalerweise der DeviceName initialisiert.DispatchDeviceControl / DispatchInternalDeviceControl : Wenn das Tool die Funktionen in bestimmten Offsets wiederherstellen konnte, werden die Funktionen dann mit dem entsprechenden Namen umbenannt.Possible_DispatchDeviceControl_# : Wenn das Tool nicht in der Lage war, DispatchDeviceControl oder DispatchInternalDeviceControl wiederherzustellen, wird eine experimentelle Suche nach Ausführungsfluss und Überprüfung auf Fälle verwendet, in denen die Funktion bekannter IO_STACK_LOCATION & IRP -Adressen geladen wird. Angeben, dass die Funktion das SendatdeviceControl sein könnte. Da es auf Heuristik basiert, könnte es mehr als ein Ergebnis zurückgeben, und es ist anfällig für falsch positive Ergebnisse. 
Mehrere Fahrerstrukturen werden unter allen WDM / WDF -Treibern geteilt. Das Tool kann diese Strukturen automatisch DeviceObject , wie IO_STACK_LOCATION IRP

Während der Umkehrung von Treibern ist es üblich, im Rahmen der Analyse auf IOCTL -Codes zu stoßen. Wenn diese Codes dekodiert sind, zeigen nützliche Informationen und können sich auf bestimmte Teile des Treibers konzentrieren, in denen Schwachstellen eher vorhanden sind.
Durch die rechte Klicken auf einen potenziellen IOCTL-Code wird eine Kontextmenüoption angezeigt (alternativ mit der Ctrl+Alt+D Verknüpfung, wenn sich der Cursor in der Zeile befindet, die einen vermuteten IOCTL-Code enthält) und kann verwendet werden, um den Wert zu dekodieren. Dadurch wird eine Tabelle mit allen dekodierten IOCTL -Codes ausgedruckt. Durch die rechte Klicken auf einen dekodierten IOCTL-Code in der Demontage-Ansicht ist es möglich, ihn als ungültig zu markieren. Dadurch wird jeder nicht-ioctl-Kommentar intakt bleiben.
Wenn Sie mit der rechten Maustaste klicken, unter Verwendung der Ctrl+Alt+F Verknüpfung, bei der ersten Anweisung der Funktion, dass Sie der IOCTL-Dispatcher ( DispatchDeviceControl , DispatchInternalDeviceControl , Possible_DispatchDeviceControl_# ) unter dem Treiber-Buddy-Reloadd-Menü, ein " Dekodieren" -Dode- Option ", sind die Option. Dies ist ein bisschen hackig, aber die meiste Zeit kann es die Dinge beschleunigen.
DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt / DriverName.sys-2021-12-10-TIME_STAMP-IOCTLs.txt_dumb.txt Datei, das alle dekodierten IOCTLs bis hin zu diesem Moment enthält, wird unter IDAs DB-Verzeichnis geschrieben. 

Der Treiber Buddy Reloaded hat Listen von C/C ++ - Funktionen, Opcodes und Windows -APIs (definiert im Verzeichnis der verwundbaren_function_lists), die häufig anfällig sind oder die Bedingungen für den Überlauf von Puffer erleichtern können. Alle gefundenen Fälle werden während der Autoanalyse zurückgegeben und können helfen, während Sie nach möglichen benutzergesteuerten Codepfaden suchen, die sensible Funktionen erreichen.

Das Tool versucht automatisch, die registrierten Gerätepfade ( DeviceName ) zu finden, wenn keine Pfade gefunden werden können, indem Unicode -Zeichenfolgen innerhalb des Binärs betrachtet werden, dann kann der Analytiker manuell versuchen, die Zahnseide von Madiant zu verwenden, um veriebterte Pfade zu finden.

Während der Autoanalyse legt das Werkzeug auch die von der Binärdatei verwendeten Pooltags in einem Format, das mit pooltags.txt funktioniert, verwendet. Die Ausgabe kann dann am Ende der Datei kopiert und später von Windbg abgeholt werden.
DriverName.sys-2021-12-10-TIME_STAMP-pooltags.txt Datei, die alle ausgefallenen Pooltags enthält, wird unter IDAs DB-Verzeichnis geschrieben. 
0x10000 werden automatisch dekodiert, um eine hohe Anzahl falsch -positives Aspekte zu verhindern. Ausgabe Nr. 15DispatchDeviceControl -Suche funktioniert nur für X64 -Treiberfind_opcode_data , dass der Treiberkumpel nachgeladen wird, um Opcodes in Datenabschnitten zu finden. Wenn Sie es auf True schalten, werden Sie etwas entlang dieser Zeile ausdrucken: Found jnz short loc_15862 in sub_15820 at 0x00015852 Normalerweise werden die angezeigten Adresse und neu definiert, da der Code den durchsuchten Opcode zurückbringt. Achten Sie auf : Es ist anfällig für falsch positive Aspekte!