
커널 모드 프로세스 종료기로, 서명된 BYOVD 드라이버를 사용합니다. 모든 Windows 10/11에서 작동합니다. 오프셋 없음, PDB 없음. Rust.
크로스 버전 Windows 프로세스 종료기. 서명된 HONOR 커널 드라이버(MonProcessEX.sys)를 로드하고, 모든 대상 프로세스의 PID를 확인한 뒤, 단일 IOCTL을 통해 커널 컨텍스트에서 프로세스를 종료한다. 커널 오프셋도, PDB 다운로드도, 빌드별 셸코드도 필요 없다 — 이 기법은 모든 Windows 10 및 Windows 11 빌드에서 동일하게 작동한다.
이 도구는 단일 자체 포함 실행 파일이다. Service Control Manager를 통해 드라이버를 설치하고, 종료를 수행한 뒤, 서비스를 중지 및 삭제하여 영구적인 흔적을 남기지 않는다. 대상은 런타임에 설정 파일, 명령줄 또는 내장 기본값을 통해 구성할 수 있다.
설계부터 크로스 버전. 하나의 드라이버, 하나의 IOCTL, 하나의 종료 프리미티브. 모든 Windows 10 및 Windows 11 빌드에서 작동한다.
1. Keep moncrush.exe and MonProcessEX.sys in the same folder.
2. Run from an elevated shell.
moncrush.exe -n "notepad.exe,calc.exe"
3. Targets die. Driver unloads itself. Done.
툴체인도, 오프셋도, 빌드 단계도 필요 없다.
| 기능 | 세부 사항 |
|---|---|
| 크로스 버전 | 모든 Windows 10 및 Windows 11 빌드에서 작동, 오프셋 불필요 |
| 커널 모드 종료 | 드라이버가 커널 컨텍스트에서 PID를 종료 |
| PPL 우회 | MonProcessEX.sys 종료 경로가 보호된 프로세스 검사를 우회 |
| 서명된 드라이버 | MonProcessEX.sys는 실제 서명된 HONOR 드라이버 |
| MS 차단 규칙에 없음 | Microsoft의 취약한 드라이버 차단 규칙에 포함되지 않음 |
| 자급자족 | SCM을 통해 드라이버 설치, 시작 및 정리 |
| 의존성 제로 | 정적 Rust 바이너리; exe + 드라이버를 배치하고 실행 |
| 구성 가능 | targets.conf 또는 -n, 재컴파일 불필요 |
| 난독화 | 디바이스 경로와 대상 목록이 저장 시 암호화됨 |
| 단일 실행 파일 | 하나의 바이너리; 셸에서는 콘솔 출력, 더블 클릭 시 무음 |
| 드라이런 모드 | 실행 전에 대상 및 PID 열거 |
| 지터 루프 | --repeat가 무작위 간격으로 재확인 |
| 종료 코드 + JSON | C2 친화적 자동화 인터페이스 |
+-------------------------------------------------------------------------------------------+
| USER MODE |
| |
| moncrush.exe |
| |
| +-------------------+ +-------------------+ +---------------------+ |
| | enumerate all | | resolve target | | match against | |
| | running | -> | PID via process | -> | target list, | |
| | processes | | entry | | collect PIDs | |
| +-------------------+ +-------------------+ +----------+----------+ |
| | |
| CreateFileW("\.\MonProcessEX") | |
| DeviceIoControl(IOCTL 0x22400C) | |
| output = termination status v |
+-------------------------------------------------------------------------------------------+
| KERNEL MODE |
| |
| MonProcessEX.sys signed HONOR kernel driver |
| +---------------------------------------------------------------------------------+ |
| | | |
| | IOCTL 0x22400C -> PID termination dispatch | |
| | | | |
| | | kernel-mode process lookup | |
| | v | |
| | EPROCESS located -> terminated from kernel context | |
| | | | |
| | v | |
| | process exit path invoked | |
| | | |
| +---------------------------------------------------------------------------------+ |
| |
| CLEANUP |
| +---------------------------------------------------------------------------------+ |
| | SCM service stopped and deleted | |
| | driver unloaded, no persistent artifact | |
| +---------------------------------------------------------------------------------+ |
+-------------------------------------------------------------------------------------------+
드라이버는 PID가 주어지면 프로세스를 종료하는 종료 IOCTL을 노출한다. 사용자 모드 구성 요소는 실행 중인 프로세스를 열거하고, 각 대상의 PID를 확인한 뒤, 디바이스 인터페이스를 통해 제출한다. 사용자 모드에서 커널 구조체를 건드리지 않으므로, 이 기법은 Windows 버전 변경에 영향을 받지 않는다.
cargo build --release --target x86_64-pc-windows-gnu
릴리스 프로필은 LTO와 단일 코드젠 유닛을 활성화한다. 이 프로젝트는 자체 [workspace] 선언을 포함한 자체 포함형이다.
moncrush.exe [options]
-s, --silent suppress all console output
-r, --repeat keep running, re-check targets
-d, --dry-run enumerate targets without killing
-j, --json machine-readable JSON output
-l, --list print target names and exit
-v, --version print version and exit
-x, --self-destruct delete self after successful run
--no-check skip VM and debugger checks
--delay <ms> sleep before executing
--jitter <ms> randomize repeat interval
--max-attempts <n> stop after n kill passes (0=infinite)
--svc <name> custom service name
--driver <path> custom driver file path
-n, --names <csv> comma-separated target list override
-c, --config <path> load targets from config file
-h, --help show this help
종료 코드: 0 정상, 2 대상 없음, 3 드라이버 실패, 5 환경 중단. 대상 확인 순서: --names > --config > targets.conf (디스크) > 내장 기본값.
--no-check로 우회한다.--delay <ms>는 아무것도 하기 전에 대기하여 초기 실행과의 시간 상관관계를 깨뜨린다.-x는 성공적인 실행 후 실행 파일을 삭제하고 해당 Prefetch 항목을 제거한다.대상 목록은 재컴파일 없이 완전히 구성할 수 있다:
설정 파일. 실행 파일 옆에 targets.conf를 배치하고, 한 줄에 하나의 프로세스 이름을 넣는다. #으로 시작하는 줄은 무시된다:
MsMpEng.exe
csfalconservice.exe
SentinelAgent.exe
cortex_agent.exe
템플릿은 targets.example.conf로 제공된다.
명령줄. moncrush.exe -n "MsMpEng.exe,csfalconservice.exe"
내장 기본값. 설정도 플래그도 없으면 내장 세트는 다음과 같다: