Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
BugChecker — SoftICE-ähnlicher Kernel-Debugger für Windows 11 | Kitploit
Tools/GitHubGitHub/vitoplantamura/bugchecker
Dynamische Analyse (Sandboxing)Reverse EngineeringDebuggerBinäranalyse
GitHubvitoplantamura/bugchecker

BugChecker

SoftICE-ähnlicher Kernel-Debugger für Windows 11

Repository anzeigen
1.1k144vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

BugChecker

Einführung

BugChecker ist ein SoftICE-ähnlicher Kernel- und User-Debugger für Windows 11 (sowie Windows XP: es wird Windows-Versionen von XP bis 11 unterstützt, sowohl x86 als auch x64). BugChecker benötigt keinen zweiten Rechner, der mit dem zu debuggenden System verbunden ist, wie dies bei WinDbg und KD der Fall ist. Diese Version von BugChecker (anders als die vor 20 Jahren entwickelte Originalversion) nutzt die interne und undokumentierte KD-API in NTOSKRNL. Die KD-API ermöglicht WinDbg/KD Aufrufe wie Lesen/Schreiben von virtuellem Speicher, Lesen/Schreiben von Registern, Setzen eines Breakpoints an einer Adresse usw.

Im Gegensatz dazu pflegte das ursprüngliche BugChecker, wie auch SoftICE, das System zu 'übernehmen', indem es mehrere Kernel-APIs (sowohl exportierte als auch private) hookte, die Kontrolle über den APIC übernahm, IPIs sendete usw. Dieser Ansatz erhöht die Komplexität exponentiell (und verringert die Systemstabilität), da die Implementierung mit allen unterstützten Versionen und Unterversionen von Windows (auf Funktionsebene) sowie allen möglichen unterstützten Hardwarekonfigurationen kompatibel sein muss. Darüber hinaus macht PatchGuard diese Lösung 20 Jahre später unmöglich.

Im Gegensatz dazu präsentiert sich diese Version von BugChecker, indem sie Aufrufe von KdSendPacket und KdReceivePacket im Kernel abfängt, der zu debuggenden Maschine als zweites System, das einen externen Kernel-Debugger ausführt, aber in Wirklichkeit geschieht alles auf demselben Rechner. Typischerweise wird dies erreicht, indem KDCOM.DLL (das Modul, das die serielle Kabelkommunikation für die KD-API in Windows implementiert) ersetzt und das System im Kernel-Debugging-Modus gestartet wird. Dieser Ansatz (inspiriert von VirtualKD) reduziert die Komplexität und erhöht Stabilität und Kompatibilität (und Portabilität, z. B. zu ARM – und Modularität, da die Fähigkeiten des unteren Debugger-Levels hinter KdXxxPacket implementiert und durch eine benutzerdefinierte Implementierung ersetzt werden können). Darüber hinaus sorgt das Vorhandensein eines Kernel-Debuggers beim Start (wenn auch 'gefälscht') dafür, dass Windows PatchGuard deaktiviert.

Derzeit benötigt BugChecker eine PS/2-Tastatur für die Eingabe und einen linearen Framebuffer, um seine Ausgabe zu schreiben. Bitte beachten Sie, dass die eingebaute Tastatur vieler moderner Laptops immer noch PS/2 ist.

Funktionen

  • Unterstützung für Windows XP bis Windows 11, x86 und x64 sowie SMP-Kernel. Unterstützung für WOW64-Prozesse auf x64.
  • Integration von QuickJSPP, einem Port von QuickJS auf MSVC++. Vor dem Aufruf von QuickJS speichert BugChecker den FPU-Zustand (auf x86) und wechselt zu einem erweiterten Stack von 128 KB.
  • Befehle akzeptieren JS-Ausdrücke. Beispielsweise sind 'U rip+rax*4' und 'U MyJsFn(rax+2)' gültige Befehle. Benutzerdefinierte Funktionen können im Script Window definiert werden. CPU-Register werden automatisch von BugChecker als globale Variablen deklariert.
  • Unterstützung für PDB-Symbol-Dateien. PDB-Dateien können manuell angegeben werden oder der Symbol Loader kann sie von einem Symbol-Server herunterladen.
  • JavaScript-Code kann die folgenden asynchronen Funktionen aufrufen: WriteReg, ReadMem, WriteMem.
  • Haltepunkte können eine JS-Bedingung haben: Wenn die Bedingung 0 ergibt, findet kein 'Breakin' statt. Dies ermöglicht es, 'Logpoints' und Haltepunkte zu setzen, die den Ausführungsablauf ändern können.
  • Das Log-Fenster zeigt die an den Kernel-Debugger gesendeten Nachrichten (z. B. DbgPrint-Nachrichten).
  • JavaScript-Fenster mit Syntaxhervorhebung.
  • Die Tab-Taste ermöglicht es, bei wenigen Ziffern durch alle Hexadezimalzahlen auf dem Bildschirm zu blättern, oder bei wenigen Zeichen durch alle Symbole, die diese Zeichen enthalten.
  • EASTL und C++20-Koroutinen machen das Erstellen neuer Befehle zum Kinderspiel. Zögern Sie nicht, Ihre Pull-Requests zu senden!

Videos (YouTube)

Demonstration von BugChecker unter Windows 11 22H2, in VirtualBox 7.0.4. Es wird eine JavaScript-Haltepunktsbedingung geschrieben, die den Ausführungsfluss in einem Benutzermodus-Thread ändert.

Watch the video

BugChecker läuft in einer sehr eingeschränkten Umgebung: einem Raspberry Pi 4 (4 GB RAM) über QEMU unter Windows XP (512 MB RAM). Ein Haltepunkt wird verwendet, um alle SYSENTER-Aufrufe vom Benutzermodus zum Kernel zu protokollieren. Der Service-Index wird in einem JavaScript-Array gespeichert.

Watch the video

BugChecker läuft direkt auf Bare Metal auf einem HP Pavilion Dv2000, einem alten PC mit PS/2-Tastatur. Das Betriebssystem ist Windows 7 Home 32-Bit.

Watch the video

Installationsanleitung

Einführung

Stellen Sie sicher, dass Secure Boot deaktiviert ist, wenn Sie BugChecker installieren und verwenden. In der Regel können Sie es später wieder aktivieren. Wenn Sie VMware oder VirtualBox verwenden, kann Secure Boot in den Einstellungen der virtuellen Maschine deaktiviert werden.

Erwägen Sie auch, das Legacy-Boot-Menü zu aktivieren, wenn Sie Windows 8, 10 oder 11 verwenden, mit dem Befehl: bcdedit /set "{current}" bootmenupolicy legacy. Es ermöglicht ein reibungsloseres Erlebnis beim Booten, da Sie die BugChecker-Boot-Option auswählen und gleichzeitig die Treibersignaturerzwingung deaktivieren können.

Anleitung

Der erste Schritt ist, den Symbol Loader zu starten:

Symbol Loader

Falls erforderlich, deaktivieren Sie die Anzeigetreiber, indem Sie auf die Schaltfläche 'Disable Display Drvs' klicken. Dasselbe kann im Windows-Geräte-Manager erreicht werden. Nachdem die Anzeigetreiber deaktiviert wurden, bleiben sie auch nach einem Systemneustart deaktiviert. Sie können später jederzeit wieder aktiviert werden, wenn BugChecker nicht verwendet wird.

Der Punkt hier ist, dass BugChecker einen linearen Framebuffer mit einem Format von 32 Bit pro Pixel benötigt, um seine Oberfläche zu zeichnen. Wenn die Anzeigetreiber deaktiviert werden, verwirft Windows die Hardwarebeschleunigung zum Zeichnen seiner Benutzeroberfläche und fällt auf den VGA-Kompatibilitätsmodus zurück. Wenn Sie auf Bare Metal oder VMware laufen, sollten Sie die Anzeigetreiber deaktivieren. Wenn Sie auf VirtualBox laufen, sollten Sie die Anzeigetreiber deaktivieren oder die vm_screen-Einstellung in BugChecker.dat setzen, wie unten beschrieben. Wenn Sie auf QEMU laufen, müssen Sie die Anzeigetreiber nicht deaktivieren, aber stellen Sie sicher, dass Sie das Anzeigegerät '-vga std' angeben.

Beachten Sie, dass der VGA-Kompatibilitätsmodus die maximale Bildschirmauflösung einschränken kann. VMware ist auf eine maximale Auflösung von 1152x864 beschränkt. QEMU mit dem Anzeigegerät '-vga std' leidet nicht unter dieser Einschränkung.

Interessanterweise ist es, wenn BugChecker auf einem System mit mehr als einer Grafikkarte installiert ist, möglich, die Anzeigetreiber nur einer Grafikkarte zu deaktivieren, und zwar der Karte, die an den Bildschirm angeschlossen ist, der die BugChecker-Benutzeroberfläche anzeigt. Die zweite Karte (als Hauptanzeige eingestellt) behält alle ihre 2D- und 3D-Beschleunigungsfunktionen, einschließlich OpenGL- und DirectX-Unterstützung (HINWEIS: getestet auf VMware mit Windows 11 und einem DisplayLink-Display).

Klicken Sie dann auf 'Start Driver', dann auf 'Auto Detect' und schließlich auf 'Save'. 'Auto Detect' sollte Breite, Höhe, physische Adresse und Stride des Framebuffers automatisch ermitteln können. Sie können diese Einstellungen jedoch manuell festlegen (vergessen Sie nicht, nach Abschluss auf 'Save' zu klicken). Wenn 'Stride' 0 ist, wird es beim Starten des Treibers automatisch als 'Width' * 4 berechnet. Die 'Adresse' (d. h. die physische Adresse des Framebuffers) kann im Windows-Geräte-Manager ermittelt werden, indem Sie auf 'Eigenschaften' des Anzeigegeräts unter dem Tab 'Ressourcen' klicken.

Klicken Sie dann im Abschnitt 'KDCOM Hook Method' auf 'Callback', dann auf 'Copy/Replace Kdcom' und schließlich können Sie das System neu starten.

Dieser Einrichtungsvorgang muss nur einmal durchgeführt werden, und die Anzeigetreiber können bei Bedarf wieder aktiviert werden. Wenn Sie BugChecker verwenden, müssen die Anzeigetreiber jedoch wieder deaktiviert werden, falls Ihre Konfiguration dies erfordert.

vm_screen-Einstellung für VirtualBox (Experimentell)

Die vm_screen-Einstellung in BugChecker.dat ermöglicht es, die BugChecker-Debugger-Benutzeroberfläche in VirtualBox zu öffnen, ohne vorher eine Bildschirmauflösung im Symbol Loader anzugeben und ohne die Anzeigetreiber zu deaktivieren.

Die Idee ist, direkt auf die I/O-Ports und den Command Buffer des virtuellen Anzeigegeräts zu schreiben, um die aktuelle Bildschirmauflösung zu erhalten und den Hypervisor über Aktualisierungen im Framebuffer zu benachrichtigen.

Diese Lösung wurde vom X.org xf86-video-vmware Treiber inspiriert.

Diese Lösung funktioniert nur für VirtualBox-VMs und durch manuelle Bearbeitung der Datei BugChecker.dat:

vm_screen

  • Im Symbol Loader stellen Sie die Breite und Höhe des Framebuffers manuell auf die maximal mögliche Auflösung ein (d. h. die Abmessungen Ihres Computerbildschirms). Setzen Sie den Stride auf 0.
  • Die Datei BugChecker.dat wird vom Symbol Loader in 'C:\Windows\BugChecker' erstellt.
  • Die vm_screen-Einstellung sollte unter 'settings->framebuffer' hinzugefügt werden.
  • Die Hierarchie der Einstellungen in dieser Datei wird durch Tabulatorzeichen (nicht Leerzeichen) bestimmt.
  • Das Format der Einstellung ist Command_Buffer_Start_Address (Komma) Command_Buffer_End_Address (Komma) I/O_Port_Base
  • WICHTIG: Wählen Sie in den VM-Einstellungen unter 'Anzeige' den Grafikcontroller 'VBoxSVGA' und deaktivieren Sie '3D-Beschleunigung aktivieren'.

Dies ist eine experimentelle Funktion. In Zukunft wird diese Einstellung automatisch vom Symbol Loader hinzugefügt.

Implementierte Befehle

Die Befehlsnamen und -syntax wurden so gewählt, dass sie denen des ursprünglichen SoftICE für NT so nahe wie möglich kommen:

  • ? javascript-expression: Evaluiert einen JavaScript-Ausdruck.
  • ADDR eprocess: Wechselt zum Prozesskontext (gibt Kontrolle an das Betriebssystem zurück).
  • BC list|*: Löscht einen oder mehrere Haltepunkte.
  • BD list|*: Deaktiviert einen oder mehrere Haltepunkte.
  • BE list|*: Aktiviert einen oder mehrere Haltepunkte.
  • BL (keine Parameter): Listet alle Haltepunkte auf.
  • BPX address [-t|-p|-kt thread|-kp process] [WHEN js-expression]: Setzt einen Haltepunkt auf Ausführung.
  • CLS (keine Parameter): Leert das Log-Fenster.
  • COLOR [normal bold reverse help line]|[reset]: Zeigt die Bildschirmfarben an, setzt oder setzt sie zurück.
  • DB/DW/DD/DQ [address] [-l len-in-bytes]: Zeigt Speicher als 8/16/32/64-Bit-Werte an.
  • EB/EW/ED/EQ address -v space-separated-values: Bearbeitet Speicher als 8/16/32/64-Bit-Werte.
  • KL EN|IT: Setzt das Tastaturlayout.
  • LINES [rows-num]: Zeigt die aktuelle Anzahl an Zeilen an oder setzt sie.
  • MOD [-u|-s] [search-string]: Zeigt Modulinformationen an.
  • P [RET]: Führt einen Programmschritt aus.
  • PAGEIN address: Erzwingt das Einlagern einer Speicherseite (gibt Kontrolle an das Betriebssystem zurück).
  • PROC [search-string]: Zeigt Prozessinformationen an.
  • R register-name -v value: Ändert einen Registerwert.
  • STACK [stack-ptr]: Durchsucht den Stack nach Rückkehradressen.
  • T (keine Parameter): Durchläuft eine Anweisung (Tracing).
  • THREAD [-kt thread|-kp process]: Zeigt Thread-Informationen an.
  • U address|DEST: Disassembliert Anweisungen.
  • VER (keine Parameter): Zeigt Versionsinformationen an.
  • WD [window-size]: Schaltet das Disassembler-Fenster um oder setzt seine Größe.
  • WIDTH [columns-num]: Zeigt die aktuelle Spaltenanzahl an oder setzt sie.
  • WR (keine Parameter): Schaltet das Register-Fenster um.
  • WS [window-size]: Schaltet das Script-Fenster um oder setzt seine Größe.
  • X (keine Parameter): Verlässt den BugChecker-Bildschirm.

Build-Anleitung

Voraussetzungen

  • Visual Studio 2019
  • Windows Driver Kit 7.1.0

Hinweis: Das WDK sollte an seinem Standardort installiert werden, d.h. X:\WinDDK, wobei X das Laufwerk ist, auf dem die BugChecker-Quellen gespeichert sind.

Eine Schritt-für-Schritt-Anleitung zum Bauen des Kernel-Treibers ist hier verfügbar.

Beschreibung der Visual Studio-Projekte

  • BugChecker: Dies ist der BugChecker-Kernel-Treiber, in dem der gesamte Debugger implementiert ist. Die Ausgabedateien 'Release|x86' und 'Release|x64' sind im endgültigen Paket enthalten. Während der Initialisierung lädt der Treiber seine Konfigurationsdatei unter '\SystemRoot\BugChecker\BugChecker.dat' (alle Symbol-Dateien werden ebenfalls in diesem Verzeichnis gespeichert) und versucht dann, 'KDCOM.dll' im Kernel-Space zu finden. Wenn gefunden, versucht es, dessen exportierte Funktion 'KdSetBugCheckerCallbacks' aufzurufen und somit KdSendPacket und KdReceivePacket zu hooken.
  • SymLoader: Dies ist der Symbol Loader. Nur die Ausgabedatei 'Release|x86' ist im endgültigen Paket enthalten. Der Symbol Loader wird verwendet, um die BugChecker-Konfiguration zu ändern (die Konfiguration wird nach '\SystemRoot\BugChecker\BugChecker.dat' geschrieben), PDB-Dateien herunterzuladen und das benutzerdefinierte KDCOM.dll-Modul zu installieren.
  • KDCOM: Dies ist das benutzerdefinierte KDCOM.dll-Modul, das NTOSKRNL beim Systemstart lädt. Es exportiert die Funktion 'KdSetBugCheckerCallbacks', die der Treiber aufruft, um KdSendPacket und KdReceivePacket zu hooken.
  • pdb: Dies ist das Ghidra 'pdb'-Projekt. Die ursprüngliche Version gibt den Inhalt einer PDB-Datei im XML-Format auf die Standardausgabe aus. Der Code wurde geändert, um stattdessen eine BCS-Datei zu generieren.
  • NativeUtil: Da der Symbol Loader unter Windows x64 eine WOW64-Anwendung ist, wurden die Aufrufe an die APIs, die von architekturnativen Images ausgeführt werden müssen, hierher verschoben (z. B. die Aufrufe an die Device and Driver Installation API).
  • HttpToHttpsProxy: Dies ist eine ASP.NET Core-Anwendung, deren Funktion darin besteht, als Internet-Proxy für den Symbol Loader zu dienen, wenn er unter Windows XP ausgeführt wird. Da XP veraltete TLS-Unterstützung hat, kann der Symbol Loader keine Dateien von einem beliebigen Symbol-Server herunterladen. Nach der Bereitstellung dieser Anwendung in einem IIS im selben Netzwerk ist es möglich, Dateien von einem Symbol-Server unter Windows XP herunterzuladen, indem der Server-URL im Symbol Loader 'http://<IHR_IIS_SERVER_IP>/HttpToHttpsProxy/' vorangestellt wird.

Danksagungen

  • VirtualKD: Der erste Proof of Concept von BugChecker wurde durch Modifikation von VirtualKD erstellt.
  • BazisLib: Der Code hinter der Schaltfläche 'Copy/Replace Kdcom + Add Boot Entry' im Symbol Loader stammt von VirtualKD und verwendet BazisLib.
  • EASTL: Hier gibt es keine Möglichkeit, MSVC++ STL zu verwenden. EASTL ist eine hervorragende Alternative.
  • Ghidra: Das 'pdb'-Projekt in BugChecker stammt von Ghidra. Es wurde modifiziert, um BCS-Dateien zu generieren.
  • Zydis: Für das Disassembler-Fenster in BugChecker.
  • QuickJSPP, ein Port von QuickJS auf MSVC++: Für die in den Kernel-Treiber integrierte JavaScript-Engine.
  • ReactOS: Für die internen Typdefinitionen von Windows KD.
  • SerenityOS: Für die Low-Level-Bitmap-Manipulationsfunktionen des BugChecker-Speicherzuweisers. Da ich mit BugChecker begann, nachdem ich ein Video von Andreas gesehen hatte (nach 10 Jahren Abstinenz von C/C++ und jeder Art von Low-Level-Programmierung), wollte ich ein kleines Stück von SerenityOS in BugChecker einbauen.
Tool herunterladen