按键驱动可过大部分游戏DX游戏键鼠模拟脚本

其他编程 2020-07-26 15:46:25

按键驱动可过大部分游戏DX游戏键鼠模拟脚本

其中 R3的方法有:
1. keybd_event/mouse_event,SendInput
keybd_event/mouse_event 内部其实是调用了SendInput。,所发消息是发给Active window的。 发消息之前需要将窗口置顶。

2. SendMessage/PostMessage
SendMessage和PostMessage是User32.dll中的函数。可以直接在程序中调用,实现对另一个软件上的按钮的点击。给窗口句柄发送消息,不需要窗口是处于顶层。
也就所谓的后台键鼠消息。
以上消息模拟,针对游戏来说大多没用或被检测。很多游戏都用DirectX ,利用DirectInput绕过Windows的消息机制直接和硬件打交道来接收按键信息的。这时候要在模拟键鼠消息就 只有注入游戏进程拦截DirectInput过滤API。比如大漠后台就这样实现的。可惜注入手法太low,基本没戏。因此要模拟Dx游戏键鼠消息只能使用驱动级别的模拟按键。不过驱动按键是全局的 不能像注入DX 过滤那样可以后台。
接下来说说R0/驱动层的模拟按键方式
1. 首先比较老牌的winIO/winR0库.通过PS/2 的0x60,0x64端口发送键鼠消息。可惜只支持老式的P/2圆头鼠标,没有PS/2真实键鼠,系统开机bios识别不到,就不会加载系统的i8042prt.sys;当然也无法模拟了,虚拟机的bios版本是自己的,开机自带i8042prt.sys。但虚拟机只能模拟键盘,不能模拟winIO鼠标。
2. 接下来再说说能兼容PS/2和USB的驱动模拟。
通过系统的kbclass和mouclass还有hidusb定位MouseClassServiceCallback和KeyboardClassServiceCallback。可以通过这两个API call键鼠的结构体发送消息。
驱动公开用最多的也是这种模拟方式。在hidusb设备堆栈底层了,游戏要检测也很容易,作者有次调试某游戏的时候发现TP 在hidusb设备栈低上面几层call了一个检测函数,按键消息拦截进自己进程之后再从KeyboardClassServiceCallback call出来,这检测也是没谁了。怎么突破这类检测,那就hidusb设备栈顶模拟呗。
3,接下来再说说以往论坛少有人提及的按键模拟方式,替换键鼠设备的派遣函数也就hidusb栈顶自上而下模拟按键消息。还有HID真实设备模拟,之前看有小白说什么总线模拟,其实这定义很模糊,瞎扯淡的,反正随意玩,没有模拟不了的。第一次发帖给小伙伴留个福利吧。驱动级的按键消息模拟,没验证的。