0 引言。
Flash 是 Micromedia 公司开发的一款动画制作软件。
许多爱好者运用 Flash 制作出优秀的动画作品,并上传至闪客帝国、TOM-Flash 动画频道等专业网站进行学习与交流,极大地推动了 Flash 等多媒体技术以及动画的传播与发展[1].随着 Flash 作品的商业价值的剧增,各种加密和解密软件也应运而生,个别用户非法运用解密软件严重损害了用户的知识产权。如运用硕思闪客精灵软件,将SWF 文件反编译成 FLA 文件提取各个元素。为了防止作品未经许可被盗用或恶意修改,有必要对 SWF 作品加密方法进行研究。
关于动画加密,国内外一些学者和公司进行了相应的研究,如 Micromedia 公司在 Flash 软件中自带了防止导入功能。慧峰信源科技有限公司研发的网刃平台支持对SWF 文件和 FLA 文件的加密。文献[2]对 Flash 动画的内容特征提取进行了深入的研究,并用 VC + + 软件开发了一个提取平台。文献[4]提出了基于 Flash 动画的信息隐藏算法。文献[5]对 SWF 文件的版权保护设计了一个加密器,在一定程度上防止了反编译软件的攻击。文献[6]
对基于 AES 的 Flash 加密方式进行了研究。文献[7]对运用 AES-CCM 模式进行数据加密进行了研究。目前为止,虽然理论研究较多,但是实践很少,对现有的软件介绍几乎没有,因此,本文先对 SWF 文件进行解析,然后对现有的 SWF 加密软件和方法进行探讨与实践。
1 Flash 文件解析。
Flash 能把文本、图形、图像、动画、声音、视频以及交互方式等融合为一个整体[1],制作成基于“流技术”的动画。Flash 动画的文件格式主要有两种,即源文件格式( * .FLA 文件) 和播放文件格式( * .SWF 文件) ,源文件可以通过 Flash 动画制作软件修改和编辑,播放文件需要通过其他专业软件反编译后才能修改,本文所指文件为SWF 格式文件。
SWF 文件与 XML 文件的内部结构相似[2],采用二进制标签对动画文件中的各个对象、效果以及交互方式进行定义。SWF 文件由三部分组成: 文件头( Header) 、文件主体( Body,由多个 Tag 组成) 、文件结束标签( End Tag) ,其结构如图 1 所示。
文件头定义了 SWF 动画的基本信息,如文件的版本、文件大小、是否压缩、帧频、影格大小、总的帧数等[3].SWF 中的标签又可以分为定义型标签和控制型标签两种。标签的组织顺序可以任意排列,但必须遵循先定义后引用、先定义后控制的规则,声音流标签必须按顺序播放,结束标签只能有一个,而且必须是最后一个。部分加密软件是通过修改 SWF 的文件头,从而导致 SWF 解析器在对SWF 文件解析时出错来达到加密目的。
2 Flash 动画加密方法。
传统的数字版权保护主要有以下几种: ( 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,脚本语言为 ActionScript3.0,简称 AS3.在用 Flash 制作动画时,可以运用 AS3 脚本语言在程序代码中设置口令、时间锁、地址限制、屏蔽右键和限制下载等功能。