背景下的鼠标模拟

3
我正在用C#编写一款程序,该程序正在连接到另一个进程并从该进程中读取内存等信息。我正在寻找一种方法来模拟鼠标在该进程中的移动,但是该进程特别阻止PostMessage、SendMessage等方法。我试图避免注入或内存写入,因此这些都不是可行的选择。有人告诉我最好的方法是创建一个虚拟鼠标驱动程序并将其钩子到另一个进程上。还有其他什么方法可以实现吗?如果要钩子一个虚拟鼠标驱动程序,我应该如何操作?

5
你在魔兽世界里无法达到下一个等级了,是吗? - Spencer Ruport
3个回答

0

使用类似于AutoHotkey这样的单独程序来驱动鼠标移动可行吗?因为那是我会做的事情。


嗯,我可以在C#中很好地移动鼠标。我只需要能够在后台窗口上进行操作,同时可以使用另一只鼠标进行其他任务。 - user139767

0

我不确定你的目标程序是什么,但我见过一些很酷的解决方案,可以绕过阻止PostMessage的游戏(这些游戏不会被提及 ;p)。

我不知道挂钩虚拟鼠标驱动程序是否有效。我之前听说过这种方法,但我的感觉是,如果PostMessage被阻止了,那么这将是徒劳的。难道鼠标驱动程序不是使用标准的Windows消息向游戏窗口发送消息吗?

我见过开发人员阻止PostMessage/SendMessage的最常见方法是从系统文件夹中复制Windows DLL,并将其与游戏一起分发(我想知道这是否合法?)。由于DLL加载了本地到游戏地址空间的函数,因此游戏可以通过确保调用者也是本地到游戏地址空间来阻止其他进程访问这些函数。

一个简单的绕过方法是将DLL注入到游戏进程中并挂钩它们的函数。然而,开发人员对这种方法非常熟悉,仍然可以通过在函数入口处执行某些检查来阻止您的调用(我不确定这些检查是什么)。据我所知,然后绕过此检查的简单方法是自己定义PostMessage函数的前几个字节,然后跳转到PostMessage中检查之后的某个点。

我不想再详细阐述了,因为我正在讨论的是相当具体和非常深入的话题,而且并不真正针对 Stack Overflow 上的人。

我提到的所有这些东西都是我从浏览各种游戏黑客论坛中获得的基本思想--那些地方是寻找这种问题的好去处。游戏黑客社区对他们的信息非常紧密,但经过足够长的时间,每个人都愿意分享他们的方法 :)


非常有帮助的帖子。我想这不是针对这里的人,但有人建议我在这里发布,因为你们比大多数人知道得更多。我有一种感觉,这是一个非常复杂的任务,我需要另一个解决方案。 - user139767
我相当确定我已经搞乱了一个从驱动程序直接读取鼠标和键盘输入而不是挂钩Windows API事件的“保护”机制。实现一个虚拟鼠标/键盘驱动程序应该可以解决问题。嗯,我尝试过,但是当涉及到那种极低级别的操作时,我对混乱和缺乏支持感到厌恶。 - Zippo

0
在开发SCAR(RuneScape宏程序)时,开发人员最终不得不在Java文件周围构建一个包装器(称为SMART),并在此包装器内部放置一个“虚拟鼠标”,可以使用基本函数调用进行控制。我不知道如何在C#中实现这一点,但在Java中是可能的。在SMART之前,您只能允许使用鼠标(因此直接移动鼠标)或使用称为“静默鼠标”的东西。静默鼠标钩入java.exe及其JVM中的函数,并控制鼠标输入,就像Kai所描述的那样。但是,正如Kai所描述的那样,这很容易被检测到,因此没有人使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接