防护自动化(Protection against automation)

2019-07-18 05:15发布

我们的一个未来的项目应该是谁愿意放弃奖品最好的球员一个客户MS Windows的游戏(用C#编写,用WinForm的图形用户界面和集成的DirectX显示器控制)。 该项目旨在为几年运行,与总冠军,梯子,比赛,玩家对玩家的行为等等。

这里的一个主要关切是欺骗,作为一名球员将受益显着,如果他能 - 比如 - 让一个定制机器人玩游戏的他(多在战略的决策方面比在玩几个小时计) 。

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

  • 如何检测是否有其他应用程序进行定期截图?
  • 如何检测是否有其他应用程序扫描我们的进程内存?
  • 有什么好的方法来确定用户输入(鼠标移动,键盘输入)是否是人为产生的,而不是全自动的吗?
  • 是否有可能,如果另一个应用程序请求的信息有关控制在我们的应用程序(控件等位置)来检测?
  • 什么其他的方式存在,其中一个骗子可以收集信息有关当前游戏状态,喂那些僵尸和发送所确定的行动,返回给客户端?

您的意见是高度赞赏!

Answer 1:

我写d2botnet,一个.net暗黑2自动化引擎而回,有事你可以添加到您的事情清单,注意是畸形/无效/伪造数据包。 我认为这场比赛将通过TCP通信。 数据包嗅探和锻造通常是第一种方式游戏(在线反正)是自动化的。 我知道暴雪会检测到错误数据包,服用点我试图从d2botnet做望而却步。

所以一定要检测无效的数据包。 加密它们。 哈希他们。 做somethign以确保它们是有效的。 如果你想想看,如果有人能确切地知道每一个数据包的意思是来回发送,他们甚至不需要运行客户端软件,然后使得任何基于进程检测一个有争议的问题。 所以,你也可以添加某种基于分组质询响应您cleint必须知道如何应对的。



Answer 2:

只是一个想法,如果“骗子”运行你的软件在虚拟机(VMware等),并使得该窗口的截图? 我怀疑你能抵御这一点。

你显然不能抵御“模拟差距”,例如骗子的系统使得外部的截图高品质摄像头 - 我想这只是一个理论问题。

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



Answer 3:

对自动化的最佳方法是不是有需要磨任务。

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

然而,根据你的问题,我说你最好的选择是不是C#实现反自动化功能。 你站在检测从托管代码中精心编写黑客/机器人的机会非常少,尤其是当所有的黑客所要做的仅仅是进入RING0避免通过任何标准方法检测。 我建议用挂接所有的Windows API函数和手表他们为“不适当的”呼叫的内核模式驱动程序相结合的守望者般的方式(下载,能够模块,每当你觉得你可以更新)。 请注意,但是,你会碰到很多的误报,所以你需要不立足于您的自动化数据的禁止制度。 总有一个人看在它之前禁止。



Answer 4:

听中的应用程序的键盘和鼠标输入的常用方法是设置使用SetWindowsHookEx函数一个窗口钩。 供应商通常会尝试在安装过程中保护自己的软件,使黑客不会自动化和打击/找到他们的应用程序的串行。 谷歌术语:“按键记录” ......这里是一个文章描述问题和方法,以防止它。



Answer 5:

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

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

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

这应该适用于截图服用过,但您可能希望拦截BitBlt函数。

下面是关于函数截取一个基础教程: 拦截系统API调用



Answer 6:

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

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



Answer 7:

我不知道的技术细节,但Intenet的国际象棋俱乐部的BlitzIn程序似乎有综合方案的开关检测。 那是当然的,用于检测人在旁边运行的国际象棋引擎,并不能直接适用于你的情况,但你可以到apporach推断的东西一样,如果过程X大于Z.%的CPU时间需要更多的下一Ÿ周期,这可能一个机器人的运行。

这除了“你不能运行任何东西,而玩游戏,才有资格获奖”为竞赛规则的一部分可能会奏效。

此外,恶法“我们可能会在任何时候,你一直在使用一个机器人,并夺去你们的任何原因决定”的规则也有利于与上面的启发式方法(以珍贵的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)?

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



文章来源: Protection against automation