2010-04-24 72 views
0

我已經獲得SWF編輯AS代碼中的鏈接。 事實上,SWF使用了由數據庫中的PHP代碼生成(實際檢索到)的一些XML。提取SWF在Adobe Flash CS4中給出編譯器錯誤

menuXML.load("/sub/page/dynamic.php?genre=" + genre); 

所以關鍵是我們可以使用相同的SWF「mainfraim」,並與dynamic.php?流派= ###

提供基於現在的鏈接不同的動畫/來源填補他們,我已使用Flash Decompiler Gold提取SWF中的所有文件,並可以在Adobe Flash中再次打開它以進行編輯。完成後,我輸入CTRL + ENTER,並立即出現4個編譯器錯誤!錯誤: 1x <遇到意外'if'遇到> 2x <語句塊必須以'}'結尾> 1x <在'。'之後出現字段名稱。運營商。 >

當原始的SWF工作正常時,這些錯誤如何出現?

如果我不能解決這個問題,我將不得不瞭解如何創建SWF嘗試使用的.php文件,它可以從數據庫中選擇適當的資源(我猜)來顯示它們(使用?genre = ###)

謝謝!

回答

3

我不知道我理解你的問題,但似乎你需要改變傳遞給加載方法的url。它也似乎是你的SWF是ActionScript 2.0。

反編譯器的工作類型,但您可以使用反編譯器生成的fla文件很少用於生成相同的swf。有時代碼是非法的,幾乎總是圖形被擰緊。

我曾經做過一些簡單的代碼更改(如更改一些網址和其他簡單的東西)到一個swf,我們沒有源代碼(他們丟失了,沒有備份...)。

我用這個flasm它工作得很好(也不像我第一次假設那麼辛苦)。

Flasm不是反編譯器,而是反彙編器。它需要你的swf,解析動作字節碼,並生成一個類似彙編代碼的文本文件。您可以編輯該代碼並重新組裝swf。它不會觸及圖形和動畫,所以這是我需要的,也許可以爲你工作。

我做了一個小測試,它工作正常。

我開始使用此代碼在FLA:

var xml:XML = new XML(); 
xml.ignoreWhite = true; 
xml.onLoad = function(ok:Boolean):Void { 
    if(ok) { 
     _debug_txt.text = "ok"; 
     _debug_txt.text = xml; 
    } else { 
     _debug_txt.text = "error"; 
    } 
}; 

xml.load("/sub/page/dynamic.php"); 

接下來,我打開一個命令提示符(我在Windows上),cd到包含SWF和運行目錄:

flasm -d test_flasm.swf > test_flasm.flm 

這將swf分解爲文本文件test_flasm.flm。我在我的可執行文件路徑中添加了flasm,但是您可以使用flasm.exe的完整路徑。

的.flm文件的相關部分看起來是這樣的:

setMember 
push '/sub/page/dynamic.php', 1, 'xml' 
getVariable 
push 'load' 
callMethod 

此致可能會有所不同,但如果您要查找的網址,你會發現它。其次,改變了網址:

setMember 
push 'test.xml', 1, 'xml' 
getVariable 
push 'load' 
callMethod 

然後,我用重組的SWF:

flasm -a test_flasm.flm 

而現在,test_flasm.swf負荷 「的test.xml」,而不是「/分/頁/動態.PHP」。

希望這會有所幫助。