2013-07-29 135 views
0

我想开发一个与Java服务器通信的Flash游戏(使用ActionScript 3)来保存玩家的统计数据,分数和类似内容。但是,如何创建从闪存文件到服务器的保存通信,以便它可以使用其他一些工具连接到服务器和虚假操作来欺骗分数,因此它是而不是开发需要与服务器安全通信的Flash游戏

有没有办法做到这一点?

我的解决办法

游戏本身连接到管理整个游戏和所有的“计算”之类的东西都在该服务器上完成,每一个动作的用户不会被发送到服务器服务器和游戏所做的一切都由服务器控制。

因此,Flash文件真正唯一能做的就是显示图形。

但是:有没有更好更安全的方法来做到这一点?或者这是否是最好的解决方案?

因为如果flash文件也会计算游戏中发生的事情,而不仅仅是显示图形,那将会更容易。

请告诉我你将如何解决这个问题。

+0

你不能用秘密的盐对它进行编码和解码。只有你的Flash游戏和你的服务器知道如何解码它(用这个秘密盐)。用户将无法以这种方式作弊。 – putvande

+0

但是反编译闪存文件并得到秘密盐是可能的。不是吗? – MinecraftShamrock

回答

1

你只能做一个完全安全的游戏方式是让在所有的游戏逻辑(如你所建议的)并验证从客户端发送的每一个动作。客户端角色只能显示图形并进行任何不影响游戏机制的计算。切记客户端的任何代码都是可以破解的。

+0

是的。顺便说一下,闪存实际上可以反编译? – MinecraftShamrock

+0

当然,swf很容易反编译使用反编译工具,如sothink swf反编译器。甚至还有在线反编译工具,比如showmycode.com –

+0

即使在服务器端的所有逻辑上,由于玩家的PC仍然控制输入,他仍然可以通过不可能的输入来欺骗游戏(这是众多技巧之一的TAS球员,顺便说一句)。而且,通过让所有逻辑服务器端引入输入和显示之间的滞后,这对于多人游戏来说是完全可以接受的,但是对于单人游戏和排行榜来说更具争议性。 – Aralicia

1

最终,即使您的服务器完全控制您游戏中发生的事情,您仍然无法确保有人不会作弊。作为一个例子,任何真正想要它的人都可以反编译你的游戏,并创建一个可以在敌人身上自动生成的“新客户端”。 这就是说,我recommanding你从以前的问题,请阅读以下答案:

There is nothing you can do to prevent an attacker from forging high scores

Raising the bar for cheating above what a player would deem worth surmounting

+0

我有2个关于你的答案的说明:1.对于某人反编译并创建一个自动瞄准的新客户端将是一件艰苦的工作。 2.你仍然可以尽可能地添加服务器端验证,例如验证每秒钟有多少emeny被杀死,它们被发射的频率以及每次发射之间的时间是否相同等等等等等等。 –

+0

鉴于可用工具的数量,在AS3中反编译 - 重新编译并不困难。如果添加服务器端检查可能会检测到作弊,人们会找到这些检查的解决方法。而且,您添加的检查越多,服务器需要的功能越强大。我们在AAA游戏的一个战斗区进入这里:开发者和黑客经常试图互相攻击,没有真正的赢家,只有双方都是临时胜利。现在,反作弊策略不能阻止作弊,只能阻止作弊者。 – Aralicia