automation -

  显示原文与译文双语对照的内容

我们的下一个项目应该是一个基于 Windows的游戏( 用 C# 编写,带有 winform GUI和集成的DirectX display-control ),对于想要向最好的玩家赠送奖品的客户来说。 这个项目打算运行几年,与锦标赛,梯子,比赛,球员 vs player-action等。

其中最主要的问题就是作弊,因为如果他能够让自己的游戏变成( 在strategy-decisions方面比在玩许多小时里更多),那么他就会显著受益。例如让一个定制的机器人为他做游戏。

所以我的问题是:我们需要什么技术possibilites来检测bot活动? 当然,我们可以跟踪播放的时间,分析策略来检测异常等等,但对于这个问题,我更感兴趣的是了解这样的细节。

  • 如何检测另一个应用程序是否有周期性的屏幕截图?
  • 如何检测其他应用程序是否扫描进程内存?
  • 确定用户输入( 鼠标移动,键盘输入) 是否为human-generated而不是自动的好方法?
  • 是否有可能检测到其他应用程序请求有关应用程序( 控件的位置等) 中的控件的信息?
  • 还有什么其他的方法,骗子可以收集关于当前游戏状态的信息,将这些信息反馈给机器人,并将确定的动作发送回客户机?

你的反馈非常感谢你 !

时间:

我写了 d2botnet,一个. NET 暗黑 2自动化引擎,一段时间后,你可以添加到你的事物列表,你可以看到的是错误的/invalid/forged 包。 我想这个游戏会通过 TCP 。 包嗅探和锻造通常是游戏( 无论如何在线) 自动化的第一种方式。 我知道暴雪会发现错误的包,somehting我试图不要在d2botnet中做。

所以确保你发现了无效的数据包。 对它们进行加密。散列。执行somethign以确保它们是有效的。 如果你认为,如果有人能够确切地知道每个包的意思是发送回来的,他们根本不需要运行客户端软件,那么它就会产生任何基于detection的检测。 所以你也可以添加一些基于包的挑战响应,你的cleint必须知道如何响应。

如果'骗子'在虚拟机( 像 vmware ) 中运行软件,并对该窗口进行屏幕截图,那就这样? 我相信你不能阻止。

显然,你不能抵御'模拟间隙',比如 系统的欺骗者使外部截图具有高质量的相机- 我猜这只是一个理论问题。

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

最好的防护是没有需要研磨的任务。

这一点说,检测自动化的最佳方法是积极地参与用户并需要定期的CAPTCHA-like测试( 除非没有图像等) 。 我建议使用database个简单的一次性问题数据库,这些一次性问题会被用户频繁地使用。

不过,根据你的问题,我认为你最好的选择是不要在 C# 中实现anti-automation特性。 你将很小的机会从托管代码中检测well-written攻击/僵尸程序,特别是当所有黑客都必须只进入ring0以避免通过任何标准方法进行检测时。 我推荐一个Warden-like方法( 。download-able模块,你可以随时更新) 结合Kernel-Mode驱动程序,它钩子所有的Windows API函数,并监视它们为"不合适"调用。 但是,请注意,你将在大量的false 中运行,因此你需要在自动数据上构建禁止系统。 禁止前总是让人看它。

在应用程序中侦听键盘和鼠标输入的常用方法是使用SetWindowsHookEx设置 Windows 钩子。 供应商通常尝试保护他们的软件在安装过程中,这样黑客不会自动和破解/查找他们的应用程序。 Google这个术语:"按键记录器"。 下面是描述问题和防止它的方法的文章。

我不知道技术细节,但网上象棋BlitzIn俱乐部程序似乎已经集成了节目切换检测。 当然,在你可以直接在下一周运行的时候,你可能会发现这是一个正在运行的机器。

除了作为比赛规则的一部分之外,"在玩游戏时,你不能再做任何其他的事情来获得奖品"还可能工作。

另外,严格的"我们可能会在任何时候决定你是否使用了一个机器人,并取消了你的资格"规则也有助于在( 。用于超值的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)?

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

我没有深入了解PunkBuster和此类软件的工作方式,但这是我的方法:

Iintercept调用api函数处理内存的东西像 ReadProcessMemory, WriteProcessMemory等等。

你将检测到你的进程是否涉及到调用。日志,并将调用trampoline回原始函数。

这应该适用于屏幕截图,但是你可能希望截取BitBlt函数。

以下是有关函数拦截的基本教程: 拦截系统API调用

@kineas.myopenid.com: 完全正确,这就是为什么我们感兴趣的方法检测information-polling从客户机本身。 作为游戏,而高节奏,我们认为它可能有一个单独的"bot-advice-output"用户跟随( 在国际象棋游戏中也是可能的), 但机器人必须"自己玩",human-interaction有限。

你应该考虑到 Punkbuster 。阀门Anti-Cheat和一些其他的Anti-Cheat材料的pointers 。

编辑:我的意思是,看看他们怎么做,他们如何发现的东西。

@ TraumaPony:我们已经签出 Punkbuster etal,但据我们了解,这些工具的主要目的是检测已知的骗子,利用 等等 不适用在我们的案例中,由于有限的userbase更可能遇到定制的骗子。

编辑:感谢你的新响应。 我明白你说的什么,但是Punkbuster例如( 而且这个地区的其他产品也是一样的), 主要作为一种virus-scan,寻找可疑的memory-fingerprints,api等( 另请参阅 http://en.wikipedia.org/wiki/Punkbuster ) 过程,变化。 这显然不适用于custom-made骗子。

...