Ola*_*oja 5 c++ java security networking multiplayer
关于标签
我将其标记为Java 和 C ++问题。这意味着我不是在寻找特定于语言的答案。我只标记了C ++和Java,因为我精通它们,并且如果用这些(或类似)语言编写代码示例,则很可能会理解您的代码示例。
指针和洞察力的安全性措施,发展软件时,主要是我应该考虑到游戏,如描述的下方。安全是指检查并再次检查用户是否采取了非故意的行为。这可能意味着一些行为,例如将他/她存在的最新恶意病毒更新集发送到服务器/其他客户端,或者通过黑客攻击等方式损害其他玩家的用户体验。
预期的评论和答案
您是否在问如何阻止人们入侵您的游戏?
这是不以任何方式,我的问题,因为它的方式过于广泛,这个线程。但是,如果您确实找到了一种简单的方法(通过作弊)来赢得每场比赛,请告诉我。
这个问题更适合X
我已经在CodeReview和程序员中提出了这个问题。在这两个网络中,该职位均受到好评。为了公平起见,这里也很不受欢迎(请参阅ADTC的评论),因此赏金很高。悬赏后,我重写了这篇文章,以更好地满足SO的标准。但是,如果您仍然认为此帖子不太适合此处,请告诉我原因。我很难确定这是否真的更适合SO或Programmers,所以不要以为这只是我一秒钟不考虑之后在这里发布的转储。
要在两台计算机之间创建连接,应使用套接字。去谷歌上查询。
我不是在寻找这种技术帮助。我知道如何实现该软件,这不是我第一次这样做。请看看我问的实际问题。
有问题的软件
我正在开发类似蛇的多人游戏,玩家可以使用自己的算法来确定蛇的下一步行动。播放器通过客户端-服务器连接彼此连接,即,一个播放器将充当主机。您可以假设服务器代码将等到所有玩家轮到自己,直到更新所有客户端之间的游戏状态为止。
关于游戏
我的游戏在文件夹中搜索任何兼容的.jar文件,这些文件的主类扩展了特定的抽象类。然后,玩家可以通过直接连接到其他玩家或通过在大厅搜索游戏来通过网络连接到其他玩家。
在玩游戏时,每个玩家将使用自己的算法来确定其蛇的下一步动作。每个游戏的持续时间可能会有所不同,具体取决于为游戏指定的更新速率,但是大多数情况下它们的速度很快,并且很可能会在不到30秒的时间内结束。
我还没有实现实际的网络多人游戏。
逻辑的模板源文件如下:
package template
import snake.*;
public class TemplateLogic extends SnakeLogic {
@Override
public void onLaunch() {
}
@Override
public String getMove() {
return "UP";
}
}
Run Code Online (Sandbox Code Playgroud)
因此,从主机播放器的角度来看,我打算做的是以String格式(“上”,“下”,“左”,“右”)通过网络获取播放器的下一个动作,因此在这方面不会有任何安全问题。每个客户用来确定其下一步行动的实际程序只能在相应客户的计算机上运行。
我希望你到目前为止一直在关注我。无论如何,我现在担心的是我可能忽略的任何其他坑洼。确定所有这些坑洼可能是一件繁琐的工作,因此,我主要不会问这个。我对这件事的见解是我所期望的。理想情况下,我可以从不同的人的多个答案中得到更大的了解。
浮现在其他问题之上的问题是,我可以阻止任何客户端在其程序上使用会损害其他播放器用户体验的方法吗?例如,这样的方法Thread.sleep():如果玩家让他的算法在每次移动之间等待10分钟,那将很烦人。对于这个特殊的问题,我认为应该为每个动作设置一个时间限制,在此之后,落后的/恶意的玩家将被踢出或被分配一个默认的动作,以便游戏可以正常继续。
音符:
@Darinth的回答让我想起了游戏的一个非常重要的方面:允许用户输入,这意味着蛇的下一步可以由人类玩家决定-也就是说,可以使用键盘正常玩游戏。此外,没有任何限制会限制您在纯AI和仅键盘解决方案之间进行选择:您可以将它们混合在一起,例如,自己控制蛇,并在发现自己将自己陷入陷阱时让AI接管。
我忽略了大事吗?我已经计划将这作为我和我的朋友一起度过的一个小项目,与他们共度时光,但是我有点发烧友。
无论您的想法有多小,请不要犹豫。如果您想到更多的兴趣点,以后可以编辑答案以更全面。我会定期检查所有答案以进行修改。
感谢您的时间。
每一步之后,将游戏状态的哈希值与所有客户端进行比较。除具有相同哈希值的所有玩家外,所有其他玩家都将被踢出,并具有将主机保留在游戏中的最低要求(如果有4位玩家,其中2位玩家拥有一个哈希,其他2位玩家拥有另一个哈希,不包含主持人的组将被踢出,依此类推)。我想出了这个,但是要感谢@ToYono,所以功劳归功于他。
在游戏开始之前,比较每个玩家的校验和。与主机的校验和不同的所有玩家将被踢(或什至不允许进入游戏)。归功于@ToYono。
随机化任何排名匹配。阻止有效使用从同一台计算机使用多个连接来玩同一游戏。如果一个玩家在一个游戏中玩多条蛇,他可能会拥有一种试图合法地玩游戏的算法,而两种算法只是在破坏另一名玩家。归功于@Surt。
允许用户输入。从一开始就将其设计为游戏的一部分,但我忘了提及它。感谢@Darinth提出了可能性,因此使我想起了这一重要方面。
如果一个玩家可以作弊,那么有些玩家就会作弊。那么最容易作弊的方法有哪些呢?
1)改变游戏状态,有效撤销之前的动作。
所有其他玩家和/或服务器应该验证更新,因为它是谨慎的值,您处理它应该不是问题。客户端检查可能就足够了,但是敏锐的黑客可以通过将检查更改为类似的内容来破解检查
bool allowedMove() { 返回 true; ...此处保留原始检查代码}
那么必须通过代码 SHA3 的校验和来抵消哪个?MD5 的安全时代即将结束。
示例:WoW teleport hack,x,y,z 在客户端计算并发送到主机。
2)非人性的反应速度,有效消除人为延迟。在你的游戏中这不是问题,除非速度更快可以提供更多的动作,但这是在程序之间,所以......它们可能总是比人类更快。
3)自动瞄准确保非人性的高命中率。
示例:射击游戏 XXX
4) 使用其他外部帮助程序
示例:在线国际象棋游戏,作弊者使用国际象棋程序来帮助走棋。
5) 多方拳击,有些玩家可能有多台电脑合作取胜
示例:可能发生在射击游戏中吗?
6)预先计算所有游戏状态,以便作弊者可以使用最优策略。
示例:井字游戏
7)创造新的身份来击败收视率。
8) 赢得交易
示例:魔兽世界战场
如果未与正确的对手配对,请断开连接以避免其注册。即使没有作弊,断开连接也经常发生(如果你想减少这种情况,请不要玩无线或手机)。
检测 2 个 Mac 地址是否以不同的身份进行多次比赛,并且每台 Mac 上只有一个获胜。
9) 失败时请断开连接。
X)未知的未知(相对于已知的已知、未知的已知、已知的未知)
示例:逃税
总是存在漏洞、漏报或虚假收入报告、欺诈性的新扣除等。
幸运的是,总有一种方法可以找出某人是否作弊到最高位置,您可以检查他们提交给程序的算法并查看其作弊情况。请注意,您将检索到的程序可能是假的,但测试它是否可以赢得这么多可能是微不足道的。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |