我正在玩我正在编写的本机(非网络)单人游戏,我发现每天/每周/所有在线高分榜(想想Xbox Live排行榜)会让游戏变得有趣更有趣的是,增加一些(小)社区和竞争.但是,我担心人们会看到这样的功能,如黑客的邀请,这会因为不可能的高分而阻碍普通玩家.
我想到了防止此类尝试的明显方法(例如公钥/私钥加密),但我已经找到了相当简单的方法,黑客可以绕过我的所有想法(从二进制文件中提取公钥,从而发送假加密比分,例如).
你有没有实现在线高分榜或排行榜?您是否找到了合理的防黑客方式来实现此功能?如果是这样,你是怎么做到的?您对黑客攻击的经历是什么?
在一天结束时,您依靠信任客户.如果客户端将重放发送到服务器,则可以轻松地复制或修改成功的游戏并将其发送到服务器.
你最好的选择就是提高作弊标准,超出玩家认为值得超越的标准.要做到这一点,您可以使用许多经过验证的(但未提及的)技术:
将黑名单作弊者留在蜜罐中.他们可以看到自己的分数,但没有其他人可以.除非他们通过使用其他帐户登录进行验证,否则他们认为他们已成功入侵您的游戏.
当有人被标记为骗子时,将任何帐户影响推迟到将来某个特定点.在一到三天内将这一点随机化.通常情况下,骗子会尝试多种方法并最终成功.通过将帐户状态反馈推迟到以后的日期,他们无法理解是什么让他们被捕获.
捕获所有游戏用户命令并将其发送到服务器.根据给定增量内的其他分数验证它们.例如,如果玩家使用了200次射击动作,但获得了200,000的分数,但是游戏中的邻近玩家射击了5,000次以获得210,000的分数,则可能触发标记该人的进一步或人类的阈值调查.
为您的用户帐户添加价值和持久性.如果您的用户帐户具有游戏的解锁功能,或者您的游戏需要购买,则禁令的权重会更大,因为用户无法通过基于网络的代理创建新帐户来重新获得之前的帐户状态.
当游戏在用户控制的系统上运行时,任何解决方案都不会是完美的,但是您可以采取一些步骤来破解系统的麻烦.最终,目标只能是让黑客攻击系统比它的价值更麻烦.
使用高分请求发送一些其他信息以验证服务器端.如果你每X得到5分,并且游戏只包含10个X,那么你就有了一些额外的箍来让黑客跳过来让他们的分数被认为是有效的.
让服务器发送一个随机挑战,必须从该偏移量中获得游戏二进制文件的几个字节.这意味着黑客必须保留二进制文件的原始副本(只是更麻烦).
如果您有许可证密钥,需要高分才能包含它们,因此您可以禁止被黑客攻击系统的人员.这也可以让您跟踪上面定义的无效尝试,禁止人们在提交有效分数之前测试协议.
总而言之,让游戏流行到足以让人们去关注它的游戏可能是一个更大的挑战.
老实说,我认为这是不可能的.
在使用非常简单的密钥加密和压缩二进制文件之前我已经完成了它,这对于我需要的安全性来说已经足够好了但我老实地认为如果有人认为破解你的在线高分表就会完成它.
有一些非常伤心的人在那里也恰好相当明亮,除非你能让他们全部放下它是一个失败的原因.
我一直在用我的Flash游戏做一些这样的事情,这真的是一场失败的战斗.特别是对于可以反编译成有些可读代码的ActionScript而不需要太多努力.
我一直在做的方式是一种相当传统的方法,用纯文本发送得分和玩家名称,然后是两者的哈希(正确腌制).很少有人决心做出足够的努力去解决这个问题,而且很少有人会这样做,否则你会把它放进去.
总而言之,我的理念是花时间让游戏变得更好,让它变得更难以作弊.
可能非常有效的一件事是让游戏在你玩游戏时多次将分数提交给服务器,每次发送一些游戏信息,让你验证分数是否"真实".但这可能有点过分了.
如果您的游戏内置了重放系统,您可以向服务器提交重播并让服务器计算重播的分数.
这种方法并不完美,你仍然可以通过减慢游戏速度(如果它是基于动作的)或者通过编写机器人来作弊.