
masm32 kernel programming, drivers, tutorials, examples, and tools (credits Four-F)
Repo di Dreg per le sue esigenze personali
Programmazione kernel masm32, driver, tutorial, esempi e strumenti (crediti Four-F)
A questo punto viene creato un file .sys in C:\
carica il driver:
w2k_load.exe o osrloader.exe mostra un errore durante il caricamento di beeper.sys, ignoralo e basta.
Questo errore viene generato dal codice del driver stesso quando termina la propria esecuzione (con questo trucco non è necessario scaricarlo)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Quindi, se beep.sys è caricato correttamente nel kernel, dovresti sentire un beep dagli altoparlanti (il codice del driver genera un beep)
Quando devi scaricare un driver usa:
Ho modificato w2k_load.exe di Sven B. Schreiber per farlo funzionare da Windows 2000 a Windows 10 (manifest...)
decomprimi osrloaderv30.zip e usa questo programma GUI:
per versioni precedenti di Windows usa semplicemente DbgView.exe incluso in questo repo. Comunque, l'ho modificato (manifest...)
Per le versioni moderne di Windows usa l'ultima versione di dbgview.exe dal sito di sysinternals e controlla questo per la risoluzione dei problemi:
Leggi i file .pdf in questo repo e guarda gli esempi nella directory KmdKit18/examples
AVVERTENZA: TUTTO il codice sorgente ASM è all'interno di file .bat (codice batch + asm mescolati nello stesso file)
Esempio con 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
Questo file contiene codice BATCH che genera un .sys e contiene anche il codice sorgente del driver stesso. Quindi sì, è molto complesso: lo script di build e il codice sorgente sono insieme
Questo è un esempio di come trovare ServiceDescriptorTableShadow.
Scansiona semplicemente i thread con ID 80h-400h cercando di trovare un thread il cui KTHREAD.ServiceTable non sia uguale a KeServiceDescriptorTable. Se viene trovato un thread del genere, il suo KTHREAD.ServiceTable contiene l'indirizzo di ServiceDescriptorTableShadow.
Osserva l'output di debug del driver con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di un semplice driver filtro PS/2 legacy (non PnP) per tastiera. AVVERTENZA: non riuscirai ad associarlo allo stack della tastiera USB.
Testato su: Windows 2000, XP e Server 2003.
Four-F, [email protected] Questi file macro provengono dal mio pacchetto cocomac.
Questo è un esempio di un semplice driver filtro PS/2 legacy (non PnP) per mouse. AVVERTENZA: non riuscirai ad associarlo allo stack del mouse USB.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di come applicare specifiche impostazioni di sicurezza a un oggetto device con nome chiamando IoCreateDeviceSecure invece di IoCreateDevice.
Poiché la routine IoCreateDeviceSecure non fa parte del sistema operativo, colleghiamo wdmsec.lib, che contiene tutte le routine necessarie.
La libreria wdmsec.lib che troverai qui non è quella fornita con il DDK. Ho dovuto ricompilarla per ridurne le dimensioni, rimuovendo i membri non necessari.
Questo è un esempio di come creare, scrivere, leggere ed eliminare un file.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di come impacchettare il driver nelle risorse.
Testato su: Windows 2000, XP e Server 2003.
Il modo per sapere se il sistema è in esecuzione in modalità provvisoria o meno.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
basic/MemoryWorks/LookasideList
Questo è un esempio di come usare la lookaside list e la lista doppiamente collegata per gestire i blocchi di memoria allocati dalla lookaside list.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di come gestire le eccezioni con SEH. Ma ricorda: NON PUOI GESTIRE TUTTE LE ECCEZIONI CON SEH IN MODALITÀ KERNEL!
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SharedSection
Questo è un esempio di come usare l'oggetto sezione con nome per condividere la memoria tra un processo in modalità utente e un driver in modalità kernel.
Testato su: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SharingMemory
Questo è un esempio di un possibile modo per condividere il buffer di memoria tra modalità utente e kernel.
Testato su: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SystemModules
Questo è un esempio di come allocare memoria in modalità kernel. Per non allocarla inutilmente, la riempiamo con alcune informazioni di sistema.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di come creare, impostare, leggere ed eliminare una chiave di registro. Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Questo è un esempio di come inserire codice in diverse sezioni PE.
basic/Synchronization/MutualExclusion
Questo è un esempio di come implementare l'accesso mutuamente esclusivo a una risorsa.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
Questo è un esempio di come notificare alla modalità utente che si è verificato un qualche evento.
Testato su: Windows 2000, XP e Server 2003.
basic/Synchronization/TimerWorks
Questo è un esempio di come creare, impostare, attendere e annullare un timer. Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003.
Esempio di WorkItem
In questo esempio abbiamo a che fare con un dispositivo disco esistente.
Testato su: Windows 2000, XP e Server 2003
Fornisce informazioni sulle caratteristiche di ogni partizione del disco.
Testato su: Windows 2000, XP e Server 2003
In questo esempio abbiamo a che fare con un dispositivo disco esistente.
Testato su: Windows 2000, XP e Server 2003
In questo esempio abbiamo a che fare con un dispositivo tastiera esistente.
Testato su: Windows 2000, XP e Server 2003
In questo esempio abbiamo a che fare con un dispositivo tastiera esistente. Questo esempio offre parte delle funzionalità standard dell'applet Pannello di controllo -> Tastiera.
Testato su: Windows 2000, XP e Server 2003
Leggere l'MBR dalla modalità utente è la cosa più semplice da fare se sai da quale dispositivo leggere.
Testato su: Windows 2000, XP e Server 2003
In questo esempio abbiamo a che fare con un dispositivo seriale esistente.
Testato su: Windows 2000, XP e Server 2003
Questo è un esempio di come usare alcune delle funzioni di configurazione dei dispositivi (setup device functions). Enumera tutti i dispositivi disco disponibili e ottiene la proprietà del dispositivo. Eseguilo dalla riga di comando.
Testato su: Windows 2000, XP e Server 2003
Come emettere un beep con l'altoparlante di sistema.
Testato su: Windows NT4.0+sp6, 2000, XP e Server 2003
Fornisce l'accesso diretto all'I/O delle porte a un processo in modalità utente. Basato sull'articolo e sul codice sorgente C di Dale Roberts.
Testato su: Windows 2000, XP e Server 2003
Questo è un esempio di come trovare la base di ntoskrnl.exe.
Usa KmdManager per registrarlo/annullarne la registrazione e avviarlo/fermarlo. Osserva il suo output di debug con DbgView (www.sysinternals.com) o usa SoftICE.
Testato su: Windows 2000, XP e Server 2003
Dimostra la comunicazione del driver con ReadFile, senza usare nessuno dei due metodi. E come usare SEH in ring0.
Testato su: Windows 2000, XP e Server 2003
Il driver in modalità kernel più semplice possibile che non fa assolutamente nulla.
Testato su: Windows 2000, XP e Server 2003
Il codice scheletro per un driver di dispositivo in modalità kernel di Windows NT.
Testato su: Windows 2000, XP e Server 2003
Dimostra la comunicazione del driver con DeviceIoControl, usando il metodo buffered. E come tradurre gli indirizzi virtuali.
Testato su: Windows 2000, XP e Server 2003
Questo esempio ti permette di conoscere l'IRQL e il contesto Processo/Thread in cui vengono eseguite le routine principali del driver. Usa DebugView (www.sysinternals.com) per osservarne l'output.
Testato su: Windows 2000, XP e Server 2003
Documentazione di Windows Driver Kit (WDK) Versione 7.1.0: https://www.microsoft.com/en-us/download/details.aspx?id=11800
Documentazione WDK: https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Intel 64 and IA-32 Architectures Software Developer's Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4
Source code leak di Windows 2003, WRK, CRK ...
Libro Undocumented Windows NT di Prasad Dabak, Sandeep Phadke e Milind Borate
Libro Windows Kernel Programming di Pavel Yosifovich
Libri Windows Internals di Mark Russinovich, David A. Solomon e altri
(libro) The Rootkit Arsenal 2nd di Bill Blunden
(libro) What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager di Enrico Martignetti
(libro) Subverting the Windows Kernel
(libro) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev (community per chi è interessato allo sviluppo di sistemi operativi)
github/gist vari, OSR, phrack, uninformed, openrce, kernelmode, rootkit.com, arteam...