【发布时间】:2011-01-31 12:16:21
【问题描述】:
我正在为游戏编写分数提交系统,我需要确保返回服务器的报告不会被伪造(也就是被黑客入侵)。
我知道我可以在程序中存储密码或私人密码来验证或加密请求,但如果程序被反编译,狡猾的黑客可以提取密码/密码并使用它来伪造报告。
是否存在完美的解决方案?
提前致谢。
【问题讨论】:
标签: encryption passwords cryptography
我正在为游戏编写分数提交系统,我需要确保返回服务器的报告不会被伪造(也就是被黑客入侵)。
我知道我可以在程序中存储密码或私人密码来验证或加密请求,但如果程序被反编译,狡猾的黑客可以提取密码/密码并使用它来伪造报告。
是否存在完美的解决方案?
提前致谢。
【问题讨论】:
标签: encryption passwords cryptography
没有。你所能做的就是让作弊者难以为继。
您没有说您正在运行什么环境,但听起来您正在尝试解决代码身份验证问题*:知道正在执行的代码实际上就是您认为的那样。这是一直困扰网游的问题,一直没有好的解决办法。
此类系统通常被破坏的常见方式:
Punkbuster 是试图解决其中一些问题的系统示例:http://en.wikipedia.org/wiki/PunkBuster
也可以考虑http://en.wikipedia.org/wiki/Cheating_in_online_games
很有可能,这对您的游戏来说太难了。在你的二进制文件中隐藏一个公钥并对剩下的所有内容进行签名可能会让你在安全方面遥遥领先。
* 抱歉,我实际上不记得它的正式名称是什么。我一直在想“运行代码身份验证”,但谷歌没有给出这个术语。
【讨论】:
您可以做一件事 - 记录所有用户输入并将其作为提交的一部分发送到服务器。然后,服务器可以通过游戏引擎的本地副本重放输入以确定分数。不过,显然这并不适合所有类型的游戏。根据游戏的不同,您可能需要包括重放保护。
另一种可能适用于某些类型游戏的方法是在提交内容中包含高分比赛的视频记录。提供指向高分表中视频的链接,以及报告可疑条目的链接。这将让您“众包”作弊检测 - 如果作弊者的分数达到第 1 位,那么得分为 2 到 10 的玩家有很大的动力为您验证视频。如果分数被报告的次数足够多,您可以自己检查视频并决定是否应将其删除(并且用户禁止)。
【讨论】:
Dictionary 或 HashSet 时返回元素的顺序是未定义的。