以前常常想辦法用偏門來改Flash網路遊戲的成績,後來好像越來越少Flash game的分數競賽贈獎,之前有個中華三菱 VIRAGE iO盃GT4大賽,不過後來被主辦單位刪除記錄,這就沒辦法了,今天早上收到台灣大哥大的贈獎信,省錢大作戰,後來用Sniffer看了一下(圖如下),發現這網站有奇怪的編碼,amf不知是什麼?問google,後來在Luar's Flash Playground查到AMFPHP等等訊息。

馬上利用Action Script Viewer來看看其中的程式。如下圖。

原來送出成績和個人資料是透過game_form.swf,在看看其內容。

發現用到NetConnection來保持Client和Server持續連線,避免偽造成績。
這下不能用最快的方式,利用HTML的FROM來傳值了。
且又用amf的remote web services,在ASV可看到。如下圖。

而dataIO是remote web services的物件,這也映證了,Sniffer所監聽到的封包,有addPersonal20050205。
那還有什麼方法可以解決,既然game_form.swf才是傳值的程式,那執行遊戲的game3.swf卻沒有做這方面的檢查,就從game3.swf來動手腳,找看看有沒有可以Decompiler SWF檔案的工具,很快的google又顯示了一套叫Sothink SWF Decompiler,很棒,可以Export FLA,試看看能否修改其成績起始值。
在Flash MX 2004很快的找到_aaaa_abc_xyz_score = 0,修改一下。
問題又來了,那Server端可能會檢查網址的來源,除非可以上傳到Server端,其實可以騙Browser,小弟想到兩種方式,1.自行架設DNS,再指到那DNS,等要傳值時在改成正確的DNS。2.利用靜態對應表,在WINDOWS\system32\drivers\etc\host檔案直接修改,此方法較不適用,如下補充。如下圖。

這兩個方法,都必須要架設Web Server,才可以。
把那檔案放到Web Server,清空Browser快取。下圖可看到修改過後的game3.swf。因為沒有相同字型所以字會跑掉。

分數不要用太高,只是看看這方法能否成功。

按下填資料拿獎品之前,要將靜態對應表修正回來,刪除剛剛所加上的對應。
這樣才能導向真正的game_form.swf,從下圖的左下角可以看到持續連線中。

關鍵時刻來臨,送出看看。排名第四,奇怪怎麼沒有更新排名呢?

其實網路贈獎就是這樣,很多都是廣告公司的問題,就像之前Philips科技大亨的贏家是位女生,其實當時很多人分數都很高(遊戲有疏失,鬍子老爹事件),但是決不可能是位女生得到冠軍(非男女歧視,而是分數高都是有作手腳),加上那女生非資訊科系,所以小弟當時認為是廣告公司的宣傳手法,找位外表亮麗的女生來做宣傳。
至於Flash Game能否防止這類的作弊方式,FlashCom是對付「遊戲積分排行榜作弊」的解決方法有說明,這省錢大作戰也是有用到,只是它是用在game_form.swf的ActionScript,所以很可惜,1.改進方式應該把遊戲也用NetConnection來檢查。其它Luar所談到的2.RTMP Protocol,3.Flash Remoting用戶認證,小弟對FlashCom不熟以後再研究看看。4.VHost.xml跟5.main.asc可能依然沒法防範本文所說的欺騙方式。感謝Luar的文章,在MAX2004中有談到Flash資訊安全,Luar網站有提供下載。
歡迎來信討論有關Flash安全相關問題。
最後,本篇文章只是以台灣大哥大遊戲案例來討論Flash Game的問題,並非建議使用這種方式來得到獎品,小弟不負任何後續的法律責任。謝謝。
補充(2005-02-21)
感謝Luar的回應,在其示範怎樣利用偽造DNS進行Flash遊戲積分作弊補足了小弟第一個方法沒有示範的遺憾,經過測試發現雖然靜態對應表改過後,Ping DNS也是馬上更改,但是Browser卻不會馬上更新,必須經過一段時間還會導向改過的DNS,而小弟寫這篇文章是一邊試驗一邊寫,所以才使得Browser經過一段時間更新了DNS,如果在限定時間回應的Flash Game就不是用靜態對應表的方式,因此經過Luar的糾正,此靜態對應表並不是一個好方式。再次感謝Luar的回應。
補充(2005-02-23)
因為這遊戲還有檢查FlashVars變數(如下圖),小弟之前文章並未提起,所以導致整個傳值並未完整,所以並非廣告公司問題,是小弟的疏失所導致,還他們清白。



