谷歌游戏服务中的虚假得分

8

一些记分牌收到了虚假的得分提交。以下是一个例子:

前三个得分看起来是虚假的

我制作的游戏也发生了同样的事情。有没有办法保护自己免受虚假提交,并且有没有一种方法来管理记分牌?


你有没有找到除了隐藏作弊者的虚假分数之外更好的对抗方式? - shelll
1
适用于大家。在Github上有一个来自Google游戏服务的管理工具 https://github.com/playgameservices/management-tools/tree/master/tools/hide-o-matic 阅读介绍以了解如何使用它 =) - user3487188
2个回答

11

用户造假最简单(也是最流行的?)的方法就是使用root访问编辑保存的数据

以下是几个简单的步骤,可以使得造假更加困难:

  1. 不要将分数直接存储在内存中或者保存状态中。例如,可以使用乘以/除以一个因子和加上一个常数的方式来存储。更好的选择是实现加密的共享首选项。
  2. 在存储分数的数据结构中添加校验和(CRC32、MD5)。
  3. 在从保存的状态中加载或者在内存中读取/写入时,验证分数以检查是否有人篡改了它。
  4. 使用ProGuard来混淆你的代码。如果你正在赚钱,使用DexGuard会更强大,还会使软件盗版更加困难。

你能再解释一下第三点吗? - jesses.co.tt
2
基本上和(2)一样 - 验证CRC码。 - sagis

7
我推荐两个技巧:
  1. 在开发控制台为排行榜添加最大值和最小值。如果您的排行榜是基于总星数的,并且游戏中只有180颗星星,那么请将180设为最大值。这将确保作弊者不能添加虚假得分。
  2. 查看 players.hide()调用。这将隐藏玩家及其所有得分,使公共排行榜上没有人可以看到它们。请注意,此REST调用并未内置到移动库中;您需要创建自己的迷你web应用程序(或直接进行curl调用)才能使用此调用。

2
这并不能完全解决问题。即使是180分的成绩也可能是作弊者提交的虚假成绩。谷歌应该想办法处理提交虚假高分,就像他们处理应用内购买一样,通过签署每个提交分数请求来实现。 - shelll
你无法阻止虚假分数的出现,你所能做的只是让它更难实现。 - kupsef
@Todd 在 player.hide() 调用中,我们从哪里获取参数“playerid”的值?(如果您不介意的话) - DroidHeaven
@DroidHeaven,您可以通过进行scores.list()调用来获取它们 - 这将让您查看已向该排行榜提交了内容的每个玩家的所有分数/玩家ID。 - Todd Kerpelman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接