注入DX游戏并使游戏空闲

Posted

技术标签:

【中文标题】注入DX游戏并使游戏空闲【英文标题】:Injecting to a DX game and make game idle 【发布时间】:2014-11-19 17:01:14 【问题描述】:

我有一个要注入 DX 游戏的 DLL。在 DLL 中,我禁用 XInput、原始输入以及 WndProc 的子类以过滤一堆输入消息,如 WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_INPUT 等。使用 XInputEnable(FALSE) 禁用 XInput 并使用 RIDEV_REMOVE 标志注册原始设备。

虽然它适用于某些游戏,但并不适用于所有游戏。某些游戏仍然有鼠标移动/悬停输入,当我移动时我可以看到某些 UI 的悬停状态。

我的问题是我错过了什么?游戏是否可以通过其他方式捕获输入?

谢谢。

【问题讨论】:

【参考方案1】:

我可以想到应用程序仍可能接收鼠标输入的这些可能方式:

它重新启用原始输入通知 除您之外的子类窗口正在接收消息 正在轮询GetCursorPos 使用 Windows HID API 或其他用户模式界面访问鼠标设备 使用SetWindowsHookEx 挂钩鼠标事件或窗口消息

可能还有其他的,但目前我能想到的就这些了。

【讨论】:

听起来游戏可以创建另一个线程并轮询输入。有没有办法解决这个问题?除了 SuspendThread :-) 它不必创建另一个线程来使用GetCursorPos。它可以在用于渲染的同一线程中每帧调用一次。 所以这发生在游戏循环中。你知道有什么方法可以禁用它吗?对我来说听起来不可能。 您可以挂钩 GetCursorPos 并让它返回一些其他值。如何做到这一点是另一个问题:***.com/questions/873658/… 好吧,这不是不可能的。但不是很实用,因为它需要替换系统 DLL。

以上是关于注入DX游戏并使游戏空闲的主要内容,如果未能解决你的问题,请参考以下文章

将注入进行到底:利用Mono注入C#游戏脚本

网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒

c_cpp 游戏代码注入

某游戏公司后台数据库SQL注入事件分析

游戏漏洞基于CE的AutoAssemble LUA注入

如何将代码注入现有的 Apk?