
Programmazione kernel masm32, driver, tutorial, esempi e strumenti (crediti 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.