我正在努力开发一种反作弊系统。系统将通过识别在Windows中使用各种键盘/鼠标输入API(如SendInput,keybd_event,mouse_event和SetKeyboardState)的应用程序来工作。所有应用程序都要与系统允许调用这些函数的应用程序数据库进行比较。
为此,我需要知道是否有任何方法可以监控对某些WinAPI函数的调用。
我还需要监控对SetWindowsHookEx的调用。
答案 0 :(得分:3)
keybd_event
和mouse_event
都使用了SendInput
。虽然您可以将用户模式DLL注入所有进程并挂钩这些API,但这并不是大多数反作弊系统的工作方式,因为它很容易被破坏(例如通过使用蹦床)。
通常,希望监控/绕过这些API的反作弊程序会进一步降低。例如,他们会挂钩NtSendUserInput
系统调用。 GameGuard
是挂钩SendInput
和NtSendUserInput
的系统示例。
在编写反作弊系统时,您必须首先意识到,您可能会认为您的代码很容易被攻击者破坏或操纵。您谈到与应用程序数据库进行比较。也许您打算通过文件路径执行此操作,您可以通过GetProcessImageFileName获得该文件路径。然后你需要考虑如何阻止攻击者注入DLL以挂接你对该API的调用,甚至可能加载一个挂钩的驱动程序。
作弊与反作弊的来回游戏是无穷无尽的,不断变化(更新代码签名,骗子重新编译不同的启发式,你挂钩用户模式,他们蹦床,你挂钩内核模式,他们加载驱动程序到蹦床等)如果你问这样的问题,你可能更适合购买解决方案,而不是试图自己推出。