
masm32 kernel programming, drivers, tutorials, examples, and tools (credits Four-F)
Dregs Repo für seine eigenen Zwecke
masm32-Kernelprogrammierung, Treiber, Tutorials, Beispiele und Werkzeuge (Dank an Four-F)
Zu diesem Zeitpunkt wird eine .sys-Datei in C:\ erstellt.
Treiber laden:
w2k_load.exe oder osrloader.exe melden beim Laden von beeper.sys einen Fehler – ignorieren Sie ihn einfach.
Dieser Fehler wird vom Treibercode selbst erzeugt, wenn er seine eigene Ausführung beendet (mit diesem Trick braucht man ihn nicht zu entladen).
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Wenn beep.sys also korrekt in den Kernel geladen wurde, sollten Sie einen Piepton aus Ihren Lautsprechern hören (der Treibercode erzeugt einen Piepton).
Wenn Sie einen Treiber entladen müssen, verwenden Sie:
Ich habe w2k_load.exe von Sven B. Schreiber modifiziert, damit es von Windows 2000 bis Windows 10 funktioniert (Manifest...).
Entpacken Sie osrloaderv30.zip und verwenden Sie dieses GUI-Programm:
Verwenden Sie für ältere Windows-Versionen einfach das in diesem Repo enthaltene DbgView.exe. Übrigens habe ich es modifiziert (Manifest...).
Verwenden Sie für moderne Windows-Versionen die neueste dbgview.exe von der Sysinternals-Website und sehen Sie sich dies zur Fehlerbehebung an:
Lesen Sie die .pdf-Dateien in diesem Repo und schauen Sie sich die Beispiele im Verzeichnis KmdKit18/examples an.
WARNUNG: Der gesamte ASM-Quellcode befindet sich in .bat-Dateien (Batch- und ASM-Code gemischt in derselben Datei).
Beispiel mit advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
Diese Datei enthält BATCH-Code, der eine .sys erzeugt, sowie den eigentlichen Treiberquellcode. Ja, es ist sehr knifflig – Build-Skript und Quellcode sind zusammen.
Dies ist ein Beispiel, wie man ServiceDescriptorTableShadow findet.
Es scannt lediglich Threads mit der ID 80h-400h, um einen Thread zu finden, dessen KTHREAD.ServiceTable ungleich KeServiceDescriptorTable ist. Wenn ein solcher Thread gefunden wird, enthält sein KTHREAD.ServiceTable die Adresse von ServiceDescriptorTableShadow.
Beobachten Sie die Debug-Ausgabe des Treibers mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel für einen einfachen Legacy- (Nicht-PnP-) PS/2-Tastaturfiltertreiber. WARNUNG: Sie werden ihn nicht an den USB-Tastaturstack anhängen können.
Getestet unter: Windows 2000, XP und Server 2003.
Four-F, [email protected] Diese Makrodateien stammen aus meinem Paket cocomac.
Dies ist ein Beispiel für einen einfachen Legacy- (Nicht-PnP-) PS/2-Mausfiltertreiber. WARNUNG: Sie werden ihn nicht an den USB-Mausstack anhängen können.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man bestimmte Sicherheitseinstellungen auf ein benanntes Geräteobjekt anwendet, indem man IoCreateDeviceSecure anstelle von IoCreateDevice aufruft.
Da die Routine IoCreateDeviceSecure nicht Teil des Betriebssystems ist, binden wir wdmsec.lib ein, die alle benötigten Routinen enthält.
Die wdmsec.lib-Bibliothek, die Sie hier finden, ist nicht die mit dem DDK gelieferte. Ich musste sie neu erstellen, um ihre Größe zu reduzieren und nicht benötigte Member zu entfernen.
Dies ist ein Beispiel, wie man eine Datei erstellt, in sie schreibt, aus ihr liest und sie löscht.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man den Treiber in Ressourcen verpackt.
Getestet unter: Windows 2000, XP und Server 2003.
So erfahren Sie, ob das System im abgesicherten Modus läuft oder nicht.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/LookasideList
Dies ist ein Beispiel, wie man eine Lookaside-Liste und eine doppelt verknüpfte Liste verwendet, um die aus der Lookaside-Liste zugewiesenen Speicherblöcke zu verwalten.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man Ausnahmen mit SEH behandelt. Aber denken Sie daran. MAN KANN NICHT ALLE AUSNAHMEN MIT SEH IM KERNELMODUS BEHANDELN!
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/SharedSection
Dies ist ein Beispiel, wie man ein benanntes Section-Objekt verwendet, um Speicher zwischen einem Benutzermodusprozess und einem Kernelmodus-Treiber zu teilen.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/SharingMemory
Dies ist ein Beispiel für eine mögliche Methode, den Speicherpuffer zwischen Benutzer- und Kernelmodus zu teilen.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/SystemModules
Dies ist ein Beispiel, wie man Speicher im Kernelmodus allokiert. Um ihn nicht nutzlos zu allokieren, füllen wir ihn mit einigen Systeminformationen.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man den Registrierungsschlüssel erstellt, setzt, liest und löscht. Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man Code in verschiedenen PE-Sections unterbringt.
basic/Synchronization/MutualExclusion
Dies ist ein Beispiel, wie man den wechselseitig ausschließlichen Zugriff auf die Ressource implementiert.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
Dies ist ein Beispiel, wie man den Benutzermodus darüber benachrichtigt, dass ein bestimmtes Ereignis eingetreten ist.
Getestet unter: Windows 2000, XP und Server 2003.
basic/Synchronization/TimerWorks
Dies ist ein Beispiel, wie man den Timer erstellt, setzt, auf ihn wartet und ihn abbricht. Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
WorkItem-Beispiel
In diesem Beispiel arbeiten wir mit einem vorhandenen Festplattengerät.
Getestet auf: Windows 2000, XP und Server 2003
Stellt Informationen über die Eigenschaften jeder Datenträgerpartition bereit.
Getestet auf: Windows 2000, XP und Server 2003
In diesem Beispiel arbeiten wir mit einem vorhandenen Diskettenlaufwerk.
Getestet auf: Windows 2000, XP und Server 2003
In diesem Beispiel arbeiten wir mit einem vorhandenen Tastaturgerät.
Getestet auf: Windows 2000, XP und Server 2003
In diesem Beispiel arbeiten wir mit einem vorhandenen Tastaturgerät. Dieses Beispiel bietet einen Teil der Funktionen des Standard-Applets „Tastatur“ in der Systemsteuerung.
Getestet auf: Windows 2000, XP und Server 2003
Das Lesen des MBR aus dem Benutzermodus ist die einfachste Sache, wenn man weiß, von welchem Gerät man lesen muss.
Getestet auf: Windows 2000, XP und Server 2003
In diesem Beispiel arbeiten wir mit einem vorhandenen seriellen Gerät.
Getestet auf: Windows 2000, XP und Server 2003
Dies ist ein Beispiel, wie man einige der Setup-Gerätefunktionen verwendet. Listet alle verfügbaren Datenträgergeräte auf und ruft die Geräteeigenschaft ab. Führen Sie es über die Befehlszeile aus.
Getestet auf: Windows 2000, XP und Server 2003
So erzeugen Sie einen Piepton mit dem Systemlautsprecher.
Getestet auf: Windows NT4.0+sp6, 2000, XP und Server 2003
Gewährt einem Benutzermodusprozess direkten Port-I/O-Zugriff. Basiert auf Dale Roberts' Artikel und C-Quellcode.
Getestet auf: Windows 2000, XP und Server 2003
Dies ist ein Beispiel, wie man die Basis von ntoskrnl.exe findet.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet auf: Windows 2000, XP und Server 2003
Demonstriert die Treiberkommunikation mit ReadFile, wobei keine der Methoden verwendet wird. Und wie man SEH in Ring0 verwendet.
Getestet auf: Windows 2000, XP und Server 2003
Der einfachstmögliche Kernelmodus-Treiber, der absolut nichts tut.
Getestet auf: Windows 2000, XP und Server 2003
Der Gerüstcode für einen Windows-NT-Kernelmodus-Gerätetreiber.
Getestet auf: Windows 2000, XP und Server 2003
Demonstriert die Treiberkommunikation mit DeviceIoControl unter Verwendung der gepufferten Methode. Und wie man virtuelle Adressen übersetzt.
Getestet auf: Windows 2000, XP und Server 2003
Dieses Beispiel zeigt Ihnen die IRQL und den Prozess-/Thread-Kontext, in dem die Hauptroutinen des Treibers ausgeführt werden. Verwenden Sie DebugView (www.sysinternals.com), um seine Ausgabe zu beobachten.
Getestet auf: Windows 2000, XP und Server 2003
Windows Driver Kit (WDK) Version 7.1.0-Dokumentation: https://www.microsoft.com/en-us/download/details.aspx?id=11800
WDK-Dokumentation: https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Intel 64- und IA-32-Architekturen, Softwareentwickler-Handbuch, kombinierte Bände: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D und 4
Windows-2003-Quellcode-Leak, WRK, CRK ...
Buch „Undocumented Windows NT“ von Prasad Dabak, Sandeep Phadke und Milind Borate
Buch „Windows Kernel Programming“ von Pavel Yosifovich
Bücher „Windows Internals“ von Mark Russinovich, David A. Solomon und anderen
(Buch) The Rootkit Arsenal, 2. Auflage, von Bill Blunden
(Buch) What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager von Enrico Martignetti
(Buch) Subverting the Windows Kernel
(Buch) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev (Community für alle, die sich für Betriebssystementwicklung interessieren)
verschiedene GitHub/Gists, OSR, Phrack, Uninformed, OpenRCE, KernelMode, Rootkit.com, ARTeam ...