Unity3D Speed Hack检测

时间:2018-07-24 10:41:36

标签: c# unity3d scripting detection cheat-engine

我想知道有什么方法可以针对诸如游戏守护者之类的速度黑客应用程序检测我们的游戏吗?

我在整个互联网上搜索,但没有得到满意的答复。

4 个答案:

答案 0 :(得分:3)

解决方案是不是更多的软件。解决方案从一开始就不容易受到这种攻击。

示例:

如果您允许用户在世界地图上向您的服务器发送其坐标(“我是蓝色玩家,并且由于我已经移走了全部限额,那么我现在是156/467”),对于某人来说,这很简单传送作弊。只需发送不同的坐标, boom 即可传送。孩子们玩耍。

如果您只允许用户向服务器发送意向消息(“我是蓝色玩家,我打算将全额津贴向156/467的方向移动”),然后让您的服务器弄清楚这意味着什么(是否允许球员移动,他的津贴是多少,蓝色球员在一单位时间内能走多远)并将结果发送回去,您永远不会遇到这个问题。

不信任客户输入。电子游戏安全性的第一法则:客户端在敌人的手中。

如果您继续信任客户,那么在客户之上推销越来越多的软件毫无意义。只需停止并设计您的游戏,以便客户端发送意图并由服务器确定结果。

答案 1 :(得分:1)

这取决于您的游戏,但是您可以尝试通过简单地检查每帧玩家的位置来检测速度漏洞。

  1. 确定最大可能移动距离每秒,并将其设置为常数,以便播放器在运行时无法更改该距离。
  2. 缓存当前位置。
  3. 在下一次更新中,检查玩家的行进距离,并将其乘以Time.deltaTime
  4. 如果玩家旅行的次数超过允许的上限,则该玩家一定已经作弊。
  5. 返回步骤号。 2

这将是独立于帧速率的检查,因为您将使用每秒的最大允许距离。

答案 2 :(得分:1)

如果服务器始终具有所有玩家位置,而您的问题在于速度入侵,那么解决方案就不会那么困难(假设玩家位置一直在不断发送到服务器)。

请执行以下操作,首先在更新玩家位置之前检查当前位置和旧位置之间的距离是否过大

  var distance = Vector3.Distance(old.position, currentposition);
if(distance<=alloweddistance)
...

,如果避免,则将位置\设置播放器更新为旧位置\踢球员。更好的解决方案是不允许玩家将当前位置发送到服务器,而是发送他们正在移动的方向和速度。服务器应根据方向和移动速度更改其位置,而不是客户端。

答案 3 :(得分:0)

我为自己的在线多人项目找到了解决方案,该解决方案适用于任何在线游戏。

为解决此问题,我们只需要计算服务器中的时间即可。例如,我们可以使用stopwatch并在客户端进行此操作...在特定情况下,我们可以通过网络比较它们,如果它们之间存在任何差异(例如超过3秒),则变为清除播放器被使用的速度骇客。

我在游戏中尝试了这种方法,效果很好。