
masm32 kernel programming, drivers, tutorials, examples, and tools (credits 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.
basic/MemoryWorks/SystemModules
Este es un ejemplo de cómo asignar memoria en modo kernel. Para no asignarla inútilmente, la llenamos con información del sistema.
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 crear, establecer, leer y eliminar la clave de registro. 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 poner código en diferentes secciones PE.
basic/Synchronization/MutualExclusion
Este es un ejemplo de cómo implementar acceso mutuamente exclusivo al recurso.
Usa KmdManager para registrarlo/desregistrarlo e iniciarlo/detenerlo. Observa su salida de depuración con DbgView (www.sysinternals.com) o usa SoftICE.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
Este es un ejemplo de cómo notificar al modo usuario que ha ocurrido algún tipo de evento.
Probado en: Windows 2000, XP y Server 2003.
basic/Synchronization/TimerWorks
Este es un ejemplo de cómo crear, establecer, esperar y cancelar el temporizador. 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.
Ejemplo de WorkItem
En este ejemplo tratamos con un dispositivo de disco existente.
Probado en: Windows 2000, XP y Server 2003
Proporciona información sobre las características de cada partición de disco.
Probado en: Windows 2000, XP y Server 2003
En este ejemplo tratamos con un dispositivo de disco existente.
Probado en: Windows 2000, XP y Server 2003
En este ejemplo tratamos con un dispositivo de teclado existente.
Probado en: Windows 2000, XP y Server 2003
En este ejemplo tratamos con un dispositivo de teclado existente. Este ejemplo ofrece parte de la funcionalidad estándar del applet Panel de control -> Teclado.
Probado en: Windows 2000, XP y Server 2003
Leer el MBR desde modo usuario es lo más fácil de hacer si sabes desde qué dispositivo leer.
Probado en: Windows 2000, XP y Server 2003
En este ejemplo tratamos con un dispositivo serie existente.
Probado en: Windows 2000, XP y Server 2003
Este es un ejemplo de cómo usar algunas de las funciones de dispositivo de setup. Enumera todos los dispositivos de disco disponibles y obtiene la propiedad del dispositivo. Ejecútalo desde la línea de comandos.
Probado en: Windows 2000, XP y Server 2003
Cómo hacer un beep con el altavoz del sistema.
Probado en: Windows NT4.0+sp6, 2000, XP y Server 2003
Da acceso directo de E/S de puertos a un proceso en modo usuario. Basado en el artículo y el código fuente en C de Dale Roberts.
Probado en: Windows 2000, XP y Server 2003
Este es un ejemplo de cómo encontrar la base de ntoskrnl.exe.
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
Demuestra la comunicación del driver con ReadFile, sin usar ninguno de los métodos. Y cómo usar SEH en ring0.
Probado en: Windows 2000, XP y Server 2003
El driver en modo kernel más simple posible que no hace absolutamente nada.
Probado en: Windows 2000, XP y Server 2003
El código esqueleto para un controlador de dispositivo en modo kernel de Windows NT.
Probado en: Windows 2000, XP y Server 2003
Demuestra la comunicación del driver con DeviceIoControl, usando el método con búfer. Y cómo traducir direcciones virtuales.
Probado en: Windows 2000, XP y Server 2003
Este ejemplo te permite conocer el IRQL y el contexto de Proceso/Hilo en el que se están ejecutando las rutinas principales del driver. Usa DebugView (www.sysinternals.com) para ver su salida.
Probado en: Windows 2000, XP y Server 2003
Documentación de Windows Driver Kit (WDK) Versión 7.1.0: https://www.microsoft.com/en-us/download/details.aspx?id=11800
Documentación de WDK: https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Manual combinado para desarrolladores de software de arquitecturas Intel 64 y IA-32: Volúmenes 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D y 4
Filtración del código fuente de Windows 2003, WRK, CRK ...
Libro Undocumented Windows NT de Prasad Dabak, Sandeep Phadke y Milind Borate
Libro Windows Kernel Programming de Pavel Yosifovich
Libros Windows Internals de Mark Russinovich, David A. Solomon y otros
(libro) The Rootkit Arsenal 2nd de Bill Blunden
(libro) What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager de Enrico Martignetti
(libro) Subverting the Windows Kernel
(libro) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev (comunidad para personas interesadas en el desarrollo de SO)
github/gist aleatorios, OSR, phrack, uninformed, openrce, kernelmode, rootkit.com, arteam...