
Depurador de kernel similar a SoftICE para Windows 11
BugChecker es un depurador de kernel y modo usuario similar a SoftICE para Windows 11 (y también para Windows XP: soporta versiones de Windows desde XP hasta 11, tanto x86 como x64). BugChecker no requiere una segunda máquina conectada al sistema que se está depurando, como en el caso de WinDbg y KD. Esta versión de BugChecker (a diferencia de la versión original desarrollada hace 20 años) aprovecha la API KD interna y no documentada de NTOSKRNL. La API KD permite a WinDbg/KD realizar llamadas como leer/escribir memoria virtual, leer/escribir registros, colocar un punto de interrupción en una dirección, etc.
Por el contrario, el BugChecker original, al igual que SoftICE, solía "tomar el control" del sistema, enganchando varias API del kernel (tanto exportadas como privadas), tomando el control del APIC, enviando IPI, etc. Este enfoque aumenta la complejidad exponencialmente (y reduce la estabilidad del sistema), ya que la implementación debe ser compatible con todas las versiones y subversiones de Windows compatibles (a nivel de firma de funciones), así como con todas las configuraciones de hardware compatibles posibles. Además, 20 años después, PatchGuard hace que esta solución sea imposible.
Por el contrario, esta versión de BugChecker, al interceptar llamadas a KdSendPacket y KdReceivePacket en el kernel, se presenta a la máquina depurada como un segundo sistema que ejecuta un depurador de kernel externo, pero, en realidad, todo sucede en la misma máquina. Normalmente esto se logra reemplazando KDCOM.DLL (que es el módulo que implementa la comunicación por cable serie para la API KD en Windows) e iniciando el sistema en modo de depuración de kernel. Este enfoque (inspirado en VirtualKD) reduce la complejidad y aumenta la estabilidad y compatibilidad (y portabilidad, por ejemplo, a ARM - y modularidad, ya que las capacidades de depuración de bajo nivel se implementan detrás de KdXxxPacket y podrían reemplazarse con una implementación personalizada). Además, la presencia de un depurador de kernel en el arranque (aunque "falso") hace que Windows deshabilite PatchGuard.
Por el momento, BugChecker requiere un teclado PS/2 para entrada y un framebuffer lineal para escribir su salida. Tenga en cuenta que el teclado incorporado de muchos portátiles modernos sigue siendo PS/2.
Demostración de BugChecker en Windows 11 22H2, dentro de VirtualBox 7.0.4. Se escribe una condición de punto de interrupción en JavaScript que cambia el flujo de ejecución en un hilo de modo usuario.
BugChecker ejecutándose en un entorno muy limitado: una Raspberry Pi 4 (4GB RAM), a través de QEMU en Windows XP (512MB RAM). Se usa un punto de interrupción para registrar todas las llamadas SYSENTER del modo usuario al kernel. El índice de servicio se almacena en un array de JavaScript.
Ejecutando BugChecker directamente sobre el hardware, en un HP Pavilion Dv2000, un PC antiguo con teclado PS/2. El sistema operativo es Windows 7 Home 32 bits.
Asegúrate de que Secure Boot esté desactivado al instalar y usar BugChecker. Normalmente puedes volver a habilitarlo más tarde. Si usas VMware o VirtualBox, Secure Boot se puede desactivar en la configuración de la máquina virtual.
Considera también habilitar el menú de arranque heredado, si usas Windows 8, 10 u 11, usando el comando: bcdedit /set "{current}" bootmenupolicy legacy. Permite una experiencia más fluida durante el arranque, permitiendo seleccionar la opción de arranque de BugChecker y deshabilitar la aplicación obligatoria de controladores al mismo tiempo.
El primer paso es iniciar Symbol Loader:

Si es necesario, desactiva los controladores de pantalla haciendo clic en el botón "Disable Display Drvs". Lo mismo se puede lograr en el Administrador de dispositivos de Windows. Una vez que los controladores de pantalla se han desactivado, permanecen desactivados incluso después de reiniciar el sistema. Se pueden volver a habilitar en cualquier momento cuando no se use BugChecker.
La cuestión aquí es que BugChecker necesita un framebuffer lineal con un formato de 32 bits por píxel para dibujar su interfaz. Al desactivar los controladores de pantalla, Windows descarta la aceleración de hardware para dibujar su interfaz de usuario y vuelve al modo de compatibilidad VGA. Si se ejecuta en hardware real o VMware, se deben desactivar los controladores de pantalla. Si se ejecuta en VirtualBox, se deben desactivar los controladores de pantalla o configurar el ajuste vm_screen en BugChecker.dat, como se describe a continuación. Si se ejecuta en QEMU, no es necesario desactivar los controladores de pantalla, pero asegúrate de especificar el dispositivo de visualización "-vga std".
Ten en cuenta que el modo de compatibilidad VGA podría limitar la resolución máxima de la pantalla. VMware está limitado a una resolución máxima de 1152x864. QEMU con el dispositivo de visualización "-vga std" no sufre esta limitación.