
# Terminador de procesos en modo kernel mediante un controlador BYOVD firmado. Funciona en todos los Windows 10/11. Sin offsets, sin PDB. Rust.
Un terminador de procesos de Windows multiversión. Carga un controlador kernel firmado de HONOR (MonProcessEX.sys), resuelve el PID de cada proceso objetivo y lo termina desde el contexto del kernel mediante un único IOCTL. Sin offsets de kernel, sin descargas de PDB, sin shellcode específico de compilación: la técnica funciona de forma idéntica en todas las compilaciones de Windows 10 y Windows 11.
La herramienta es un único ejecutable autocontenido. Instala el controlador a través del Administrador de Control de Servicios (SCM), realiza la terminación y luego detiene y elimina el servicio, sin dejar ningún artefacto persistente. Los objetivos son configurables en tiempo de ejecución mediante un archivo de configuración, la línea de comandos o los valores predeterminados integrados.
Multiversión por diseño. Un controlador, un IOCTL, una primitiva de terminación. Funciona en todas las compilaciones de Windows 10 y Windows 11.
1. Mantén moncrush.exe y MonProcessEX.sys en la misma carpeta.
2. Ejecuta desde un shell elevado.
moncrush.exe -n "notepad.exe,calc.exe"
3. Los objetivos mueren. El controlador se descarga solo. Listo.
Sin toolchain, sin offsets, sin paso de compilación.
| Característica | Detalles |
|---|---|
| Multiversión | Funciona en todas las compilaciones de Windows 10 y Windows 11, sin offsets |
| Terminación en modo kernel | El controlador termina el PID desde el contexto del kernel |
| Bypass de PPL | La ruta de terminación de MonProcessEX.sys evita las comprobaciones de procesos protegidos |
| Controlador firmado | MonProcessEX.sys es un controlador real firmado de HONOR |
| No está en las reglas de bloqueo de MS | Ausente de las reglas de bloqueo de controladores vulnerables de Microsoft |
| Autosuficiente | El controlador se instala, inicia y limpia mediante SCM |
| Cero dependencias | Binario Rust estático; coloca exe + controlador y ejecuta |
| Configurable | targets.conf o -n, sin necesidad de recompilar |
| Ofuscado | La ruta del dispositivo y la lista de objetivos están cifradas en reposo |
| Ejecutable único | Un solo binario; salida de consola desde un shell, silencioso al hacer doble clic |
| Modo de prueba | Enumera objetivos y PIDs antes de comprometerse |
| Bucle con jitter | --repeat vuelve a comprobar con intervalo aleatorio |
| Códigos de salida + JSON | Interfaz de automatización compatible con C2 |
+-------------------------------------------------------------------------------------------+
| MODO USUARIO |
| |
| moncrush.exe |
| |
| +-------------------+ +-------------------+ +---------------------+ |
| | enumerar todos | | resolver PID | | comparar contra | |
| | los procesos | -> | objetivo vía | -> | la lista de | |
| | en ejecución | | entrada de | | objetivos, | |
| | | | proceso | | recopilar PIDs | |
| +-------------------+ +-------------------+ +----------+----------+ |
| | |
| CreateFileW("\.\MonProcessEX") | |
| DeviceIoControl(IOCTL 0x22400C) | |
| salida = estado de terminación v |
+-------------------------------------------------------------------------------------------+
| MODO KERNEL |
| |
| MonProcessEX.sys controlador kernel firmado HONOR|
| +---------------------------------------------------------------------------------+ |
| | | |
| | IOCTL 0x22400C -> despacho de terminación de PID | |
| | | | |
| | | búsqueda de proceso en modo kernel | |
| | v | |
| | EPROCESS localizado -> terminado desde el contexto del kernel | |
| | | | |
| | v | |
| | se invoca la ruta de salida del proceso | |
| | | |
| +---------------------------------------------------------------------------------+ |
| |
| LIMPIEZA |
| +---------------------------------------------------------------------------------+ |
| | El servicio SCM se detiene y elimina | |
| | el controlador se descarga, sin artefacto persistente | |
| +---------------------------------------------------------------------------------+ |
+-------------------------------------------------------------------------------------------+
El controlador expone un IOCTL de terminación que finaliza un proceso dado su PID. El componente en modo usuario enumera los procesos en ejecución, resuelve el PID de cada objetivo y lo envía a través de la interfaz del dispositivo. No se tocan estructuras del kernel desde el modo usuario, por lo que la técnica es inmune a los cambios de versión de Windows.
cargo build --release --target x86_64-pc-windows-gnu
El perfil de release habilita LTO y una única unidad de generación de código. El proyecto es autocontenido con su propia declaración [workspace].
moncrush.exe [opciones]
-s, --silent suprime toda la salida de consola
-r, --repeat sigue ejecutándose, vuelve a comprobar objetivos
-d, --dry-run enumera objetivos sin terminar
-j, --json salida JSON legible por máquina
-l, --list imprime los nombres de los objetivos y sale
-v, --version imprime la versión y sale
-x, --self-destruct se elimina a sí mismo tras una ejecución exitosa
--no-check omite las comprobaciones de VM y depurador
--delay <ms> duerme antes de ejecutar
--jitter <ms> aleatoriza el intervalo de repetición
--max-attempts <n> se detiene tras n pasadas de terminación (0=infinito)
--svc <name> nombre de servicio personalizado
--driver <path> ruta personalizada del archivo del controlador
-n, --names <csv> anulación de la lista de objetivos separada por comas
-c, --config <path> carga objetivos desde un archivo de configuración
-h, --help muestra esta ayuda
Códigos de salida: 0 correcto, 2 sin objetivos, 3 fallo del controlador, 5 aborto del entorno. Orden de resolución de objetivos: --names > --config > targets.conf (disco) > valores predeterminados integrados.
--no-check al probar dentro de una VM.--delay <ms> duerme antes de hacer cualquier cosa, rompiendo la correlación temporal con la ejecución inicial.-x elimina el ejecutable y purga su entrada de Prefetch tras una ejecución exitosa.La lista de objetivos es totalmente configurable sin recompilar:
Archivo de configuración. Coloca un targets.conf junto al ejecutable, con un nombre de proceso por línea. Las líneas que comienzan con # se ignoran:
MsMpEng.exe
csfalconservice.exe
SentinelAgent.exe
cortex_agent.exe
Se incluye una plantilla como targets.example.conf.
Línea de comandos. moncrush.exe -n "MsMpEng.exe,csfalconservice.exe"
Valores predeterminados integrados. Sin configuración y sin banderas, el conjunto integrado es:
MIT. Consulta LICENSE.
Este proyecto se publica únicamente para investigación y pruebas autorizadas. Cargar controladores sin firmar o vulnerables en un sistema que no posees es ilegal en la mayoría de las jurisdicciones. Eres responsable del cumplimiento de todas las leyes aplicables y del alcance de autorización de los sistemas que pruebes.