Unity3D Speed Hack 检测
Posted
技术标签:
【中文标题】Unity3D Speed Hack 检测【英文标题】:Unity3D Speed Hack Detection 【发布时间】:2018-12-31 22:56:16 【问题描述】:我想知道,有没有什么方法可以在我们的游戏中检测到像游戏守护者这样的速度黑客应用程序?
我搜索了整个互联网,但没有得到满意的答案。
【问题讨论】:
您应该进行一般的反作弊,例如:检测调试器、创建线程、加载 dll、检测来自外部进程的内存变化等... 【参考方案1】:解决方案不是更多的软件。该解决方案从一开始就不会受到此攻击。
例子:
如果您允许您的用户将他们在世界地图上的坐标发送给您的服务器(“我是蓝色玩家,由于我移动了我的全部津贴,我现在处于 156/467”),那么对于某人来说写是微不足道的传送作弊。只需发送不同的坐标,boom 传送。孩子们玩。
如果您只允许您的用户向您的服务器发送意向消息(“我是蓝色玩家,我打算将我的全部配额移动到 156/467 的方向”)并让您的服务器弄清楚这意味着什么(玩家是否允许移动,他的津贴是多少,蓝色玩家在一个单位时间内能走多远)并将结果发送回去,你永远不会有这个问题。
不要相信客户的输入。电子游戏安全的第一条规则:客户掌握在敌人手中。
如果您一直信任您的客户,那么将越来越多的软件推到您的客户身上是没有意义的。只需停止并设计您的游戏,以便客户端发送意图并由服务器确定结果。
【讨论】:
“不信任客户端输入”不仅适用于游戏,也适用于所有可能类型的应用程序。如果有办法破坏某些东西,用户肯定会找到它。有意或无意。 所以在这个解决方案中,服务器必须检查所有玩家的位置并计算他们的移动,这对服务器性能来说非常昂贵! @nvoigt【参考方案2】:这取决于您的游戏,但您可以尝试通过简单地检查每一帧的玩家位置来检测速度黑客。
-
确定每秒可能的最大移动距离并将其设置为常数,这样玩家就无法在运行时更改它。
缓存当前位置。
在下次更新时,检查玩家行进的距离并将其乘以
Time.deltaTime
。
如果玩家的旅行超过了允许的最大值,那么玩家一定是作弊了。
返回步骤号。 2
这将是独立于帧率的检查,因为您将使用每秒的最大允许距离。
【讨论】:
坦克的答案,但我以前用这种方式测试过,这不是解决方案。玩家黑进与否的移动计算是一样的!不幸的是,游戏无法识别它。我认为这样他们是黑客设备时间。 这行不通。因为时间被黑了。所以这个计算看起来很正确,因为游戏时间与现实世界不同。所以你需要一个不能被破坏的外部定时器。 这还不够,因为丢包,延迟允许单帧,其中可能有 2 个数据包同时进入并显示接近无限的速度。误报会发生很多。【参考方案3】:如果服务器始终拥有所有玩家位置,并且您的问题在于速度黑客,那么解决方案并不难(假设玩家位置不断发送到服务器)。
请执行以下操作,在更新玩家位置之前首先检查当前位置和旧位置之间的距离是否不太大
var distance = Vector3.Distance(old.position, currentposition);
if(distance<=alloweddistance)
...
如果是避免将位置\设置球员更新为旧位置\踢球员。一个更好的解决方案是不允许玩家将他们当前的位置发送到服务器,而是发送他们移动的方向和速度。服务器应该根据方向和移动速度改变他们的位置,而不是客户端。
【讨论】:
【参考方案4】:我为自己的在线多人游戏项目找到了解决方案,它适用于任何在线游戏。
为了解决这个问题,我们只需要计算服务器中的时间。例如,我们可以使用stopwatch
并在客户端执行此操作...在特定情况下,我们可以通过网络比较它们,如果它们之间有任何差异(例如超过 3 秒),那么就很清楚了播放器被用来加速破解。
我在游戏中试过这个方法,效果很好。
【讨论】:
以上是关于Unity3D Speed Hack 检测的主要内容,如果未能解决你的问题,请参考以下文章
unity3d用translate方法使物体移动,最后成功了为啥物体的移动速度会自己逐渐变慢?