Quello della tecnica di protezione dell'emulazione di input con strumenti di automazione come AutoIt o ACTools usato la maggior parte dei semplici programmi bot del gioco è SetWindowsHookEx utilizzo WH_KEYBOARD_LL flags. Questa soluzione non è Silver bullet e (ad esempio) il software bot può utilizzare il driver PS / 2 per emulare l'input hardware. Questa domanda presuppone che il problema PS / 2 sia già stato risolto.
WH_KEYBOARD_LL installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure.
WH_KEYBOARD_LL è usato (invece di WH_KEYBOARD) a causa di solo LowLevelKeyboardProc contiene il puntatore a KBDLLHOOKSTRUCT con flag iniettati da eventi, codice di contesto e flag di stato di transizione. Il codice di protezione di esempio è abbastanza semplice:
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) {
if (code < 0)
return CallNextHookEx(_hookKeybrd, code, wParam, lParam);
KBDLLHOOKSTRUCT& ll = *(KBDLLHOOKSTRUCT*)lParam;
if (ll.flags & LLKHF_INJECTED)
return 1; //emulation case
return CallNextHookEx(_hookKeybrd, code, wParam, lParam);
}
...
SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(NULL), 0);
Ma se l'applicazione utilizza questo codice, potrebbe essere esteso al sistema.
Domande:
- Se esiste un modo per limitarlo a un'applicazione specifica?
- Esistono altri modi per impedire l'emulazione di input in un'applicazione specifica?