
Casos de uso de investigación BYOVD que presentan metodología de descubrimiento de controladores vulnerables e ingeniería inversa. (CVE-2025-52915, CVE-2025-1055, CVE-2026-3609, CVE-2026-8501).
BYOVD es una colección de PoCs que demuestran cómo se pueden explotar controladores vulnerables para deshabilitar soluciones AV/EDR.
La colección incluye tanto controladores no documentados como aquellos con cobertura existente en LOLDDrivers o en las reglas de bloqueo de controladores recomendadas por Microsoft.
Desde su descubrimiento inicial, el controlador TfSysMon se ha añadido a LOLDrivers y ha sido abusado por grupos de ransomware mediante la herramienta EDRKillShifter, según lo informado por Sophos y ESET
La técnica BYOVD ha ganado popularidad recientemente en la seguridad ofensiva, particularmente con el lanzamiento de herramientas como el Terminator de SpyBoy (vendido por $3,000) y el proyecto ZeroMemoryEx Blackout. Estas herramientas aprovechan controladores vulnerables para deshabilitar agentes AV/EDR, facilitando ataques posteriores al reducir la detección.
Este repositorio contiene varios PoCs desarrollados con fines educativos, que ayudan a los investigadores a comprender cómo se pueden abusar de estos controladores para terminar procesos.
El proyecto está organizado como un workspace de Rust Cargo. La mayoría de los PoCs comparten una biblioteca común (byovd-lib) que maneja el código repetitivo: ciclo de vida del servicio del controlador, despacho de IOCTL, monitoreo de procesos, ajuste de privilegios y limpieza. Cada killer es un binario ligero (~50-100 líneas) que solo define su configuración específica del controlador. K7Terminator, Astra64-Killer, Ktapi-Killer y Xhunter1-Killer son independientes — tienen sus propias declaraciones [workspace] y se compilan directamente desde sus propios directorios, no a través del workspace raíz.```
BYOVD/
├── Cargo.toml # Workspace root (deps + release profile)
├── Cargo.lock
├── README.md
├── LICENSE
│
├── byovd-lib/ # Shared library
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs # DriverConfig trait + run() / send_ioctl() / run_monitor()
│ ├── service.rs # ByovdDriver -- SCM lifecycle (install/start/stop_and_delete)
│ ├── device.rs # DeviceHandle -- 5 typed IOCTL dispatch shapes
│ ├── handle.rs # WinHandle / ScHandle -- RAII handle wrappers (Send + Sync)
│ ├── process.rs # find_pid_by_name / find_all_pids_by_name
│ ├── monitor.rs # run_monitor_loop (closure-based) + setup_ctrlc_handler
│ ├── privilege.rs # enable_privilege / ensure_running_as_local_system
│ └── util.rs # to_wstring / to_cstring / get_current_dir
│
├── AppRemover-Killer/ # OPSWAT AppRemover ardrv.sys
├── Astra64-Killer/ # EnTech Astra32 / TVicHW astra64.sys -- standalone, data-only Shadow SSDT hijack EDR killer
├── BdApiUtil-Killer/ # Baidu BdApiUtil64 (CVE-2024-51324)
├── CcProtect-Killer/ # CnCrypt CcProtect
├── EnPortv-Killer/ # EnCase EnPortv
├── GameDriverX64-Killer/ # Fedeen GameDriverX64 (CVE-2025-61155)
├── GoFlyDrv-Killer/ # Golink GoFlyDrv
├── HNOs2Ec-Killer/ # HONOR PCManager HNOs2Ec.sys
├── HWAudioOs2Ec-Killer/ # Huawei Audio driver HWAudioOs2Ec.sys
├── K7Terminator/ # K7 RKScan -- standalone, LPE + BYOVD modes
├── Ksapi64-Killer/ # Kingsoft ksapi64
├── Ktapi-Killer/ # Kontron ktapi.sys -- standalone, two-stage shellcode EDR killer
├── MonProcess-Killer/ # HONOR HnRSMService MonProcess.sys
├── MonProcessEX-Killer/ # HONOR MagicAnimation and HONOR PCManager MonProcessEX.sys
├── NSec-Killer/ # NSEC NSecKrnl (ValleyRAT BYOVD reproduction)
├── PCTcore64-Killer/ # PC Tools PCTcore64 (CVE-2026-8501)
├── PoisonX-Killer/ # Microsoft PoisonX (j3h4ck reproduction)
├── STProcessMonitor-Killer/ # Safetica STProcessMonitor (CVE-2025-70795, v114 + v2618)
├── TfSysMon-Killer/ # ThreatFire sysmon
├── UnknownKiller/ # unattributed unknown.sys
├── Viragt64-Killer/ # Tg Soft viragt64
├── Wsftprm-Killer/ # Topaz wsftprm (CVE-2023-52271)
├── Xhunter1-Killer/ # Wellbia xhunter1.sys (CVE-2026-3609)
└── Xkpsm-Killer/ # JiranJikyosoft X-Keeper xkpsm
Cada directorio `*-Killer/` contiene su propio `Cargo.toml`, `src/main.rs` (la implementación de `DriverConfig` + CLI), `README.md` (hashes del driver + uso) y el archivo `.sys` correspondiente que el binario carga en tiempo de ejecución.
## 🔧 Compilación
**Requisitos previos:** Cadena de herramientas de Rust y Visual Studio Build Tools con el Windows SDK.```bash
# Build all tools (release, optimized + stripped)
cargo build --release
# Build a single tool
cargo build --release -p BdApiUtil-Killer
# Build multiple specific tools
cargo build --release -p NSec-Killer -p Wsftprm-Killer
Binarios se generan en target/release/. Copie el archivo de controlador .sys correspondiente al mismo directorio que el ejecutable antes de ejecutarlo.
byovd-lib es la biblioteca compartida sobre la que se construyen todos los PoCs (excepto K7Terminator). Expone dos APIs complementarias: una declarativa de alto nivel para el flujo estándar de "instalar controlador, matar al verlo, limpiar", y una imperativa de bajo nivel para killers que necesitan un flujo personalizado (adjuntarse a un controlador ya cargado, distribuirse a múltiples PIDs, buffers IOCTL estructurados, lógica de reintento personalizada, etc.). Ambas pueden combinarse en el mismo binario.
byovd-lib/src/ ├── lib.rs # DriverConfig trait + run() / send_ioctl() / run_monitor() ├── service.rs # ByovdDriver -- SCM lifecycle (install, start, stop_and_delete) ├── device.rs # DeviceHandle -- typed IOCTL dispatch (5 shapes) ├── handle.rs # WinHandle / ScHandle -- RAII handle wrappers (Send + Sync) ├── process.rs # find_pid_by_name / find_all_pids_by_name ├── monitor.rs # run_monitor_loop (closure-based) + setup_ctrlc_handler ├── privilege.rs # enable_privilege / ensure_running_as_local_system └── util.rs # to_wstring / to_cstring / get_current_dir
### API de alto nivel: trait `DriverConfig` + `run()`
Esto es lo que usan los killers incluidos. Implementa el trait, llama a `byovd_lib::run()` y listo.```rust
use byovd_lib::{DriverConfig, Result};
use clap::Parser;