As3.0 decompiler反編譯器

作者: Molay

性質: 翻譯

閱讀次數: 24089

發表時間: 2007-07-25 15:34:52


原文:http://www.5etdemi.com/blog/archives/2007/01/as3-decompiler/
轉載中文請注明出處.感謝ws-forum 版主molay提交的As3.0文章.
     這原本是在一個法國 ASer 的博客上發表的兩篇文章,現在它們通過無線電傳到我這兒了,于是乎,我就把它們翻譯一下并發表在這里。這個 Tamarin 工具主要就是一個動作腳本字節編碼(Actionscript Byte Code,ABC)的反編譯器,它可以從 Swf 以及 ABC 文件中提取出便于我們閱讀的偽碼。之后,這些偽碼就能通過一系列的程序轉換成 AS3 源碼。這可是相當地可怕呀,不是么?


    讓我們來看看文章都說了些什么吧。首先作者向我們闡述了如何構建屬于你自己的編譯器。然后你就可以直接下載前面構建好的編譯器了。最后是我自己個人對本文的注解。


通過 Tamarin 工程創建可執行文件

您可以在 CVS 上下載 Tamarin。參考了 Zwetan 的描述,CVS 信息如下所示:

cvs -d :pserver:anonymous:[email protected]:/cvsroot co mozilla/js/tamarin 

按照 readme.txt 文件的指導進行安裝就可以了。工程可以通過 Microsoft C 編譯器進行編譯;當然,如果您還沒有 VC.NET Express 2005 的話,您可以去免費下載一個。

Tamarin 工程包含相當多的有趣的玩意兒。您可以查看“util”文件夾,里面有一個abc、swf和swc文件的反編譯器。現在你通過它只能獲得 AS3 的偽碼,但是別急,好戲才剛剛開始。

編譯類似的“abcdump.as”文件時,您需要將Tamarin內部在編譯過程中使用到的核心內建組件也一同編譯成ABC。 您可以使用 Flex 2 SDK 通過下面所示的方法進行編譯:

java -jar asc.jar builtin.as

這樣你就獲得了一個“builtin.abc”文件。此外,ByteArray class 同樣也是必須的,您可以在命令行解釋器文件夾中找到它:

java -jar asc.jar ByteArray.as

至此,我們就可以準備開始編譯abcdump了:

java -jar asc.jar import builtin.abc -import ByteArray.abc abcdump.as 

現在我們得到了abcdump.abc文件,您可以在AVM虛擬機中運行它或者使用反編譯器來反編譯任何偶然發現的.abc文件。拿playerglobal.abc文件舉例:

avmplus abcdump.abc playerglobal.abc 

通過 ASC 編譯器我們完全可以使用 -exe 編譯參數來創建 exe 文件,就像這樣:

java -jar asc.jar -exe avmplus.exe -import builtin.abc -import ByteArray.abc abcdump.as 

這樣我們就完成了一個名稱為“abcdump.exe”的可重用的、命令行模式的反編譯器。酷吧?同樣Tamarin也包含了很多其他有趣的玩意兒,例如文件IO操作以及其他不可思議的材料。

第一個 ActionScript 反編譯器

我們可以通過Tamarin File IO模塊來轉儲反編譯器的輸出文件。這個abcDump反編譯器的雛形至此已經完成。您可以按照下面的方法來使用它:

D:\ASC>abcdump
AbcDump
usage:
abcdump <filename> 

點擊此處到這個小玩意兒的下載頁面(單擊文章末尾處的“AbcDump.zip”鏈接)。

我的注釋

我拿“Amfphp Service Browser”來開刀,得到了一個7MB的servicebrowser.il文件。該文件是一個含義模糊的比特文件,盡管如此,它還是能被我們讀懂 ^_^。舉個例子吧,RawAmfService class的源文件內容和下面的差不多:

public class RawAmfService extends EventDispatcher
{
        public var gatewayUrl:String = "";
        var loader:URLLoader;
        
        public function RawAmfService()
        {
                loader = new URLLoader();
                loader.addEventListener('complete', readData);
        }
        ...
} 

反編譯后的 class 文件則是:

class RawAmfService extends flash.events::EventDispatcher
{
        var gatewayUrl:String = ""        /* slot_id 0 */
        var loader:flash.net::URLLoader        /* slot_id 0 */

        function RawAmfService():*        /* disp_id -1*/
        {
                // local_count=1 max_scope=1 max_stack=3 code_len=40
                0     getlocal0            
                1     pushscope            
                2     findproperty          gatewayUrl
                5     pushstring            ""
                7     initproperty          gatewayUrl
                10    getlocal0            
                11    constructsuper        (0)
                13    findproperty          loader
                16    findpropstrict        flash.net::URLLoader
                19    constructprop         flash.net::URLLoader (0)
                23    initproperty          loader
                26    getlex                loader
                29    pushstring            "complete"
                32    getlex                readData
                35    callpropvoid          addEventListener (2)
                39    returnvoid            
        }
        ...
} 

有趣的是,我發現在構造器內部參數“gatewayUrl”的值似乎被設置為了它的默認值。下一步,就是開始翻譯這個.il文件,把它變成一個能被我們更 方便地識別的語言所編寫的東西了呵呵。在iteratif.net上,這個家伙說自己正從事著這方面的工作,當然,我并不是很確定當前的狀況。如果您很感 興趣并且想和他一起合作的話,您可以在iteratif DOT net 的 “contact AT”版塊與他取得聯系。

 

文中出現的一些名詞解釋




Tamarin
Adobe將ActionScript Virtual Machine 2(AVM2)的核心源代碼捐獻給Mozilla組織,變成了一個叫做Tamarin的開源項目。Tamarin作為一個標準的ES4引擎,雖然現今只有 AVM2和SpiderMonkey基于它,但這也足夠形成一個強大的戰略同盟——Adobe或Mozilla社區對Tamarin的改進都會讓雙方同時 受惠。

CVS

CVS(Concurrent Version System)版本控制系統是一種GNU軟件包,主要用于在多人開發環境下的源碼的維護。實際上CVS可以維護任意文檔的開發和使用,例如共享文件的編輯 修改,而不僅僅局限于程序設計。CVS維護的文件類型可以是文本類型也可以是二進制類型。CVS用Copy-Modify-Merge(拷貝、修改、合 并)變化表支持對文件的同時訪問和修改。它明確地將源文件的存儲和用戶的工作空間獨立開來,并使其并行操作。CVS基于客戶端/服務器的行為使其可容納多 個用戶,構成網絡也很方便。這一特性使得CVS成為位于不同地點的人同時處理數據文件(特別是程序的源代碼)時的首選。

AMF

AMF(Action Message Format)是一種 binary format的資料型態,透過 AMF over HTTP的方式將flash端資料編碼后傳回server,server端的remoting adaptor接收到資料后則會譯碼回正確的native對象,交給正確的程序處理。
AMF除了用于Flash remoting外,也廣泛的用于 Local Connection 與 Flash communication server,它最大的特色在于可直接將flash native object,例如Object, Array, Date, XML,傳回server端,并且在server端自動進行轉譯成適當的對象,例如flash 的Array傳回PHP時就會自動轉換為 Associative Array;這個特色對開發者最大的好處在于不需要再人工處理serialization 與 deserialization的繁復工作,不但精確度更高,同時開發也更省時間。
由于AMF是binary format并且編碼時經過高度壓縮,因此非常適合用來傳遞大量的資料,根據flashorb網站的測試(主要針對web service與flash remoting),當資料量越大時,flash remoting的傳輸效能就越高,遠遠超過web service的表現,因此同樣的道理也可得知xml, loadVars, loadVariables 等使用plaine text format的傳輸方式自然也無可比擬

<完>

服務項目_SERVICE

關于我們

萬博思圖(北京)信息技術有限公司,專業的flash,flex開發團隊,5年經驗。公司致力于互聯網上的業務的開展,對于互動網站行銷,互聯網應用程序開發有成熟的解決方案。我們關注互聯網市場動態,關注新技術,更注重在新的領域不斷探索發現。
萬博思圖業務內容主要包括企業品牌Flash網站開發,企業形象宣傳Flash設計,動畫,多媒體演示,Flex企業級應用程序開發,擁有眾多成功案例,歡迎來電咨詢。
 
COPYRIGHT BY WEBSTUDIO INTERACTIVE DESIGN Co.,Ltd. ALL RIGHTS RESERVED.
公司地址: 北京市朝陽區光華路15號院泰達時代中心4號樓704 郵編: 100026 EMAIL: [email protected]
電話: 010-59070059   (新號:010-59897050 010-59897060)  手機: 13693660520 傳真: 010-59070059-801
京公網安備:110108006741      京ICP備:05013074號-1
王先生
浙江6十1开奖结果规则 贴支付宝红包赚钱吗 在温哥华做代购赚钱吗 模拟人生赚钱方式 网上打字刷单赚钱 捕鱼大师兑换现金 四川三国麻将 银行网站漏洞赚钱 问道五行竞猜怎么赚钱 利赢彩票苹果 民间借贷好不好赚钱 迅雷赚钱宝 0 水晶 七牛娱乐群 广发全球精选能赚钱吗 2018广州种花赚钱吗 雀魂麻将app 分享赚钱怎么算的