如何使用抵御客户端黑客入侵的视觉效果实现多人游戏伪装?


19

我一直在考虑在多人游戏中实现隐身。这是一个MOBA风格的游戏,因此请考虑英雄联盟(LoL)和风暴英雄(HotS)。多个客户端连接到单个服务器,该服务器将游戏状态广播到所有客户端。客户端将其输入数据发送到服务器,服务器在遇到无效命令时可能会拒绝输入数据,从而使作弊成为不可能(理论上是这样)。

现在,我故意提及这些游戏是因为两者的隐身方式有所不同。大声笑具有两种可能的状态:您要么完全可见,要么完全不可见。另一方面,HotS通过隐约可见的方式实现隐身:

风暴英雄隐身

我认为这是一个精巧的技工,因为它提升/奖励关注您周围的环境。但是,这是一款多人游戏,让我意识到这可能很容易利用。

当您以“ LoL”方式实现隐身时,您可以简单地停止将玩家坐标发送给其他客户端。当玩家的角色隐身时,服务器可以再次广播该位置。但是,使用HotS模型,可以在角色正在移动的空中看到微光。这意味着服务器必须将播放器的位置发送给其他客户端。这意味着改变纹理或模型甚至游戏代码本身的玩家可能会使披风技工变得毫无用处。这是 HotS板上的一个线程

我的问题是,是否有某种方法可以实现隐身(使用“ Shimmer”,即“ HotS”),而不会出现狡猾的玩家可以修改游戏(数据)和“击败系统”的问题。这可能吗?如果没有,采用这种机制的其他多人游戏如何处理呢?唯一的LoL隐身风格无法企及吗?

我曾考虑过让服务器不时地发送虚假的“隐身”位置,但这也损害了只注意的公平玩家,因此不会这样做。


相关的是link,但是我并不是想碰到其他人(可以由服务器处理),而是显示隐藏的单位。
下溢

这是一个不好的建议,但是您可以在服务器上进行所有图形渲染,然后将每个播放器的屏幕广播到其客户端。他们只发送输入,您只发送输出。客户端是一个薄壳,仅显示视频并播放音频。
user137

菲利普那里有一个很好的主意。我想补充一点,您仍然必须要了解边界框及其与技能热点的交集。如果要发送边界框,那么聪明的编码人员可以反向工程什么字符是不可见的(如果有不同的英雄)。如果您有任何在击中时触发的效果,那么您将必须发送类似盒子之类的东西,或者至少发送效果的位置和比例。请注意,一切越抽象越多
Greaka

您实际上无法通过停止发送玩家坐标来实现LoL风格的伪装。即使角色没有被绘制,他们仍然需要能够以其他方式与地图(和其他玩家)互动。但是实施“可检测的”隐身(脚印,微光等)可以消除很多动机,无论如何都要克服修改游戏的麻烦:您将学习如何检测伪装角色并继续前进。
The Spooniest '16年

2
@TheSpooniest:您能解释一下您的意思吗?您实际上无法通过停止发送玩家坐标来实现LoL风格的伪装吗?如果玩家A不可见,并且服务器不再将坐标发送给玩家B和C,则服务器仍然可以通过拒绝将B的角色移到A上方来处理玩家A和B之间的冲突,就像他们走路时一样进入墙壁)。如果A(仍然不可见)向B发射了技能,则服务器可以简单地将“从位置D ,Y向A 方向发射的技能”发送给B和
下溢

Answers:


20

您不能在不容易利用的情况下实现微光效果...但是,如果您使用间接方式表明某人在周围,又适用于可见玩家,该怎么办?

例如,如果玩家留下足迹,并且从服务器发送“足迹创建”消息而不依赖于玩家位置怎么办?每个玩家都留下脚印,因此如果不覆盖其中的竞技场并使每个单独的印刷品不那么引人注目,就无法使脚印模型更加可见,但是如果玩家看到脚印出现而没有可见角色,他们就会知道有人在那里。

您还可以执行以下操作,例如将小卵石撞倒,有人穿过它时沙沙作响,有人穿过水而出现波纹。如果“标志”仅适用于某些位置或材料,则可能会添加额外的策略,迫使不可见的角色小心移动,并避免会失去位置的东西。


without making it easy to exploit->这适用于所有游戏机制,而不仅仅是特定的机制。
S.TarıkÇetin16年

12
关于最后一段:请记住,当隐形玩家是导致这些事情发生的唯一原因时,那么您正在提供的信息对黑客很有用。但是您也可以通过随机事件或其他玩家动作不时触发它们中的每一个。这样会产生噪音,分散注意力,并具有很好的副作用,使环境看起来更加生动活泼。
菲利普

2
这是一个非常有趣的想法,谢谢!在“足迹”的情况下,这甚至可能奖励隐身玩家“步入”目标(旧)的脚步,从而使向其他人的潜行更加现实(即从后面走来)。即使某人使足迹纹理(或您拥有的东西)更加明显,但踏入它们(可能)只会刷新显示持续时间。
下溢

3
当然,在这种情况下,可以进行客户端破解以显示哪些曲目是最新的。
Muhd

3
客户端黑客可能会突出显示在与玩家位置不对应的区域中创建的足迹。
爱德华·科菲

31

当您查看本网站上无数其他有关防止多人游戏中作弊的问题时,您会很容易地发现,确实没有防止客户端作弊的技术措施。

您所能做的就是提供较少的有关隐藏实体的信息。客户需要知道的所有渲染失真效果的地方就是该位置隐藏了某些东西。但是它不需要知道任何具体的信息,例如确切的含义,剩余的健康状况以及当前的状态。视您的游戏而定,仅此一项就可能改变玩家的游戏信息。


6
“信息较少”也带来“信息不足”。选择保持在服务器端的单个随机方向的偏移量(例如)10英尺,然后发送该位置。在其他随机遇到的情况中,添加错误的闪烁字符“您看到了吗?我以为我在那里看到了东西。”
Keeta-恢复莫妮卡

2
@Keeta如果使用此功能,则需要使用信号滤波器或某种朝向实体方向的随机游走进行平滑处理(即,并非每次都生成完全随机的值)。如果过于紧张,那么这在眼中真的很明显,因此您需要平衡玩家在移动过程中隐藏和在静止时隐藏的能力。后者将而且应该更加有效。
Nate Diamond

@NateDiamond是的,完全是。这就是为什么我声明服务器会创建实际位置的特定偏移量的原因。然后,随着实际角色的移动,偏移也会导致微光也移动。通过仔细观察微光的移动,您可以推断出实际演员的位置,但这需要一些工作。如果隐身性是真实的,并在现实生活中引起了这种微光,我想这种额外的关注点正是克服隐身性所需要的。
Keeta-恢复莫妮卡

ioquake3进行了一个有趣的修改,并且是唯一实际可行的修改,以使它成为可防墙砍的服务器。这个想法是在服务器端检查玩家A是否可以看到另一个玩家B(即没有墙壁或其他分隔物挡住了视线),然后再确定玩家A是否应接收B的位置信息。事实证明,这种方法非常有效wallhacks,因为它们变得毫无用处。因此,最重要的是,确保没有人操纵数据的唯一方法是根本不给他们任何信息。
令人赞叹的

@gaborous的确是一项昂贵的检查,尤其是对于每一个滴答滴答的每位玩家。这可能是很值得的支出,但这是开发人员必须在服务器的成本和功能方面考虑的事项。
Nate Diamond

1

是的,您发送给客户的任何信息都可以比您预期的更加明显。但这是窍门:

减轻影响

当然,客户可能会有一些信息,但是通过仔细考虑您愿意共享的信息以及玩家可以使用的信息,您至少可以减轻客户端黑客的影响。

1.玩家观察到什么?

  1. 您会在现场看到具有特征的角色:在这种情况下,客户端将拥有所有信息,黑客可以简单地撤消披风
  2. 您会在现场看到一些东西:在这种情况下,客户可以获得位置信息。它可以使位置显而易见,但其他信息仍应隐藏。
  3. 您观察到了一些东西,但是它不是当场

一种。您会看到一些东西,但是它不是在现场(桥或灌木丛移动,但是移动很大,所以您不知道瞄准的位置;脚步声只有2秒的延迟才可见):在这种情况下,客户仅知道有某物,但不确切地/在哪里。

b。您以不同的方式观察物体(如果该区域内有物体,则发出声音;接近指示,如带方向或不带方向的雷达)

截屏中的屏幕快照似乎在1到2之间,因为它可能是基于有限的信息,但是您仍然看到了轮廓,它可能会泄露一些信息。

2.玩家可以做什么?

假设您认为某人在XY坐标上,该怎么办?以下是一些典型的选择:

进攻

  1. 您可以攻击他,好像他没有被遮盖
  2. 您可以使用AOA攻击/陷阱攻击他,也可以不隐藏他
  3. 您可以主动隐瞒他,然后再攻击他
  4. 你根本不能攻击他

移动

  1. 当您开始移动时,您会发现引擎神秘地绕行了您
  2. 您通常会开始朝目标前进,但是当您到达隐藏的角色时,您会绕着他移动或停止
  3. 您不会被隐藏的角色所阻挡

如果路由选择通常在客户端完成


感谢您的输入。我打算让人们无论如何都“撞上”隐形字符,因为这是服务器可以计算和处理的。声音的想法很简洁,以微妙的方式改变声音(张力,想像Jaws)会很酷,但难道不是也可以很容易地用声音更大的声音文件甚至是声音文件说“ 有人偷走”来代替吗?
下溢

1
沿着“ a”线的另一个想法:微光可能会随机出现在被遮盖的玩家附近,但不在其确切位置。如果服务器只是发送微光的位置,则客户端实际上无法对此进行大量逆向工程。实际上,即使隐身的玩家是完全可见的,它仍然可以充当机械师。
Jezzamon'8

1
@Jezzamon是的,某种“置换”机制也很酷。但是,在这种隐身情况下行不通:我不想惩罚那些正在寻找闪光的玩家;他们需要具有微光的“确切”位置以瞄准技能热点。
下溢

-2

波纹效果可以通过着色器代码完成。您可以在此模式下禁用纹理使用,因此简单的纹理更改不再是问题。

在3D模型中,当模型起作用时,您仍然可以仅使用模型的表面将着色器更改为模拟折射的着色器,放弃颜色。即使以某种方式替换了模型,效果仍然存在。

修改预编译的着色器与修改游戏代码一样困难,而且我认为比在游戏文件中进行某些纹理查找要困难一个级别。


3
您错过了实际的问题。这与如何从技术上创建这种失真效果无关。这是关于如何向客户提供信息的呈现位置,而又不向其提供可以提供给播放器的有用信息。
菲利普

1
好吧,我解决这个问题:Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless。而且我不明白为什么我错过了这个问题whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) 。A:广告会掩盖微光,B:比简单的纹理更改更难修改。实际渲染的另一面。如果位置是我们唯一需要施加波纹效果的东西,那么它应该是发送给玩家的唯一数据。
火星

2
我过去曾经开发过客户端黑客。很难修改着色器的观点非常非常令人误解。是的,它可以阻止最基本的攻击形式,但是任何拥有不错的Google-fu的人都可以在一个下午找到解决方法。现在,将您的游戏与一个体面的骇客对决,看看他们花了多长时间才填补了客户端的欺骗性优势。

将您的评论复制粘贴到此处的每个答案,因为可以利用客户端的任何内容。我知道修改代码并不难(AAA游戏中有机器人,黑客,mods),但是我发现在游戏文件中查找半透明纹理比查找着色器波纹效果的特定指令要容易得多。当然,如果着色器文件是纯文本并且几乎未压缩,那么即使是小孩也可能将其破坏。我只是给出了一个答案,可以将其与“传递给玩家的较少数据”结合起来以提供不错的安全性。我真的不知道这是怎么回事,因为它提供了实际的解决方案
2016年

@Thebluefish是公平的,因为这是因为开发人员不再花费资源尝试停止作弊,而是将资源花费在非常复杂,晦涩且构建良好的方法上,以检测作弊并完全禁止从平台上冒犯玩家...(显然指的是Steam的VAC等系统。
Trotski94年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.