一种SWF混淆加密的方法与流程

文档序号:17644508发布日期:2019-05-11 00:54阅读:1080来源:国知局
一种SWF混淆加密的方法与流程

本发明涉及技术安全相关技术领域,尤其是指一种swf混淆加密的方法。



背景技术:

swf(shockwaveflash)文件是当下最常见的flash专用格式,由actionscript3.0(以下简称as3.0)编程语言打包编译完成。在其编译完成后,swf内部会形成一个字符串映射表,包含源码里出现的所有字符串(类名,包名,成员变量名,常量等)。一个地址指针对应一个全局唯一的字符串,而原本的代码片段包含的字符串都会被替换为对应的地址指针。代码实际执行过程用的都是这些数字指针。所以即使你修改了映射表内的字符串内容,通常对代码执行过程也不会产生影响。而反编译就是根据地址指针从这个映射表取出对应字符串填回代码,最后生成可读的源代码。当下的反编译工具十分之多,使得企业的核心技术及业务逻辑被窃取。



技术实现要素:

本发明是为了克服现有技术中存在上述的不足,提供了一种能够保护技术隐私的swf混淆加密的方法。

为了实现上述目的,本发明采用以下技术方案:

一种swf混淆加密的方法,具体包括如下步骤:

(1)确定要保护的核心as3.0工程文件源代码;

(2)编写通用的混淆类,将源包内文件的内容混淆;

(3)通过felxsdk,将混淆后的源码编译成源swf文件;

(4)编写加密工具,此加密工具引用c语言编写的加密方法,将swf文件按字节流读取后,将其进行aes加密;

(5)编写加载swf的应用,用来加载上一步生成的swf文件;

(6)将步骤(5)的应用,编译并发布成正式的swf文件后,对外提供给客户使用。

为了保护个人技术不被黑客窃取再利用,本发明阐述一种as3.0代码混淆并加密的方法,即选择性的替换此映射表的内容为毫无意义的其他字符串,使其向普通二进制一样不具备明文可读性。同时对编译生成的swf文件进行字节流加密,在外部人员不清楚加密算法的情况下,很难解密出原始swf文件及代码,达到双重加密,保护技术隐私的效果。

作为优选,在步骤(2)中,混淆规则如下:首先扫描要混淆的源代码所在包,源代码中包名、包路径、变量名、方法名、回调函数方法换成无意义的其他符号,用以使代码可读性变低,增加技术被盗用难度。

作为优选,源代码中的关键字、原生类、外部依赖包不能替换,混淆类内有原生as3.0的关键字过滤功能。

作为优选,在步骤(3)中,编译的过程在官方的ide工具内进行;或者在nodejs环境,通过felxsdk自带的mxmlc编写build.xml,对指定路径下的.as源码编译,生成通用的swf文件。

作为优选,在步骤(4)中,加密方法是将swf文件从磁盘读取到内存中,将文件内容作为数据输入源,将加密后的数据写入到磁盘文件,重新命名为加密后swf文件。

作为有选,在步骤(5)中,本应用的核心代码引用c语言编写的解密方法,其解密方法与步骤(4)中的加密方法相对应,此应用首先在主程序内通过embed方法引用外部资源,即为加密的swf文件,然后通过loader类,创建一个可用于加载文件的loader对象,调用load()方法可将资源加载为loader实例的子级,之后将loader对象添加到显示列表,而loadbyte()方法则支持从内存对象中所存储的二进制数据中加载,恰好接收c语言解密返回的字节流数据,资源在加载时会出现在舞台上,此时舞台的内容,实际为加密的swf内容

本发明的有益效果是:保护个人技术不被黑客窃取再利用,对编译生成的swf文件进行字节流加密,达到双重加密,保护技术隐私的效果。

附图说明

图1是本发明的流程图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步的描述。

一种swf混淆加密的方法,具体包括如下步骤:

(1)确定要保护的核心as3.0工程文件源代码;此工程文件一般是技术人员编写的业务逻辑代码。

(2)编写通用的混淆类,将源包内文件的内容混淆;混淆规则如下:首先扫描要混淆的源代码所在包,源代码中包名、包路径、变量名、方法名、回调函数方法换成无意义的其他符号,用以使代码可读性变低,增加技术被盗用难度;源代码中的关键字、原生类、外部依赖包不能替换,如果原生类被替换,会导致编译失败,故混淆类内有原生as3.0的关键字过滤功能;

(3)通过felxsdk,将混淆后的源码编译成源swf文件;编译的过程在官方的ide工具内进行,如flashbuild开发工具;或者在nodejs环境,通过felxsdk自带的mxmlc编写build.xml,对指定路径下的.as源码编译,生成通用的swf文件;

(4)编写加密工具,此加密工具引用c语言编写的加密方法,将swf文件按字节流读取后,将其进行aes加密;加密方法是将swf文件从磁盘读取到内存中,将文件内容作为数据输入源,将加密后的数据写入到磁盘文件,重新命名为加密后swf文件;

(5)编写加载swf的应用,用来加载上一步生成的swf文件;本应用的核心代码引用c语言编写的解密方法,其解密方法与步骤(4)中的加密方法相对应,此应用首先在主程序内通过embed方法引用外部资源,即为加密的swf文件,然后通过loader类,创建一个可用于加载文件的loader对象,调用load()方法可将资源加载为loader实例的子级,之后将loader对象添加到显示列表,而loadbyte()方法则支持从内存对象中所存储的二进制数据中加载,恰好接收c语言解密返回的字节流数据,资源在加载时会出现在舞台上,此时舞台的内容,实际为加密的swf内容;

(6)将步骤(5)的应用,编译并发布成正式的swf文件后,对外提供给客户使用。

如图1所示,实例1:当虹云flash播放器定制化arcmeidaplayback.swf安全策略实践。

当虹云flash播放器内置弹幕、vr、打点信息、广告、加密视频播放登功能,这些增值功能的实现是企业人员的技术积累,其中加密算法等逻辑更是公司的技术核心。为了达到保护逻辑代码的目的。根据以上发明,对flash文件进行混淆加密。

步骤1:编写通用混淆工具,混淆工具swfmixtool,本混淆工具会扫描指定的路径,读取路径下所有的as为后缀名的文件,收集所有的变量名、包名、方法名。将其按照索引值替换成不可读变量。

步骤2:运行swfmixtool工具,指定当虹云flash源工程路径arcmeidaplayback/src,生成新的工程路径arcmeidaplaybackmix/src。

步骤3:使用flexsdk内的mxmlc程序,执行mxmlc命令行,将arcmeidaplaybackmix/src下的文件编译成arcmeidaplaybackmix.swf文件。

步骤4:运行加密工具swfencryptortool,该工具也是as3.0工程,引入了c语言的加密库。运行时,选择要加密的arcmeidaplaybackmix.swf文件,将其另存为arcmeidaplaybackmixs.swf文件。

步骤5:编写arcmeidaplayback-mst工程。此工程只包含一个main主程序。主程序内通过embed标签引入资源arcmeidaplaybackmixs.swf,同时引入c语言的解密库,调用c语言的解密方法,将返回的字节数据传递给loader类的loadbytes()方法。将其渲染到主程序上。编译该arcmeidaplayback-mst工程,生成最终的arcmeidaplayback-mst.swf文件。

步骤6:使用反编译工具打开arcmeidaplayback-mst.swf,查看其反编译的内容。

综上所述,本发明要求首先用c语言编写相同逻辑的加密解密库,供as3.0工程的代码使用。最核心的加密解密放到c语言库内,因为c库的逆向反编译代码比较难弄懂其逻辑,相比于as3.0反编译代码,其被破解难度大大提升。

本发明是从源码上就开始做代码混淆,而不是解压swf文件后进行,这样做的好处是,源码混淆后,在压缩编译成swf文件的过程中,编译器会告知不合法的混淆和替换,使得编译完成swf功能完整,且不会出现运行失败的情况。

本发明最终生成的swf文件,是封装过的外包型文件,绝大部分反编译工具只能看到外包层的一个loader主程序代码,获取不到实际业务层代码。更深一层的破解工具,会设法从内存中读取源swf信息。而从内存中读取时获取到的数据是加密过的,无法反编译成可读的as3.0源码,从而达到保护核心代码的效果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1