把SWF反编为FLA 的技术的讨论

  • 来源: 中国IT实验室 作者: somesun   2008-03-18/10:21
  • 将任何一个SWF文件完美还原成FLA原始代码!”,笔者第一次看到此消息时有些震惊。在此之前,相信众多喜欢Flash动画的朋友都是使用SWF Scaner、闪客快斧、Action Script Viewer等来分解SWF文件内部的图片、音乐甚至动作脚本(Action Scripts)等信息,对于SWF还原为FLA文件,不会抱有太大的奢望,不过今天,这一切似乎成为了现实,究竟是什么软件拥有这么大的魔力?

    是什么?

    IMPERATOR °FLA是一个将SWF文件还原为FLA文件的工具。只要您的系统中安装有Macromedia Flash MX以上版本,就能够利用此软件将已经编译好的SWF文件还原成FLA源文件,这个FLA文件中包含所有的图片、影片、音乐甚至AS信息,您完全可以使用Macromedia Flash软件对其回炉再造,重新编译成需要的SWF文件。

    是真的吗?

    IMPERATOR °FLA的使用非常简单,在其官方网站(www.ave-imperator.com)可以下载最新的Demo版,若您的Windows中有Macromedia Flash MX(MX 2004)和DirectX 8以上版本,软件安装完毕后就会自动启动。

    笔者首先使用IMPERATOR °FLA反编译了一款自己制作的简单Flash动画,这个动画只包含一些渐变的信息,没有使用任何AS。对比源文件(如图1)和使用SWF反编译生成的FLA文件(如图2),可以明显看到反编译后的文件生成了比源文件多的多的层,不过二者的库文件一模一样,编译导出的SWF文件效果也一样,只是中间实现的方法不同。

    随后笔者又反编译了一个复杂的Flash动画,生成的FLA文件更加复杂,值得注意的是,IMPERATOR °FLA将一些遮罩与渐变的效果分解成了一帧帧的组件,但对于稍微有些Flash制作知识的朋友来说,很容易将这些换成补间动画。

    由于Demo版的软件屏蔽了AS还原功能,所以笔者不能够考察IMPERATOR °FLA还原SWF文件中动作脚本的程度,不过从还原后重新编译生成的SWF文件与原作相同来看,IMPERATOR °FLA的能力非常出众,虽然它不能将SWF文件还原为与原始文件相同的FLA文件(中间实现方法有很大不同),但我们完全能够使用它来提取Flash动画中的所有素材并研究优秀Flash动画的实现方法。

    实现分析

    将SWF还原为FLA源文件,听起来是多么不可思议!不过从网上流行的各种语言的反编译器来看,SWF文件的反编译并不是什么新鲜事。

    以Java语言为例,网上至少有3~4种Java语言的反编译器,据使用过的人说,其中有些反编译器效果极好,能把那些。class结尾的文件反的一点不差。而微软最新的。Net Framework由于采用了中间层,实现跨平台、跨语言的中间代码,并在类似虚拟机的环境中运行,导致了MSIL(微软中间语言)反编译为C#或VB.NET等源代码并非难事。再以Zend Encoder编译的PHP源程序为例,网上有Vulcan Logic Disassembler (pecl.php.net/package/vld)可以得到PHP执行时的操作码,若是有对PHP非常熟悉的高手,利用操作码还原PHP源程序也容易许多。

    而所谓反编译,根据世界知识产权组织在《WIPO知识产权手册:政策、法律与使用》中的解释,是指一种对计算机程序进行复制和翻译,从而使其编码和结构可被观察和分析的方法。这种方法一般即指通过对计算机软件的目标程序的分析反推出其相应的源程序的过程。

    IMPERATOR °FLA翻译了SWF中的编码,使其变得可读和可编辑,虽然与原来在结构上有所不同,但其反编译还是比较成功的。依我猜测,Action Script Viewer等Flash破解软件应该也能从技术上实现这种功能,只不过顾及到Macromedia公司版权的关系,才不“敢”将这些功能放到软件中,由此看来,IMPERATOR °FLA很有可能要承担侵权的风险。

    实际上,也有很多人,包括Imperator °FLA已经注意到SWF文件的可反编译。在Imperator °FLA中有一个recovery-protection,可以向SWF文件中添加保护代码,以保护SWF不被Imperator °FLA反编译,一些专门的SWF ActionScript保护工具,如ActionScript Obfuscator (ASO)(www.genable.com/aso)也相继出现在网络上。

    利弊

    要了解和学习一个软件所包含的思想和原则,必须对软件的源程序进行分析;要获得该软件的各种参数,开发能与该软件兼容的软件也必需获得软件的源程序。然而,为了在市场竞争中取得优势,软件的开发者一般不会将源程序公开。因此,对软件进行反编译就成了软件开发技术人员经常采用的方法。

    反编译在软件教学、科研、开发等场合都是一种非常重要的手段。在教学和科研中,为了学习国外先进的软件设计理念,我们经常需要把国外一些机构和个人开发程序反编译来进行分析和借鉴;早期的汉化爱好者把外文版的软件进行反编译,找到目标菜单的源代码,然后把汉语写进去替换相应的外文,汉化人填入汉语的长度不得超过原文的长度,不足的可用空格补齐,然后再进行编译,最终完成外文软件的汉化(现在使用的都是利用了上述汉化原理开发出的专门汉化工具);而在与病毒的斗争中,虽然每个研究人员的工作方式不同,但他们使用的技术是类似的:例如在编译环境下执行病毒程序,观察病毒的行为方式,使用反编译工具分析代码结构。与上述情况类似,有了SWF文件的反编译工具,我们就可以更加方便的学习经典Flash的制作方法,从技术和设计思想上提高整体的Flash设计水平。

    不过反编译的弊端也显而易见,这类工具落到一些不尊重其他人劳动成果的“小人”手中,会成为其剽窃的利器,这种侵权行为我们将在下面讨论。

    侵权?

    对软件或者Flash作品的反编译,无疑会引起版权冲突,那么,究竟反编译是否违反版权法?我们怎样才能利用反编译来学习先进的设计理念和技术手段,以提高自己的水平?那就要从著作权保护的原则和相关法律来进行分析。

    世界知识产权组织在《WIPO知识产权手册:政策、法律与使用》中认定:软件合法用户对软件进行反编译的行为,只要不利用所获取的信息开发相似的软件,并不会与著作权所有人正常使用软件冲突,也不会对著作权所有人的合法权益造成不合理的损害。各国政府基本上都使用此原则对侵权案件进行审理,如美国、欧盟、中国的相关法律部门都认为:只要反编译并非以复制软件为目的,在实施反编译行为的过程中所涉及的复制只是一种中间过渡性的复制,反编译最终所达到的目的是使公众可以获得包含在软件中不受著作权保护的成分,这样的反编译并不会被认为是侵权。#p#分页标题#e#

    根据以上原则和相关法律,我们对软件和Flash作品进行反编译,以学习其思想、处理过程、操作方法、数学概念等不属于侵权。也就是说只要你的反编译目的纯良(即只是出于学习的目的),在法律上就不视为侵权。但如果你将反编译用于其它目的,比如制作成其他产品进行销售,就侵犯了原作者的著作权。

    也就是说,我们使用IMPERATOR °FLA来反编译SWF到FLA文件,来研究Flash动画的设计思想、使用技术,并不构成对原作者的侵权,不过需要注意的是,在这款Flash作品中原创的一些图形、整体表现形式(SWF成品的版权)是受著作权保护的。

    笔者并不是著作权方面的法律专家,所了解的也只是一些皮毛,只能泛泛而谈,感兴趣的朋友可以到中国知识产权司法保护网(www.chinaiprlaw.com)阅读相关文章,尤其是一些汉化人士。

    道德

    既然说到了侵权,就不能不探讨一下软件开发和作品设计中的道德问题。我们可以通过反编译的手段学习某款软件或作品的设计思想,不过将别人的软件或作品反编译并进行修改后,加上自己的版权信息,不仅违反了著作权法,就是从道德上也令人不齿,前段时间闹得沸沸扬扬的QQ万勇版修改自木子版事件,以及恶名昭著的MwIE浏览器都是此类典型,对于这类不道德甚至违法的行为,希望网友们能够共同抵制。

    技术从来都是一把双刃剑,将反编译合理使用,将有利于打破国外超级软件企业对软件技术的垄断,有利于中小软件企业开发出更多具有兼容性的软件,从而促进软件产业的健康发展。对于侵权的、不合理的反编译应用,除了计算机使用者的鄙视和抵制外,完善的法律是解决问题的有效途径。


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多