我正在寻找在运行 Flash 的客户端和服务器之间传递数据的安全方法。相关数据将由 Flash 应用程序生成,在本例中是您完成游戏后的得分。我想验证服务器上的数据未被篡改。有哪些好的方法可以完成这项工作?

一种简单的方法是对数据执行一些操作(例如哈希),并将哈希与数据一起传递回服务器。然而,有权访问客户端源代码的人很容易破坏这一点。

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

有帮助吗?

解决方案

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

无论你做什么,没有什么可以完全防止黑客攻击,但这将阻止除了最坚定的人之外的所有人。

更新: @标记:Flash 本身支持 SSL。

其他提示

在不可信平台上运行的代码能否保持其完整性?不,几十年来被破坏的版权保护计划让我认为这是不可能的。在受信任的沙箱中运行相反的恶意代码是可行的,但解决问题的最好办法就是让人们不方便作弊。

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

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

@jcnnghm您通常不想使用公共密钥加密(RSA,DSA)进行大量数据加密,这是由于其较大的计算时间。公钥加密应该用在安全协议的握手和密钥协商阶段,但批量数据加密应该由对称密码(例如 AES 和 TDES)处理。TLS 和 SSL 协议就是这样工作的。

只要人们能够获取可执行文件(除非您想在锁定的信息亭上运行游戏,情况总是如此),就没有完全安全的方法来做到这一点。

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

我同意关于没有任何东西可以证明黑客的答案。因为一旦你可以读取它,你就可以操作/复制它,从而反编译它。

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

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

这样做的缺点可能是太多的同时玩家会降低服务器的回复速度,从而导致“假超时”+让游戏服务器容易遭受 DoS 攻击。

但是,在用户拥有会话时更新“会话密钥”,将需要一些额外的会话管理,但如果这会让作弊者更加努力,我一定会尝试一下:o)

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

最后一点是将您的应用程序划分为模块/级别等。这样您就不必通过启动来访问每段代码。

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

希望这对您的想法有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top