La técnica de protección de emulación de entrada con herramientas de automatización como AutoIt o ACTools utilizado en la mayoría de los programas de bot de juegos simples es SetWindowsHookEx usa las marcas WH_KEYBOARD_LL . Esta solución no es una bala de plata y (por ejemplo) el software del bot puede usar el controlador PS / 2 para emular la entrada de hardware. Es esta pregunta, asumamos que el problema PS / 2 ya se ha resuelto.
WH_KEYBOARD_LL instala un procedimiento de enlace que supervisa los eventos de entrada de teclado de bajo nivel. Para obtener más información, consulte el LowLevelKeyboardProc procedimiento de gancho .
WH_KEYBOARD_LL se usa (en lugar de WH_KEYBOARD) solo por LowLevelKeyboardProc contiene un puntero a KBDLLHOOKSTRUCT con banderas de eventos inyectados, código de contexto y bandera de estado de transición. El código de protección de muestra es bastante simple:
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);
Pero si la aplicación usa este código, debería estar en todo el sistema.
Preguntas:
- ¿Hay alguna forma de limitar esto a una aplicación específica?
- ¿Hay alguna otra forma de evitar la emulación de entrada en una aplicación específica?