我正在用C#编写一款程序,该程序正在连接到另一个进程并从该进程中读取内存等信息。我正在寻找一种方法来模拟鼠标在该进程中的移动,但是该进程特别阻止PostMessage、SendMessage等方法。我试图避免注入或内存写入,因此这些都不是可行的选择。有人告诉我最好的方法是创建一个虚拟鼠标驱动程序并将其钩子到另一个进程上。还有其他什么方法可以实现吗?如果要钩子一个虚拟鼠标驱动程序,我应该如何操作?
使用类似于AutoHotkey这样的单独程序来驱动鼠标移动可行吗?因为那是我会做的事情。
我不确定你的目标程序是什么,但我见过一些很酷的解决方案,可以绕过阻止PostMessage的游戏(这些游戏不会被提及 ;p)。
我不知道挂钩虚拟鼠标驱动程序是否有效。我之前听说过这种方法,但我的感觉是,如果PostMessage被阻止了,那么这将是徒劳的。难道鼠标驱动程序不是使用标准的Windows消息向游戏窗口发送消息吗?
我见过开发人员阻止PostMessage/SendMessage的最常见方法是从系统文件夹中复制Windows DLL,并将其与游戏一起分发(我想知道这是否合法?)。由于DLL加载了本地到游戏地址空间的函数,因此游戏可以通过确保调用者也是本地到游戏地址空间来阻止其他进程访问这些函数。
一个简单的绕过方法是将DLL注入到游戏进程中并挂钩它们的函数。然而,开发人员对这种方法非常熟悉,仍然可以通过在函数入口处执行某些检查来阻止您的调用(我不确定这些检查是什么)。据我所知,然后绕过此检查的简单方法是自己定义PostMessage函数的前几个字节,然后跳转到PostMessage中检查之后的某个点。
我不想再详细阐述了,因为我正在讨论的是相当具体和非常深入的话题,而且并不真正针对 Stack Overflow 上的人。
我提到的所有这些东西都是我从浏览各种游戏黑客论坛中获得的基本思想--那些地方是寻找这种问题的好去处。游戏黑客社区对他们的信息非常紧密,但经过足够长的时间,每个人都愿意分享他们的方法 :)