2008-09-27 36 views
7

一个我们的下一个项目应该是一个基于微软Windows游戏(用C#编写,与WinForm的图形用户界面和集成的DirectX显示器控制),谁愿意放弃奖品最好的球员客户。这个项目的目标是运行几年,包括锦标赛,阶梯,锦标赛,玩家与玩家行动等等。防护自动化

这里的一个主要问题是作弊,因为如果玩家能够 - 例如 - 让一个定制的机器人为他玩游戏(更多的是在战略决策方面而不是在打很多小时)。

所以我的问题是:我们有什么技术possibilites探测机器人的活动?当然,我们可以跟踪的发挥小时数,分析策略,以检测异常等,但就这个问题而言,我会更想知道的细节,如

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

您的意见是高度赞赏!

+0

您可以轻松地将另一台计算机挂接到相机以及假键盘/鼠标。哪一个会打败所有人 – 2008-09-29 20:14:42

+0

你不需要另一台相机 - 在虚拟机内部运行它,机器人将在外面跑步。 – 2010-07-02 21:40:53

回答

0

你应该看看什么进入PunkBuster的,Valve反作弊,并为一些指针其他一些反作弊的东西。

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

+0

我们已经检查过Punkbuster等人,但据我们了解,这些工具的主要目的是检测已知的作弊,漏洞等。在我们的情况下,这是不适用的,因为有限的用户群,它会更有可能遇到定制作弊。编辑:感谢您的新答复。我明白你说的是什么,但Punkbuster比如说(其实和这个领域的其他产品一样),主要是作为一种病毒扫描,寻找可疑的内存指纹,进程,对API的改变等等(另请参阅http://en.wikipedia.o – Grimtron 2008-09-27 08:41:59

5

只是一个想法如果'骗子'在虚拟机(如vmware)中运行您的软件并且对该窗口执行屏幕截图?我怀疑你可以为此辩护。

你显然不能抵抗'类比差距',例如骗子的系统使用高质量的相机制作外部屏幕截图 - 我想这只是一个理论问题。

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

+0

关于虚拟机的事情 - 您可以使用Shader Model 2.0作为游戏,目前没有虚拟机可以在硬件中运行。 – OregonGhost 2008-09-27 08:51:01

0

我不知道的技术细节,但Intenet的国际象棋俱乐部的BlitzIn计划似乎已经集成程序切换检测。这当然是为了检测运行一边的国际象棋引擎的人,而不是直接适用于你的情况,但是你可能能够推断应用如果进程X在接下来的Y周期中占用超过Z%的CPU时间,那很可能一个bot运行。

作为比赛规则的一部分,除了“你不得在玩游戏的时候运行其他任何事情以获得奖品”。另外,“任何时候我们可能会因为任何原因决定你使用机器人并取消你的资格”这个规则也有助于上面的启发式方法(用于获奖的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)? 

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

+2

那么运行该软件的旧计算机又如何?处理器的使用情况是一个非常模糊和模糊的方式来检测自动化 – 2008-09-27 09:39:34

+0

它不得不绝对的工作,但相对于计算机本身。在任何情况下,超过启发式,评论的其余部分是最相关的,imo – 2008-09-27 10:56:23

3

对自动化的最佳保护是不需要磨削的任务。

话虽这么说,检测自动化的最佳途径是积极参与的用户和需要定期CAPTCHA样测试(除了没有图像等)。我建议使用数千个简单的一次性问题的数据库,这些问题每隔一段时间就会提交给用户。

但是,根据你的问题,我想说你最好的选择是不要在C#中实现反自动化功能。您很少有机会从托管代码中检测写得好的黑客/僵尸程序,特别是当所有黑客必须做的只是进入ring0以避免通过任何标准方法进行检测。我推荐一种类似监狱的方法(可以下载的模块,您可以随时更新),并结合内核模式驱动程序,该驱动程序挂接所有的Windows API函数,并监视它们进行“不适当”的调用。但是,请注意,您会遇到很多误报,因此您不必将自己的禁止系统建立在自动数据基础上。在禁止之前,始终要对它进行人性化的审视。

1

我有PunkBuster的和这种softwar如何工作没有深入的了解,但是这是我要走的路:

Iintercept调用该处理记忆的东西一样ReadProcessMemoryWriteProcessMemory的 API函数等等。

你会发现,如果你的过程是参与通话,记录它,和蹦床回调到原来的功能。

这应该也适用于屏幕截图,但您可能需要截取BitBlt函数。

下面是关于函数截取一个基础教程: Intercepting System API Calls

7

我写d2botnet,一个.net暗黑2自动化引擎而回,有事你可以添加到您的事情清单,注意是畸形的/无效/伪造的数据包。我假设这个游戏将通过TCP进行通信。数据包嗅探和锻造通常是游戏(在线反正)自动化的第一种方式。我知道暴雪会检测出畸形的数据包,但我试图远离d2botnet。

因此,请确保您检测到无效数据包。加密它们。哈希它们。做点什么来确保它们是有效的。如果你仔细想想,如果有人能够确切地知道每个数据包意味着什么来回发送,他们甚至不需要运行客户端软件,这使得任何基于进程的检测成为一个有争议的问题。因此,您还可以添加某种基于数据包的挑战响应,以便您的cleint必须知道如何响应。

2

在应用程序中监听键盘和鼠标输入的常用方法是使用SetWindowsHookEx设置窗口钩子。 供应商通常会在安装过程中尝试保护他们的软件,这样黑客就不会为他们的应用程序自动化并破解/查找串行。 Google术语:“Key Loggers”... 这是一个article,它描述了防止它的问题和方法。