Flash遊戲修改入門教程
作者:tank 日期:2006-08-03
Flash遊戲修改入門教程
讀者:Game愛好者、Flash愛好者、Crack愛好者
對象:魔塔Flash遊戲
工具:Sothink SWF Decompiler MX2005、Flasm V1.52、Hex workshop十六進位工具
前言:這段時間忙裏偷閒,在網上Down了幾個Flash遊戲來玩玩,想不到有些遊戲難度有點大,但偶又不想花太多時間來打破它,自然就要請出遊戲修改的工具:金山遊俠,但像遊俠這類工具並不能對flash遊戲進行修改,後來拿出系統調試器SoftIce,跟了一會,頭暈啊,竟然找不到任何有價值的東西。其實我的要求並不高,為什麼那麼難搞?後來查了網上的一些資料,並看到網上有很多人問修改flash遊戲的問題,所以就產生此文。本系列教程將由淺入深地系統介紹Flash遊戲的反彙編及修改等問題
一、 Flash簡單介紹
Flash是Macromedia 公司開發的向量圖形動畫編輯工具。Flash的優點是它獨立於流覽器之外,只要給流覽器加入相應的插件就可以觀看Flash動畫,佔用帶寬小,比標準的GIFs和JPEGs更靈活,體積更小,且Flash播放時還可以帶聲音,所以Flash非常適合用於網頁上表示多媒體的內容。Flash內含了ActionScript技術,可以讓程式師應用其編輯動畫的腳本,從Flash5.0開始程式和動畫的技術結合正式應用到了Flash編輯的網路動畫中,ActionScript腳本的簡單易學和易用性使初級愛好者也能快速的掌握其應用法則,創作出簡單的帶有程式的動畫。Flash遊戲正是利用Flash的交互性及ActionScript腳本控制來製作的。
二、 工具介紹
古語“公欲善其事,必先利其器”,在對Flash遊戲修改前,必須找幾個好工具。我們知道Flash遊戲是利用腳本來控制的,這些腳本是有點像VB程式一樣,由Flash播放器邊解釋邊執行的,所以用普通的調試器如SoftIce來跟蹤會跟不到核心的內容,必須找到相應的反編譯工具。本文介紹兩個Flash反編譯工具。一個是Sothink SWF Decompiler MX2005,介面如圖。左邊是檔列表,中間是Flash預覽或腳本流覽區,右邊是Flash資源列表框,其中腳本就在裏面。
圖1
這個工具最實用的是腳本反編譯,可以把腳本譯成ActionScript的格式,非常方便閱讀,或者譯成P-code的格式,這個格式是Flash由ActionScript腳本生成的中間代碼, P-code可以由播放器直接解釋執行。另外Sothink SWF Decompiler MX2005還可以把swf格式的檔轉譯成Fla格式的檔,這樣在Flash MX編輯器中就可以直接打開Fla檔進行修改。另一個工具是Flasm,就是Flasm asm的簡稱,這個工具是運行在dos命令提示符下,它可以把Flash檔中的腳本反編譯出來,形成一個腳本檔,也可以把修改後的腳本檔編譯進Flash檔,後面的實例就我們就是使用這個方法的。
三、 Flash遊戲修改思路
普通單機遊戲程式一般是VC編譯生成的PE格式程式,這些代碼可以在記憶體中直接執行,生命值等資料可以直接放到記憶體中,而Flash遊戲程式是由一些中間代碼來組成,在flash播放器裏執行的,生命值等只會在播放器中出現,所以不要直接搜索記憶體,也不要償試製作記憶體補丁什麼的。我這裏採用的方法是用Flash反編譯工具,由於生命值及程式流程等內容都會在腳本中出現,所以只要對腳本進行修改,再改修改後的腳本編譯進Flash程式中就可以達到修改Flash遊戲的目的。可能有人會問,為什麼不用調試器,如Ollydbg、softice等來跟蹤,定位要修改的資料?用過Ollydbg跟蹤過VB的P-code格式程式的讀者可能對這個印象較深,用調試器跟入那些中間代碼,往往只會在播放器的代碼中轉來轉去,而並沒有跟入我們的Flash遊戲代碼中間。所以目前比較簡便的方法就是修改Flash的腳本來達到修改遊戲的目的。
四、 實例修改Flash遊戲
這次出場的主角是經典RPG遊戲:魔塔,這個是類似迷宮式的遊戲。我們現在要來修改兩處:一是把全屏顯示改成視窗顯示,另外一處是修改生命值及攻擊防禦力。
首先用Sothink SWF Decompiler MX2005載入mota.swf程式,展開右邊欄的資源框,找到Action/MainMovie,如圖2。
在中間會顯示相應的腳本,這些腳本可以選擇功能表Code項查看ActionScript或P-code或原始資料。ActionScript簡單易懂,我們來看看關鍵的地方。
fscommand("fullscreen", "true");這一句是設置全屏,只要修改為false就可以設成視窗方式了。再往後看看其他腳本語句,看看有什麼感興趣的
大約在352行,發現在如下語句:
Now_life = 1;
Now_hp = 1000;
Now_gong = 10;
Now_fang = 10;
Now_money = 0;
這些就是主角的資料了,如Now_hp表示主角現在的生命,Now_gong為攻擊力,Now_fang為防禦力。由於後面我們的Flasm只能對flash反編譯成P-code的代碼,所以可以現在來看看上面這些腳本的P-code格式的代碼
_push "Now_life" 1
_setVariable
_push "Now_hp" 1000
_setVariable
_push "Now_gong" 10
_setVariable
_push "Now_fang" 10
這些是等價的。
有了這些資訊,現在要用flasm來進行修改mota.swf文件了。假設flasm.exe在c:\flasm15win,為了方便,把mota.swf檔也拷貝到flasm15win下。打開命令提示符,進入flasm.exe所在的目錄,由於這個mota.swf經過壓縮,現在我們來解壓,如圖3
圖3
再執行反編譯到mota.flm檔,如圖4,沒有錯誤提示,表示我們反編譯成功。
圖4
這樣在C:\flasm15win檔夾下會生成mota.flm腳本檔,現在我們用記事本來打開它,查找fullscreen字串,只找到一個,把它後面的true改成false,遊戲剛開始時生命是1000,所以查找字串:1000,定位下麵語句
push 'Now_life', 1
setVariable
push 'Now_hp', 1000
setVariable
push 'Now_gong', 10
setVariable
push 'Now_fang', 10
這裏就是設置主角初始值的地方(和Sothink SWF Decompiler MX2005反編譯的內容有點區別,不過內容一樣)。現在我們把1000改成50000,10改成500,然後保存文件。切換到命令提示符下,輸入flasm –a mota.flm,把修改後的腳本編譯進mota.swf檔,但會出現如圖5所示的錯誤。大概意思是第一行的包括非法字元。
圖5
現在我們用Hex workshop打開mota.flm檔,看看第一行處的內容,這裏為圖6所示的內容,可以看到EFBBBF為非法內容,把它刪除,再保存檔。(記事本修改就是這樣,為了保險起見,建議在Hex workshop中進行修改)
圖6
再執行flasm –a mota.flm,這次出現成功的提示,如圖7。
圖7
至此我們的修改工作結束。現在運行一下程式,進入打鬥時,是不是flash遊戲的主角的生命已經變成了50000?
總結
其實Flash的遊戲修改並不難,關鍵是以前其他修改遊戲的定勢思維的影響,使人覺得很難修改flash遊戲,其實有時換一個角度來解決問題可以很快解決一些“難題”。
flashm 下載