2018新老藏宝图图片 567812彩·霸王中特网 坐着的生肖 今晚特马生肖图112期什么好 今天开的什么特马结果 生肖开什么特马网址 最准特马资料 今天生肖开奖结果查询 2018正版生肖排码表图 今晚买什么生肖是特马 开码结果2018今晚 2018波色表高清图片图 曾道免费资料2018大全 2018独一无二的微信名 曾道免费资料2018大全

As3.0 decompiler反编译器

作者: Molay

性质: 翻译

阅读次数: 24208

发表时间: 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 源码。这可是相当地可怕呀,不是么?


    让我们来看?#27425;?#31456;都说了些什么吧。首先作者向我们阐述了如何构建属于你自己的编译器。然后你就可以直接下载前面构建好的编译器了。最后是我自己个人对本文的注解。


通过 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 同样也是必须的,您可以在命令行解释器文件夹中?#19994;?#23427;:

java -jar asc.jar ByteArray.as

至此,我们就可以?#24613;?#24320;始编译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 编译参数?#21019;?#24314; exe 文件,就像这样:

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

这样我们就完成了一个名称为“abcdump.exe”的可重用的、命令行模式的反编译器。酷吧?#23458;?#26679;Tamarin也包含了很多其他有趣的玩意儿,例如文件IO操作以及其他不可思议的材料。

第一个 ActionScript 反编译器

我们可以通过Tamarin File IO模块来转储反编译器的输出文件。这个abcDump反编译器的雏形至此已经完成。您可以按照下面的方法来使用它:

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

点击此处到这个小玩意儿的下载页面(单击文章末尾处的“AbcDump.zip”链接)。

?#19994;?#27880;释

我拿“Amfphp Service Browser”来开刀,得到了一个7MB的servicebrowser.il文件。该文件是一个含义模糊的比特文件,尽管如此,它还是能被我们读懂 ^_^。举个例子吧,RawAmfService class的?#27425;?#20214;内容和下面的差不多:

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”的值似乎被设置为了它的默?#29616;怠?#19979;一步,就是开始翻译这个.il文件,把它变成一个能被我们更 方便地识别的语言所编写的东西了呵呵。在iteratif.net上,这个?#19968;?#35828;自己正从事着这方面的工作,当然,我并不是很确定当前的状况。如果您很感 兴趣并且想和他一起合作的话,您可以在iteratif DOT net 的 “contact AT”版块与他取得联系。

 

文中出现的一些名词解释




Tamarin
Adobe将ActionScript Virtual Machine 2(AVM2)的核心?#21019;?#30721;捐献给Mozilla组织,变成了一个叫做Tamarin的开源项目。Tamarin作为一个标准的ES4引擎,虽然现今只有 AVM2和SpiderMonkey基于它,但这也足够形成一个?#30475;?#30340;战略同盟——Adobe或Mozilla社区对Tamarin的改进都会让双方同时 受惠。

CVS

CVS(Concurrent Version System)版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。?#23548;?#19978;CVS可以维护?#25105;?#25991;档的开发和使用,例如共享文件的编辑 修?#27169;?#32780;不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合 并)变化表支持对文件的同时访问和修改。它明确地将?#27425;?#20214;的存储和用户的工作空间独立开来,并使其并行操作。CVS基于客户端/服务器的行为使其可容纳多 个用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的?#21019;?#30721;)时的首选。

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的?#22791;?#24037;作,不但精确度更高,同时开发也更省时间。
由于AMF是binary format并且编码时经过高度压缩,因此非常适合用?#21019;?#36882;大量的资料,根据flashorb网站的测试(主要针对web service与flash remoting),当资料量越大时,flash remoting的传输效能就越高,?#23545;?#36229;过web service的表现,因此同样的道理也可得知xml, loadVars, loadVariables 等使用plaine text format的传输方式自然也无可比拟

<完>

服务项目_SERVICE

关于我们

万博思图(北京)信息?#38469;?#26377;限公司,专业的flash,flex开发团队,5年经验。公司致力于互联网上的业务的开展,对于互动网站行销,互联网应用程序开发有成熟的解决方案。我们关注互联网市场动态,关注新?#38469;?更注重在新的领域不断探索发现。
万博思图业务内容主要包括企业品牌Flash网站开发,企业形象宣传Flash设计,动画,多?#25945;?#28436;示,Flex企业级应用程序开发,拥有众多成功案例,?#38431;?#26469;电咨询。
 
COPYRIGHT BY WEBSTUDIO INTERACTIVE DESIGN Co.,Ltd. ALL RIGHTS RESERVED.
公司地址: 北京市朝阳区光华路15号院泰达时代中心4?#24597;?04 邮编: 100026 EMAIL: [email protected]
电话: 010-59070059   (新号:010-59897050 010-59897060)  手机: 13693660520 传真: 010-59070059-801
京公网安备:110108006741      京ICP备:05013074号-1
2018年白小姐一肖特马
2018新老藏宝图图片 567812彩·霸王中特网 坐着的生肖 今晚特马生肖图112期什么好 今天开的什么特马结果 生肖开什么特马网址 最准特马资料 今天生肖开奖结果查询 2018正版生肖排码表图 今晚买什么生肖是特马 开码结果2018今晚 2018波色表高清图片图 曾道免费资料2018大全 2018独一无二的微信名 曾道免费资料2018大全
日本人破解福彩3d技巧 广西快三开奖视频 时时彩一期免费计划 乡镇超市门口卖什么赚钱 竞彩二串一计划单 世界排名第一的泰拳王 新疆十一选五开奖结果走势图表 黑龙江省11选五走势图 大型正规棋牌游戏平台