2013-07-29 73 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