
Secure Online Highscore Lists for Non-Web Games我正在玩我正在编写的本机(非网络)单人游戏,但我发现拥有每日/每周/全天候在线高分榜(例如Xbox Live排行榜)将使该游戏成为现实 更有趣的是,增加了一些(少量)社区和竞争。 但是,恐怕人们会看到诸如黑客邀请之类的功能,由于分数过高而使常规玩家望而却步。 我想到了防止此类尝试的明显方法(例如,公钥/私钥加密),但是我已经找到了合理的简单方法,黑客可以绕开我的所有想法(从二进制文件中提取公钥,然后发送伪造的加密文件 分数)。 您是否实施过在线高分榜或排行榜? 您是否找到实现此目的的合理的防黑客方式? 如果是这样,您是如何做到的? 您对骇客入侵有什么经验? 归根结底,您要依靠信任客户。如果客户端将重播发送到服务器,则很容易复制或修改成功的播放并将其发送到服务器。 最好的选择是提高作弊标准,超越球员认为值得超越的标准。为此,可以使用许多行之有效的(但经常未提及)的技术: 当游戏在用户控制下的系统上运行时,没有任何解决方案会是完美的,但是您可以采取一些步骤来增加对系统的黑客攻击。最后,目标只能是使系统遭受更多的麻烦而不是值得的。
总而言之,要使游戏足够流行以使人们能够关心它,这可能是一个更大的挑战。 老实说,我认为不可能。 在使用非常简单的带有加密二进制文件的密钥加密之前,我已经做到了这一点,对于我需要的安全性来说,它已经足够好了,但老实说,如果有人认为破解您的在线高分表会被黑客破解。 那里有一些很伤心的人,他们碰巧也很聪明,除非你能把他们全都放在这是一个失败的原因。 如果您的游戏内置了重播系统,则可以将重播提交到服务器,并让服务器从重播中计算分数。 这种方法并不完美,您仍然可以通过放慢游戏速度(如果它是基于动作的)或编写机器人来作弊。 我在Flash游戏中一直在做这些事情,这确实是一场失败的战斗。特别是对于无需过多努力即可将其反编译为可读代码的ActionScript。 我这样做的方式是一种比较传统的方法,即以纯文本形式发送得分和玩家名称,然后将两者的哈希值发送(适当加盐)。很少有人有足够的决心去努力解决这个问题,而很少有人愿意这样做,而您一直都在否定它。 总而言之,我的理念是花时间使游戏变得更好,并且使其难以欺骗。 可能非常有效的一件事是,让游戏在您玩游戏时多次将分数提交到服务器,每次发送一点游戏信息,从而使您可以验证分数是否"真实"。但这确实有点过头了。 这是一个非常棘手的问题。 我从未实现过这种东西,但是这里有一个简单的替代方法。 您最主要的担心是由于黑客猜测您的应用程序正在做什么,然后发送自己的结果。 好吧,首先,除非您的应用程序取得了巨大的成功,否则我不会担心。这样做非常困难。 加密不会解决问题。您会看到,加密有助于按途保护数据,但在加密数据之前(这可能是主要漏洞所在),它并不能保护事务的任何一方。因此,如果您对密钥进行加密,则数据将保持私有,但并不安全。 如果您真的对此感到担心,我建议您以一种不太明显的方式来混淆代码并设计评分系统。在这里,我们可以从加密协议中借用一些东西。这是一个例子: 如您所见,这只是另一种混淆。您可以根据需要随意走下去。例如,您可以查找最接近X的两个质数,并使用它们对CRC进行加密,并将其也发送到服务器,以便分别使用不同的加密方案来获得CRC和得分。 如果您将其与混淆结合使用,我会说很难破解。尽管如此,即使这种情况可能会被逆转,这完全取决于黑客的兴趣和能力,但是……严重的是,什么样的怪胎需要花费大量的精力才能改变游戏的结果? (除非是魔兽世界之类的) 最后一点 NET的混淆器 Delphi / C ++的混淆器 汇编器混淆器(x86) 您不能在不受信任的客户端平台上执行此操作。实际上,甚至有可能击败某些"受信任"的平台。 在一般情况下,有多种无法检测的攻击-主要是修改内存中的变量。如果您不信任自己程序的变量,那么您将无法真正实现很大目标。 上面概述的其他技术可能有所帮助,但不能解决在不受信任的平台上运行的基本问题。 出于兴趣,您确定人们会尝试破解高分表吗?我在网上玩了两年多的比赛,其中有一个琐碎的克拉克贝高分桌。很多人演奏过它,但我没有证据表明有人试图破解高分。 @马丁 我相信这就是Mario Kart Wii运作的方式。额外的好处是您可以让所有其他玩家观看高分持有者如何获得高分。有趣的是,如果您查看最快的"火山爆发"时间踪迹,您会发现有人找到了一条捷径,可以让您跳过95%的轨道。我不确定他们是否仍将其作为最快的时间。 就像另一个答案所说的那样,您被迫信任一个潜在的恶意客户端,简单的威慑力加上一点点人工监控就足以构成一个小游戏。 如果您想花哨的话,则必须在分数数据中查找欺诈行为,这种欺诈行为与信用卡公司查看费用数据相同。客户端与服务器通信的状态越多,通过代码查找正确或错误行为模式的可能性就越大。例如。假设客户必须上传基于时间的比分审核日志(也许您也可以使用该日志来让其他客户观看热门游戏),然后服务器可以验证比分日志是否违反了任何游戏规则。 最后,这仍然是使其昂贵到足以阻止欺骗计分板。您需要一个始终可以改进(更易于更新)服务器代码以应对验证系统上任何新攻击的系统。 通常,防止欺诈和黑客入侵的最大防御者是社区监视。如果分数看起来相当可疑,则用户可以报告分数以作弊。如果有足够多的人报告该分数,则管理员可以检查重播的有效性。如果已经有很多玩家完全合法地玩游戏,那么很容易看出机器人与实际玩家之间的区别。 管理员只能监督那些受到质疑的分数,因为一小部分用户可能会大肆删除一个辛苦赚来的分数。管理员只需查看确实得到报告的一些分数,就可以节省很多时间,甚至对于小型游戏来说也更少。 即使只是知道如果您努力制作一个机器人,而被报表系统再次击倒,这本身也是一种威慑力。 甚至加密重放数据也不会受到损害。重播数据通常很小,并且对其进行加密不会占用太多空间。为了改善这一点,服务器本身将尝试通过控制日志重播,并确保它与所获得的分数相匹配。 如果有一些反作弊系统找不到的东西,用户会找到的。 |