Automation 自动化防护

Automation 自动化防护,automation,bots,protection,Automation,Bots,Protection,我们的下一个项目应该是一款基于MS Windows的游戏(用C#编写,带有winform GUI和集成的DirectX显示控件),面向希望将奖品赠送给最佳玩家的客户。这个项目将持续几年,包括锦标赛、阶梯赛、锦标赛、玩家对玩家的比赛等等 这里的一个主要问题是作弊,因为如果一个玩家能够——例如——让一个定制的机器人为他玩游戏(更多的是策略决策,而不是玩很多小时),他将获得巨大的好处 所以我的问题是:我们有什么技术可能性来检测机器人的活动?我们当然可以跟踪播放的小时数,分析检测异常的策略等等,但就这个

我们的下一个项目应该是一款基于MS Windows的游戏(用C#编写,带有winform GUI和集成的DirectX显示控件),面向希望将奖品赠送给最佳玩家的客户。这个项目将持续几年,包括锦标赛、阶梯赛、锦标赛、玩家对玩家的比赛等等

这里的一个主要问题是作弊,因为如果一个玩家能够——例如——让一个定制的机器人为他玩游戏(更多的是策略决策,而不是玩很多小时),他将获得巨大的好处

所以我的问题是:我们有什么技术可能性来检测机器人的活动?我们当然可以跟踪播放的小时数,分析检测异常的策略等等,但就这个问题而言,我更感兴趣的是了解以下细节

  • 如何检测其他应用程序是否定期截图
  • 如何检测另一个应用程序是否扫描我们的进程内存
  • 确定用户输入(鼠标移动、键盘输入)是否由人工生成而非自动生成的好方法有哪些
  • 是否可以检测到另一个应用程序是否请求有关我们应用程序中控件的信息(控件的位置等)
  • 作弊者还可以通过哪些方式收集关于当前游戏状态的信息,将这些信息反馈给机器人,并将确定的动作发送回客户端

非常感谢您的反馈

你应该研究Punkbuster、Valve Anti-Cheat和其他一些反作弊的东西,以获得一些指导


编辑:我的意思是,看看他们是怎么做的;他们是如何检测这些东西的。

只是一个想法,如果“作弊者”在虚拟机(如vmware)中运行您的软件,并对该窗口进行截图,该怎么办?我怀疑你能抵挡得住

很明显,你无法抵御“模拟差距”,例如,骗子的系统使用高质量的摄像头拍摄外部屏幕-我想这只是一个理论问题


也许你应该调查国际象棋网站。国际象棋有很多钱,他们也不喜欢机器人——也许他们已经想出了一个解决方案。

我不知道技术细节,但Intenet国际象棋俱乐部的BlitzIn程序似乎集成了程序切换检测。当然,这是为了检测运行象棋引擎的人,而不是直接适用于您的情况,但是您可以推断出这样的结果:如果进程X在接下来的Y个周期中占用的CPU时间超过Z%,那么它可能是一个机器人在运行

作为竞赛规则的一部分,除了“在玩游戏时不得运行任何其他东西以获得奖品”之外,这一规则可能会起作用

此外,严厉的“我们可能会在任何时候出于任何原因决定您一直在使用机器人并取消您的资格”规则也有助于上述启发式方法(用于有价值的ICC国际象棋比赛)

上述规则1很容易解决所有这些问题:

* how to detect if another application makes periodical screenshots?
* how to detect if another application scans our process memory?
* what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated?
* is it possible to detect if another application requests informations about controls in our application (position of controls etc)?

我认为让破解者更难解决这个问题的一个好方法是在服务器中只有游戏状态的权威副本,只向客户端发送和接收更新,这样就可以将通信协议本身嵌入客户端验证(它还没有被破解,因此检测规则仍然存在)。这样,积极监控发现的新的奇怪行为可能会让你接近你想要的位置。

防止自动化的最好方法是不要有需要研磨的任务

也就是说,检测自动化的最佳方法是积极地让用户参与,并要求定期进行类似验证码的测试(除了没有图像等)。我建议使用一个包含数千个简单一次性问题的数据库,这些问题每隔一段时间就会向用户提出


然而,基于你的问题,我认为你最好不要在C#中实现反自动化功能。你几乎不可能从托管代码中检测到编写良好的黑客/机器人,尤其是当黑客所要做的只是进入ring0以避免通过任何标准方法被检测到时。我推荐一个像approa这样的管理员ch(可下载的模块,您可以随时更新)与内核模式驱动程序相结合,该驱动程序钩住所有windows API函数并监视它们是否“不合适”呼叫。但是,请注意,您将遇到许多误报,因此您不需要将禁止系统建立在自动数据的基础上。在禁止之前,请始终对其进行人工检查。

我对PunkBuster和此类软件战的工作原理没有更深入的了解,但我会这样做:

IIINTERCEPT调用处理内存的API函数,如ReadProcessMemoryWriteProcessMemory

您可以检测您的进程是否参与了调用,记录它,并将调用返回到原始函数

这应该也适用于截图,但您可能希望截取BitBlt函数

以下是有关函数拦截的基本教程:

我不久前写了d2botnet,一个.net diablo 2自动化引擎,你可以在你的列表中添加一些需要注意的东西,就是格式错误/无效/伪造的数据包。我假设这个游戏将通过TCP进行通信。数据包嗅探和伪造通常是第一种方式的游戏(无论如何在线)我知道暴雪会检测到格式错误的数据包,这是我在D2僵尸网络中试图避免做的事情

因此,请确保检测到无效数据包。对它们进行加密、散列。采取措施确保它们有效。如果你仔细想想,如果有人能够准确地知道来回发送的每个数据包的含义,他们甚至不需要运行客户端软件,这就使得任何基于进程的检测都毫无意义。