吕光金
(上海财经大学浙江学院,浙江 金华 321015)
摘要:随着Flash动画商业价值的不断提升,各种加密和解密软件也应运而生,如何有效地保护动画作品是一个值得探讨的问题。首先对Flash文件进行了解析,然后阐述了几种保护Flash动画的加密方法,并对几款相关的加密软件进行了测试比较,得出用加壳打包类软件进行加密比较安全。
0引言
Flash是Micromedia公司开发的一款动画制作软件。许多爱好者运用Flash制作出优秀的动画作品,并上传至闪客帝国、TOMFlash动画频道等专业网站进行学习与交流,极大地推动了Flash等多媒体技术以及动画的传播与发展[1]。随着Flash作品的商业价值的剧增,各种加密和解密软件也应运而生,个别用户非法运用解密软件严重损害了用户的知识产权。如运用硕思闪客精灵软件,将SWF文件反编译成FLA文件提取各个元素。为了防止作品未经许可被盗用或恶意修改,有必要对SWF作品加密方法进行研究。
关于动画加密,国内外一些学者和公司进行了相应的研究,如Micromedia公司在Flash软件中自带了防止导入功能。慧峰信源科技有限公司研发的网刃平台支持对SWF文件和FLA文件的加密。文献[2]对Flash动画的内容特征提取进行了深入的研究,并用VC++软件开发了一个提取平台。文献[4]提出了基于Flash动画的信息隐藏算法。文献[5]对SWF文件的版权保护设计了一个加密器,在一定程度上防止了反编译软件的攻击。文献[6]对基于AES的Flash加密方式进行了研究。文献[7]对运用AESCCM模式进行数据加密进行了研究。目前为止,虽然理论研究较多,但是实践很少,对现有的软件介绍几乎没有,因此,本文先对SWF文件进行解析,然后对现有的SWF加密软件和方法进行探讨与实践。
1Flash文件解析
Flash能把文本、图形、图像、动画、声音、视频以及交互方式等融合为一个整体[1],制作成基于“流技术”的动画。 Flash动画的文件格式主要有两种,即源文件格式(*.FLA文件)和播放文件格式(*.SWF文件),源文件可以通过Flash动画制作软件修改和编辑,播放文件需要通过其他专业软件反编译后才能修改,本文所指文件为SWF格式文件。
SWF文件与XML文件的内部结构相似[2],采用二进制标签对动画文件中的各个对象、效果以及交互方式进行定义。SWF文件由三部分组成:文件头(Header)、文件主体(Body,由多个Tag组成)、文件结束标签(End Tag),其结构如图1所示。
文件头定义了SWF动画的基本信息,如文件的版本、文件大小、是否压缩、帧频、影格大小、总的帧数等[3]。SWF中的标签又可以分为定义型标签和控制型标签两种。标签的组织顺序可以任意排列,但必须遵循先定义后引用、先定义后控制的规则,声音流标签必须按顺序播放,结束标签只能有一个,而且必须是最后一个。部分加密软件是通过修改SWF的文件头,从而导致SWF解析器在对SWF文件解析时出错来达到加密目的。
2Flash动画加密方法
传统的数字版权保护主要有以下几种:(1)通过在产品中内置注册体系的软件保护方式。(2)在外面加一个加密外壳,从而保证程序不被别人盗用或改写。(3)通过硬件方式对软件产品进行保护,主要采用USB卡、加密狗等。前两种一般统称为软保护。第(3)种为硬件加密方法,一般认为硬件加密最安全,但是必须用光盘分发,不能通过互联网大范围传播,在SWF动画加密中一般不采用。
2.1运用Flash自带的防止导入功能
Flash作品的保护或加密,最原始的办法就是防止导入。即防止将SWF导入到Flash软件中提取各种特征元素。比如,当把一份优秀的SWF动画发布到网上后,经过一段时间,会发现动画中的各种元素(Flash中称为元件)出现在了别人的动画中。为了防止导入Flash动画提取元素,可以通过Flash软件本身的“防止导入”功能实现简单的加密。具体方法是,在Flash “文件”菜单下,选择“发布设置”命令,然后选择“Flash” 选项卡,选取“防止导入”,在下面的密码区输入“防止导入”的密码进行发布。该密码只有在源文件中可以看到。
2.2运用ActionScript编程
在Flash软件中,可以运用ActionScript编写代码控制动画的播放以及与用户实现交互,也可以通过编写代码对动画进行加密。ActionScript是一种程序设计语言,它的语法结构与JavaScript的语法结构基本相似,在播放时,由Flash Player中的ActionScrip虚拟机来解释并执行[8]。Flash的最新版本是FlashCS6,脚本语言为Ac,简称AS3。在用Flash制作动画时,可以运用AS3脚本语言在程序代码中设置口令、时间锁、地址限制、屏蔽右键和限制下载等功能。
2.2.1设置口令或时间限制
例如,下面的代码实现了根据口令或在限定时间内播放动画的功能。
stop;
Daylimit=new Date(2016,1,1);
todayDate=new Date;
_root.onEnterFrame =function{
i(13)){
if(a=="password")||(todayDate<Daylimit)
{ fscommand("fullscreen","true");gotoAndPlay(2);}
else fscommand("quit","true");}}
图2Flash读取XML文件过程这种代码编写方法通俗易懂,安全性也较低。可以进一步改进,将密码与时间存储在独立存放的XML文件中,然后通过读取XML文件内容生成密码和比对时间,但是程序编写要复杂得多。Flash读取XML文件的内容需要有路径的定义、URL的请求和加载过程,与读取外部图片或声音的方法类似但调用的类不同。读取XML的过程如图2所示。
2.2.2运用LoadMovie命令
在把Flash作品发布成SWF文件之前,可以将源文件分割成多个子文件,然后把各个.fla子文件分别发布成播放文件(如“c”、“c”等),并放在不同的路径下,以相互嵌套的方式调用,可以起到保护作品的作用。因为当该作品被其他用户下载时,用户只能下载它的主文件,而其他子文件不能被下载。运用LoadMovie函数调用Flash子文件的方法为:LoadMovie(“某路径下的子文件c”,“mySWF”)。其中的路径可以是相对路径或绝对路径,x必须为具体数字,如c。
2.3运用Flash专业加密软件
运用专业软件对Flash作品进行加密更安全,但是一般都需要付费,如 GeneralEncryptor 、Swfkit、DoSWF等。这些软件对SWF加密主要使用了动态内存修改技术(DMM)、ActionScript 混淆技术、加壳打包技术、绑定硬件(CPU、网卡、硬盘)技术等。
2.3.1动态内存修改技术
动态内存修改技术类加密软件有DoSWF、Flashincrypt和SWFEncrypt等,它们都是SWF文件加密工具,能防止SWF文件被反编译成源文件,通常使用动态内存修改技术和脚本混淆技术进行保护。DoSWF软件采用一些工具做代码混淆,降低了程序的可读性,即使被破解了,也很难看懂,这种方法其实可以称之为加密代码。但是加密后的文件会明显变大,为了避免加密后文件过大的问题,可以在加密前先将FLA源文件分解并生成多个SWF文件,然后再进行逐个加密。
2.3.2加壳打包技术
Swfkit是一款优秀的加壳打包软件,它不仅能创建 Flash播放程序或屏幕保护程序,而且能为它们建立安装程序。用该软件打包的EXE文件不容易被还原,因为它打包的格式不同于Flash软件中打包的EXE,而且调用IE中的Flash控件进行播放,因此,Flashtool、Exe2swf等软件无法将其反编译;利用硕思闪客精灵、ImperatorFLA、闪客精灵之锤等破解软件也不能提取作品中的元素。常用的加壳打包类加密软件还有网刃数字版权保护平台、FlashJestor、Swfkit、Iceprojector、Swishstudio等。
2.3.3硬件绑定模式
GeneralEncryptor不仅支持SWF文件加密,而且也支持FLA文件加密。用户可以选择不同的硬件绑定模式对用户机器进行绑定,如选定CPU、主板、Flash硬盘、网卡等设备进行“一机一码”方式的授权;它还支持水印效果、播放次数限制、有效期设置。常用的硬件绑定类加密软件还有FlashEncryptor、EasySWF、SWFprojection等。
3几种加密软件的比较
为了验证SWF加密软件的功能,制作了一个Flash动画,并选用了几种常用加密和解密软件的试用版进行了相关实验,结果如表1所示。
通过实验发现,(1)Exe2swf解密软件功能较强,能将Flash播放器生成的EXE文件解密成SWF文件,并通过解析SWF文件读取文件头,显示文件的基本信息,包括:文件版本、文件大小、是否压缩、影格大小、影格比例、总帧数。(2)SWFEncrypt、DoSWF等软件的加密功能一般,加密后生成的SWF文件明显变大,而且能被硕思闪客精灵解密并提取元素;(3)加壳打包类软件的加密功能比较强大,不能被Exe2swf解密,只是加密后生成的EXE文件明显变大。由此可知,从安全角度考虑,加密时建议选取加壳打包的方法。
4结束语
本文针对Flash动画的加密方法进行了探讨与实践。虽然市场上出现了各种各样的SWF加密软件,但是仍无法抵制一些著名的专业解密软件和破解方法。因此,只有不断增强全民的知识产权保护意识,倡导购买或使用经过授权的作品或软件,才能将盗版现象降低到最低限度。
参考文献
[1] 詹青龙,吴学会,宗哲玲. Flash二维动画设计与制作[M]. 北京:清华大学出版社,2010.
[2] 徐振国,孟祥增.Flash动画的内容特征提取研究[J].电化教育研究,2015(6):5560.
[3] 倪应华,金炳尧.SWF矢量动解析框架设计[J].计算机系统应用,2010(3):202205.
[4] 张晓彦,张晓明.基于Flash动画的信息隐藏算法[J].计算机工程,2010(1):181183.
[5] 王继州,袁雪霞.一种SWF文件保护简单实现方案[J].数字技术与应用,2012(8):169171.
[6] 邹蕾. 基于AES的Flash加密实现[J].电脑编程技巧与维护,2014(22):115116.
[7] 仇国庆,包俊杰,曹冬梅,等. 基于AES算法的ZigBee网络加密方法研究[J].电子技术应用,2014,40(4):5658.
[8] 陈银凤. Flash中利用Action Scri实现图像的扭曲效果[J].微型机与应用,2012,31(16):3537.
1.《在flash中如何修改帧数、苹果如何修改帧数》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《在flash中如何修改帧数、苹果如何修改帧数》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3251885.html