
Programación de kernel masm32, controladores, tutoriales, ejemplos y herramientas (créditos Four-F)
Repo de Dreg para sus propias necesidades
Programación de kernel con masm32, drivers, tutoriales, ejemplos y herramientas (créditos a Four-F)
En este momento se crea un .sys en C:\
cargar driver:
w2k_load.exe u osrloader.exe dan un error al cargar beeper.sys, ignóralo.
Este error lo genera el propio código del driver cuando termina su ejecución (con este truco no necesitas descargarlo)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Así que, si beep.sys se cargó correctamente en el kernel deberías escuchar un beep en tus altavoces (el código del driver genera un beep)
Cuando necesites descargar un driver usa:
Modifiqué w2k_load.exe de Sven B. Schreiber para que funcione desde Windows 2000 hasta Windows 10 (manifest...)
descomprime osrloaderv30.zip y usa este programa GUI:
para versiones antiguas de Windows solo usa DbgView.exe incluido en este repo. Por cierto, lo modifiqué (manifest...)
Para Windows modernos usa el último dbgview.exe del sitio web de sysinternals, y revisa esto para solucionar problemas:
Lee los archivos .pdf de este repo y mira los ejemplos en el directorio KmdKit18/examples
ADVERTENCIA: TODO el código fuente ASM está dentro de archivos .bat (código batch + asm mezclados en el mismo archivo)
Ejemplo 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
Este archivo contiene código BATCH que genera un .sys y también contiene el propio código fuente del driver. Así que, sí, es muy complicado, el script de compilación y el código fuente están juntos.
Este es un ejemplo de cómo encontrar ServiceDescriptorTableShadow.
Solo escanea hilos con ID 80h-400h intentando encontrar un hilo cuyo KTHREAD.ServiceTable no sea igual a KeServiceDescriptorTable. Si se encuentra un hilo así, su KTHREAD.ServiceTable contiene la dirección de ServiceDescriptorTableShadow.
Observa la salida de depuración del driver con DbgView (www.sysinternals.com) o usa SoftICE.
Probado en: Windows 2000, XP y Server 2003.
Este es un ejemplo de un driver de filtro de teclado PS/2 simple, heredado (no PnP). ADVERTENCIA: No podrás adjuntarlo a la pila de teclado USB.
Probado en: Windows 2000, XP y Server 2003.
Four-F, [email protected] Estos archivos de macros son de mi paquete cocomac.
Este es un ejemplo de un driver de filtro de ratón PS/2 simple, heredado (no PnP). ADVERTENCIA: No podrás adjuntarlo a la pila de ratón USB.
Probado en: Windows 2000, XP y Server 2003.
Este es un ejemplo de cómo aplicar ajustes de seguridad específicos a un objeto de dispositivo con nombre llamando a IoCreateDeviceSecure en lugar de IoCreateDevice.
Dado que la rutina IoCreateDeviceSecure no forma parte del sistema operativo, enlazamos wdmsec.lib, que contiene todas las rutinas necesarias.
La biblioteca wdmsec.lib que encontrarás aquí no es la que se distribuye con el DDK. Tuve que reconstruirla para reducir su tamaño, eliminando los miembros innecesarios.
Este es un ejemplo de cómo crear, escribir, leer y eliminar el archivo.
Usa KmdManager para registrarlo/desregistrarlo e iniciarlo. Observa su salida de depuración con DbgView (www.sysinternals.com) o usa SoftICE.
Probado en: Windows 2000, XP y Server 2003.
Este es un ejemplo de cómo empaquetar el driver en recursos.
Probado en: Windows 2000, XP y Server 2003.
La forma de saber si el sistema se está ejecutando en modo seguro o no.
Usa KmdManager para registrarlo/desregistrarlo e iniciarlo. Observa su salida de depuración con DbgView (www.sysinternals.com) o usa SoftICE.
Probado en: Windows 2000, XP y Server 2003.
basic/MemoryWorks/LookasideList
Este es un ejemplo de cómo usar la lista lookaside y la lista doblemente enlazada para gestionar los bloques de memoria asignados desde la lista lookaside.
Usa KmdManager para registrarlo/desregistrarlo e iniciarlo/detenerlo. Observa su salida de depuración con DbgView (www.sysinternals.com) o usa SoftICE.
Probado en: Windows 2000, XP y Server 2003.
Este es un ejemplo de cómo manejar excepciones con SEH. Pero recuerda: ¡NO PUEDES MANEJAR TODAS LAS EXCEPCIONES CON SEH EN MODO KERNEL!
Usa KmdManager para registrarlo/desregistrarlo e iniciarlo/detenerlo. Observa su salida de depuración con DbgView (www.sysinternals.com) o usa SoftICE.
Probado en: Windows 2000, XP y Server 2003.
basic/MemoryWorks/SharedSection
Este es un ejemplo de cómo usar un objeto de sección con nombre para compartir memoria entre un proceso en modo usuario y un driver en modo kernel.
Probado en: Windows 2000, XP y Server 2003.
basic/MemoryWorks/SharingMemory
Este es un ejemplo de una posible forma de compartir el búfer de memoria entre el modo usuario y el modo kernel.
Probado en: Windows 2000, XP y Server 2003.