#![no_std]
#![deny(unsafe_op_in_unsafe_fn)]
#![allow(internal_features)]
#![allow(dead_code)]
#![feature(lang_items)]
extern crate alloc;
mod device;
mod ioctl;
pub mod callbacks;
pub mod filters;
pub mod security;
pub mod forensics;
pub mod detection;
pub mod utils;
use wdk::println;
use wdk_alloc::WdkAllocator;
use wdk_sys::{
DRIVER_OBJECT, NTSTATUS, PCUNICODE_STRING, STATUS_SUCCESS,
WDFDRIVER,
};
#[global_allocator]
static GLOBAL_ALLOCATOR: WdkAllocator = WdkAllocator;
pub const DRIVER_NAME: &str = "Leviathan";
pub const DRIVER_VERSION: &str = env!("CARGO_PKG_VERSION");
pub mod features {
pub const ENABLE_CALLBACKS: bool = true;
pub const ENABLE_MINIFILTER: bool = false; pub const ENABLE_NETWORK_FILTER: bool = false;
pub const ENABLE_ETW: bool = true;
}
#[export_name = "DriverEntry"]
pub unsafe extern "system" fn driver_entry(
driver_object: &mut DRIVER_OBJECT,
registry_path: PCUNICODE_STRING,
) -> NTSTATUS {
wdk_panic::init();
println!("╔══════════════════════════════════════════╗");
println!("║ Leviathan Kernel Driver v{} ║", DRIVER_VERSION);
println!("║ Windows Driver Development in Rust ║");
println!("╚══════════════════════════════════════════╝");
match unsafe { init_driver(driver_object, registry_path) } {
Ok(()) => {
println!("[{}] Driver initialized successfully", DRIVER_NAME);
STATUS_SUCCESS
}
Err(status) => {
println!("[{}] Driver initialization failed: {:#x}", DRIVER_NAME, status);
status
}
}
}
unsafe fn init_driver(
driver_object: &mut DRIVER_OBJECT,
registry_path: PCUNICODE_STRING,
) -> Result<(), NTSTATUS> {
use wdk_sys::{
call_unsafe_wdf_function_binding, WDF_DRIVER_CONFIG, WDF_NO_HANDLE,
WDF_NO_OBJECT_ATTRIBUTES,
};
if features::ENABLE_ETW {
if let Err(e) = unsafe { utils::etw::register() } {
println!("[{}] Warning: ETW registration failed: {:#x}", DRIVER_NAME, e);
}
}
let mut driver_config = WDF_DRIVER_CONFIG {
Size: core::mem::size_of::<WDF_DRIVER_CONFIG>() as u32,
EvtDriverDeviceAdd: Some(device::evt_device_add),
EvtDriverUnload: Some(evt_driver_unload),
DriverInitFlags: 0,
DriverPoolTag: 0,
};
let status = unsafe {
call_unsafe_wdf_function_binding!(
WdfDriverCreate,
driver_object as *mut _,
registry_path,
WDF_NO_OBJECT_ATTRIBUTES,
&mut driver_config,
WDF_NO_HANDLE as *mut WDFDRIVER
)
};
if status != STATUS_SUCCESS {
return Err(status);
}
if features::ENABLE_CALLBACKS {
println!("[{}] Registering kernel callbacks...", DRIVER_NAME);
if let Err(e) = unsafe { callbacks::process::register() } {
println!("[{}] Warning: Process callback failed: {:#x}", DRIVER_NAME, e);
}
if let Err(e) = unsafe { callbacks::thread::register() } {
println!("[{}] Warning: Thread callback failed: {:#x}", DRIVER_NAME, e);
}
if let Err(e) = unsafe { callbacks::image::register() } {
println!("[{}] Warning: Image callback failed: {:#x}", DRIVER_NAME, e);
}
if let Err(e) = unsafe { callbacks::registry::register() } {
println!("[{}] Warning: Registry callback failed: {:#x}", DRIVER_NAME, e);
}
println!("[{}] Kernel callbacks registered", DRIVER_NAME);
}
if features::ENABLE_MINIFILTER {
println!("[{}] Registering filesystem minifilter...", DRIVER_NAME);
}
if features::ENABLE_NETWORK_FILTER {
println!("[{}] Registering network filter...", DRIVER_NAME);
}
println!("[{}] All subsystems initialized", DRIVER_NAME);
Ok(())
}
unsafe extern "C" fn evt_driver_unload(_driver: WDFDRIVER) {
println!("[{}] Driver unloading - cleaning up...", DRIVER_NAME);
if features::ENABLE_NETWORK_FILTER {
unsafe { filters::network::unregister() };
}
if features::ENABLE_MINIFILTER {
unsafe { filters::minifilter::unregister() };
}
if features::ENABLE_CALLBACKS {
unsafe { callbacks::unregister_all_callbacks() };
}
if features::ENABLE_ETW {
unsafe { utils::etw::unregister() };
}
println!("[{}] Driver unloaded successfully", DRIVER_NAME);
}
#[cfg(not(test))]
#[lang = "eh_personality"]
extern "C" fn eh_personality() {}