2

我正在寻找在运行 Flash 的客户端和服务器之间传递数据的安全方法。有问题的数据将由 Flash 应用程序生成,在这种情况下是您完成游戏后的分数。我想验证服务器上的数据是否未被篡改。有什么好的方法可以完成这项工作?

一种简单的方法是对数据执行一些操作,例如散列,然后将散列与数据一起传回服务器。但是,可以访问客户端源代码的人很容易打破这一点。

编辑:我意识到没有什么是不可破解的,但我想让它尽可能地困难。@jcnnghm 使用公钥加密数据并可选择使用游戏日志进行完整性检查和/或重新计算的解决方案是我认为的最佳选择。SSL 加密也是一个好主意,因为这使得破译实际发送回服务器的内容变得更加困难。

4

5 回答 5

3

使用存储在二进制文件中的公钥加密数据。这将提高攻击的进入门槛。除此之外,在数据到达服务器时对其进行完整性检查。这可以像计算每个游戏时间单位实际可以获得的最大分数一样简单,或者将游戏日志传输回服务器以确保得分正确。

无论您做什么,都不会完全防黑客,但这将阻止除最坚定的人之外的所有事情。

更新: @mark:Flash 原生支持 SSL。

于 2008-09-05T18:16:27.857 回答
2

在不可信平台上运行的代码能否保持其完整性?不,几十年来被破坏的复制保护计划让我假设这是不可能的。在受信任的沙箱中运行的反向恶意代码是可行的,但您能对问题做的最好的事情就是让人们不方便作弊。

于 2008-09-05T18:06:07.443 回答
1

在http://code.google.com/p/as3crypto/查看 AS3Crypto 包。我没有尝试过,但这个包声称(部分)支持 TLS 1.0 协议。

TLS 将在您的 Flash 应用程序和服务器之间提供安全隧道。 http://en.wikipedia.org/wiki/Secure_Sockets_Layer

@jcnnghm 您通常不想使用公钥加密(RSA,DSA)进行批量数据加密,因为它的计算时间很长。公钥加密应该用于安全协议的握手和密钥协商阶段,但是批量数据加密应该使用对称密码,例如 AES 和 TDES。TLS 和 SSL 协议以这种方式工作。

于 2008-09-05T18:21:27.050 回答
0

只要人们可以获取可执行文件——除非你想在锁定的信息亭上运行游戏,否则总是如此——没有完全安全的方法可以做到这一点。

音乐和电影行业在 DRM 上花费了数千万美元,而家庭爱好者在几天/几周内就破解了它。如果他们不能保护他们的东西...

于 2008-09-05T18:00:35.413 回答
0

我同意关于没有什么是黑客证明的答案。因为一旦您可以阅读它,您就可以操作/复制它并因此反编译它。

我一直在计划的另一种方法是生成唯一键 pr。玩家会话(包括某种时间/日期作为盐值)。

然后在整个应用程序中,可能会定期提交/传输状态分数并获得一个新的有效密钥。如果此同步失败,则中断整个会话。

这样做的缺点可能是太多的同时玩家降低了服务器的回复速度,因此造成“假超时”+让游戏服务器为 DoS 攻击打开。

但是在用户进行会话时更新“会话密钥”会要求额外的会话管理,但如果它会让作弊者更加努力,我一定会尝试它:o)

另一方面,没有什么是防黑客的,所以不要 100% 相信它——无论你想出多么聪明的解决方案。

最后一个注意事项是将您的应用程序划分为模块/级别等,这样您就不会通过启动它来访问每一段代码。

目前我的计划是建立一个大型的多层次世界,客户端/玩家只会获得附加到玩家所在部分的文件。

希望这对您的想法有用。

于 2009-08-09T20:24:11.503 回答