问题标签 [anti-cheat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
anti-cheat - 如何防止在我们的(多人)游戏中作弊?
如果您正在编写游戏,您应该考虑作弊者以及如何防止他们作弊。
我不认为只有 MMO 多人游戏,还有单人游戏或“自制”p2p mp 游戏。
当游戏完全基于服务器 - 客户端架构时,我认为这项工作几乎完成了,但也有墙壁黑客或其他东西。
我制作了自己的 p2p 游戏,一段时间后出现了作弊者。他们只是使用作弊引擎并尝试过速度黑客和记忆黑客的脚本小子。
大多数speedhacks钩子gettickcount。我通过以下简单的技巧整理出了快速黑客。我只是跟踪time()-GetTickCount()
价值,如果差异发生变化,那就是作弊。
可以通过将散列副本保存在某处并始终移动它并始终按随机值对其进行重新散列来解决内存损坏问题。不匹配会导致崩溃。
要彻底解决作弊引擎,只需检查:
(朋友告诉我的,我还没有测试过。)
这些招数把骗子最多。但当然还有更多的作弊技巧。我打开了这个wiki,来讨论更多其他的作弊技巧和避免它们的方法。
client-server - 使用时间戳验证位置差异时如何考虑延迟差异(防作弊)?
当您在多人游戏中服务器从客户端接收移动(位置)信息时,您希望验证此信息作为反作弊措施。
这可以这样做:
这是一个简单的例子,只考虑了 X 坐标。这里的问题是,一旦服务器收到最后的位置更新,就会存储 oldTimestamp 。这意味着,如果当时有延迟峰值,则旧时间戳将比服务器接收到的新位置更新晚得多。这意味着时差将不准确。
例子:
- 客户说:我现在在位置 5x10
- 滞后峰值:服务器在时间戳 500 收到此消息(它通常应该在 30 时到达)
- ....1 秒动作...
- 客户说:我现在在 20x15 的位置
- 无延迟峰值:服务器在时间戳 1530 处接收消息
服务器现在会认为这两个位置的时间差是1030,但是实际的时间差是1500。这可能会导致反作弊检测认为1030不够长,从而踢掉客户端。
可能的解决方案:让客户端在发送时发送时间戳,以便服务器可以使用这些时间戳代替
问题:这个解决方案的问题是玩家可以操纵客户端发送一个不合法的时间戳,所以反作弊系统不会启动。这不是一个好的解决方案。
也可以简单地允许 maxPlayerSpeed * 2 速度(例如),但是这基本上允许速度达到正常速度的两倍。这也不是一个好的解决方案。
那么:您对如何解决这个“服务器时间戳和延迟”问题有什么建议,以使我的反作弊措施值得吗?
security - 基于浏览器的 xmlhttp/js/perl/php 游戏的作弊预防
假设在基于浏览器的游戏中,完成一些操作(为简单起见,假设某人点击了一个将他们的分数提高 100 的链接)点击这个链接,该链接将有一个 url,例如increase_score.pl?amount=100
,某人简单地发送了什么样的预防措施请求 Web 服务器执行此命令:
- 一遍又一遍地没有真正完成点击链接的任务
- 向服务器发送虚假请求,其中数量设置为 100000 之类的 rediculus。
我知道检查,HTTP_REFERER
但是我知道人们可以解决这个问题(不确定如何准确),除了检查第二个选项的一些边界之外,我有点难过。有人遇到过类似的问题吗?解决方案?
macros - 使用自动点击器阻止用户
我遇到了一些问题,用户通过使用宏以特定顺序自动单击屏幕上的某些位置来自动执行各种任务而无需实际玩游戏来欺骗我的在线游戏。是否有任何方法可以用来阻止此类活动,而不必在整个网站上粘贴验证码并破坏诚实用户的体验?
编辑:我忘了提,这是一个基于网站的游戏,而不是使用 Flash。
javascript - HTML 5 Gaming 是否使用 Canvas 和 Javascript?在这种情况下如何防止作弊?
HTML 5 Gaming 是否使用 Canvas 和 Javascript?在这种情况下如何防止作弊?
例如,如果用户使用 GreaseMonkey 或某些工具来更改脚本,以便它每次都向服务器报告完美的游戏分数怎么办?
mouse - 什么应用程序有鼠标控制?
用户可以通过游戏(桌面或网络)作弊的一种方法是让“机器人”监控屏幕并为他们移动鼠标。有没有办法(当然有透明度和用户许可)来监控应用程序是否正在控制鼠标?我主要对 Windows 应用程序感兴趣,但如果有其他操作系统的方法也很有用。谢谢!
artificial-intelligence - 检测在线扑克作弊
最近在一个大型扑克网站上发现,一些玩家可能通过利用一个被发现的安全漏洞在玩牌时看到所有对手的牌。
一个天真的作弊者会以极快的速度获胜,而且这些作弊通常很快就会被抓住,如果不迅速被抓住,他们很容易通过快速扫描他们的手牌历史来发现。
更难的问题出现在作弊者表现出智慧,在他们必然会被跟注的场合诈唬,用最差的牌跟注河牌圈下注,基本前提是他们故意输底池以掩饰他们看到其他玩家牌的能力,他们以合理的现实速度获胜。
鉴于:
- 数百万个经过验证且完整的信息手历史数据集
- 理论上无限计算能力
- 假设游戏是无限注德州扑克,尽管关于奥马哈或限注扑克的建议可能是有益的
我们如何合理准确地对这些作弊者进行分类?最初的 2+2 线程呼吁想法,我认为 SO 社区可能会有一些有用的建议。
这也是一个有趣的问题,因为它是最新的,如果有人找到创造性的解决方案,它在改善世界方面具有真正的应用,因为当发现被识别的作弊者时,真正的玩家很有可能会退还给他们的资金。
networking - 游戏中的网络问题
我正在寻找特定于游戏的网络设计和技巧。我知道一些问题,并且我对其中一些问题有一些部分解决方案,但可能还有一些我看不到的问题。我认为对此没有明确的答案,但我会接受我真正喜欢的答案。我可以想到 4 类问题。
信号不好
客户端发送的消息需要一些时间才能到达服务器。服务器不能只处理它们 FCFS,因为这对延迟较高的玩家不公平。对此的部分解决方案是消息上的时间戳,但您需要两件事:
- 能够信任客户的时钟。(我认为这是不可能的。)
- 您可以测量的恒定延迟。你能对可变延迟做些什么?
许多游戏使用 UDP,这意味着消息可能会丢失。在这种情况下,他们会尝试根据他们已有的信息来估计游戏状态。在连接再次工作后,您如何知道估计的状态是否正确?
在 MMO 游戏中,服务器处理大量客户端。分配负载的最佳方式是什么?基于游戏中的位置?将一组客户端绑定到服务器?你能避免通过服务器发送所有内容吗?
球员离开
发生这种情况时,我已经看到了 2 种不同的行为。在大多数 FPS 游戏中,如果主持游戏的玩家(我猜他是服务器)离开其他人无法玩。在大多数 RTS 游戏中,如果任何玩家离开,其他玩家可以在没有他的情况下继续玩。没有专用服务器怎么可能?大家都知道完整的状态吗?他们是否以某种方式转移了服务器的角色?
获取信息
下一个问题可以通过专用服务器解决,但我很好奇它是否可以在没有服务器的情况下完成。在很多游戏中,玩家不应该知道游戏的完整状态。RTS 中的战争迷雾和 FPS 中的墙壁就是很好的例子。但是,他们需要知道一个动作是否有效。(例如,你能从那里射我还是你在地图的另一边。)在这种情况下,客户端需要验证对未知状态的更改。这听起来像是可以通过巧妙地使用密码原语来解决的问题。有任何想法吗?
作弊
在受信任的客户端环境中,上述一些问题很容易发生,但不能假设。是否有适用于例如 80% 普通用户 - 20% 作弊者环境的解决方案?你真的可以制作一个可以工作的反作弊软件(并且不需要像内核模块这样荒谬的东西)吗?
我确实阅读了这个问题和一些答案https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books但其他答案链接到不可用/受限内容。这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案。
c# - 杀毒进程杀预防?
我正在四处寻找如何防止应用程序被杀死,但还没有真正找到描述它如何用于防病毒应用程序的答案。
我期待做的是一个工具(类似于 Gameguard、xTrap)来防止我在 XNA 上制作的一个简单的在线游戏作弊。
在执行功能以防止用户在我的游戏中作弊的过程中,我想知道 AVG、Norton 和其他防病毒应用程序如何与操作系统协调工作,不允许管理员用户关闭他们的应用程序但又能正常关闭?
如果不使用第二个应用程序来观看我的反作弊应用程序,是否有可能在其上捕获杀戮事件,这样我至少可以在发生这种情况时关闭我的游戏?
我也在考虑使用我的游戏作为我的反作弊的观察者,反之亦然,只要其中一个出局,另一个也会出局,但我也想了解上述内容。
从我所看到的情况来看,人们很容易绕过这些事情,在这些调用上绕道而行,所以也许让我的游戏作为反欺骗者的观察者也不会那么有效......
希望得到一些答案、建议、与我可以改进的内容相关的代码,作为我的游戏和反作弊应用程序的安全性。
还有防止诸如olly之类的调试器附加到它的信息。
actionscript-3 - 有哪些可靠的 Flash 混淆器?
我正在用 Flash 创建一个向服务器提交高分的游戏。虽然我计划在服务器端采取一些预防措施来防止篡改,但链中的薄弱环节是 Flash 本身。使用作弊工具,玩家可以监控和调整内存中的变量。
我意识到大多数 Flash/SWF 混淆器旨在防止人们(轻松)反编译 SWF。作为一种反作弊机制,它们会有所帮助吗?