本发明涉及flash(固态存储器与动画编辑器)校验领域,具体涉及一种swf文件(shockwaveflash,基于矢量的flash动画文件)的校验方法及系统。
背景技术:
目前,大多数视频直播网站都采用flash做为视频播放器,大多数的网页游戏也会使用flash来开发。flash的具体使用文件是swf文件,swf文件集成了与服务器的协议交互和网页游戏的核心功能。
对于采用actionscript(动作脚本语言)脚本编写的swf文件而言,通过反编译工具(例如as3sorcerer)即可反编译出swf文件对应的脚本代码(相当于是伪代码),通过对伪代码的读取即可知道swf文件的具体实现逻辑。
因此,现有采用actionscript(动作脚本语言)脚本编写的swf文件易于被破解,swf文件使用时不够安全,例如hack可能破解并修改swf文件,进而实现非法目的。
技术实现要素:
针对现有技术中存在的缺陷,本发明解决的技术问题为:增大swf文件被破解的难度,检测swf文件是否被破解。本发明显著提高了swf文件使用时的安全性能。
为达到以上目的,本发明提供的一种swf文件的校验方法,该方法包括以下步骤:
s1:采用c语言生成具有校验功能swc库文件,通过actionscript脚本调用swc库文件形成主swf文件,转到s2;
s2:客户端加载主swf文件后,通过主swf文件加载所有需要使用的从swf文件,转到s3;
s3:客户端调用主swf文件中的swc库文件,对需要校验的swf文件进行校验,校验流程为:通过md5算法对需要校验的swf文件的数据进行计算,得到md5校验结果;通过crc32算法对需要校验的swf文件的数据进行计算,得到crc32校验结果;将md5校验结果和crc32校验进行拼接得到最终校验结果,转到s4;
s4:客户端根据需要校验的swf文件的文件标识、以及该swf文件的最终校验结果,形成校验信息;客户端将所有校验信息进行打包形成打包数据后,发送至服务端,转到s5;
s5:服务端判断打包数据中的所有校验信息是否均正确,若是,则确认swf文件正常,否则确认swf文件异常。
本发明还提供一种swf文件的校验系统,该系统包括主swf生成模块;位于客户端的swf文件加载模块、swf文件校验模块和校验结果上传模块;以及位于服务端的校验结果比对模块;
主swf生成模块用于:采用c语言编译生成具有校验功能swc库文件,通过actionscript脚本调用swc库文件编译形成主swf文件;
swf文件加载模块用于:加载主swf文件后,通过主swf文件加载所有需要使用的从swf文件,向swf文件校验模块发送swf文件校验信号;
swf文件校验模块用于:收到swf文件校验信号后,调用主swf文件中的swc库文件,对需要校验的swf文件进行校验,校验流程为:通过md5算法对需要校验的swf文件的数据进行计算,得到md5校验结果;通过crc32算法对需要校验的swf文件的数据进行计算,得到crc32校验结果;将md5校验结果和crc32校验进行拼接得到最终校验结果,向校验结果上传模块发送所有最终校验结果;
校验结果上传模块用于:收到所有最终校验结果后,根据需要校验的swf文件的文件标识、以及该swf文件的最终校验结果,形成校验信息;将所有校验信息进行打包形成打包数据后,发送至服务端的校验结果比对模块;
校验结果比对模块用于:收到打包数据后,判断打包数据中的所有校验信息是否均正确,若是,则确认swf文件正常,否则确认swf文件异常。
与现有技术相比,本发明的优点在于:
参见s1可知,与现有技术中采用actionscript脚本编写的容易破解的swf文件相比,本发明采用c语言和actionscript脚本生成主swf文件;在此基础上,参见s3可知,本发明通过c语言生成的swc库文件对sfw文件进行校验。由此可知,若需破解本发明的swf主文件,需要分别针对c语言和actionscript脚本进行反编译,其破解难度较高,显著提高了swf文件使用时的安全性能。
与此同时,参见s3可知,本发明通过swc库文件对sfw文件进行校验时,会先分别通过md5算法和crc32算法对swf文件的数据进行校验,再将2种校验结果(md5校验结果和crc32校验结果)进行拼接得到最终校验结果。因此,本发明能够精准检测swf文件是否被破解,不仅可以对校验算法进行保护,从而防止hack猜测出校验算法,而且可以防止对相同md5值的碰撞(例如虽然2份swf文件不同,但是2份swf文件的值是一样的)。
附图说明
图1为本发明实施例中swf文件的校验方法的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例中的swf文件的校验方法,包括以下步骤:
s1:客户端或服务端采用c语言编译生成具有校验功能swc库文件(flash的一种c语言库文件),通过actionscript脚本调用swc库文件编译形成主swf文件,转到s2。
s2:客户端加载主swf文件后,通过主swf文件加载其他所有需要使用的从swf文件(在一个flash项目中会使用多份swf文件来一起完成flash的功能,多份swf文件包括1份主swf文件和至少1份从swf文件,而主swf文件加载完成后,会自动加载所有的从swf文件);客户端从服务端获取需要校验的swf文件名称,转到s3。
s2中客户端从服务端获取需要校验的swf文件信息的目的为:只校验比较重要的swf文件,以提高工作效率和用户体验,客户端从服务端获取需要校验的swf文件名称的流程为:
服务端生成配置文件,配置文件中包括每份需要校验的swf文件名称和最终校验结果,具体内容为:
swf_name:room.swfhashresult:xxxx
swf_name:room2.swfhashresult:xxxx2
....
其中配置项swf_name标示需要校验的swf文件名称,配置项hashresult则是需要校验的swf文件的最终校验结果,hashresult可以由服务端预先得到,配置文件中每添加一项则是增加对一个swf文件进行校验,服务端将配置文件中所有需要校验的swf文件名称发送至客户端。
s3:客户端调用主swf文件中的swc库文件,分别对每份需要校验的swf文件进行校验,得到每份需要校验的swf文件的最终校验结果,转到s4。
s3中对每份需要校验的swf文件进行校验的流程为:通过md5算法对需要校验的swf文件的数据进行计算,得到md5校验结果;通过crc32算法对需要校验的swf文件的数据进行计算,得到crc32校验结果;将md5校验结果和crc32校验结果拼接起来,做为swf文件的数据的最终校验结果。
s4:客户端根据需要校验的swf文件名称和该swf文件的最终校验结果,形成校验信息,将所有校验信息进行打包,形成打包数据;客户端采用aes(advancedencryptionstandard,高级加密标准)加密算法对打包数据进行加密后,发送至服务端,转到s5。
s4中的打包数据为:swf_name:room.swfresult:xxx;
其中数据项swf_name标示校验的swf文件名称,数据项result标示最终校验结果。
s5:服务端采用aes解密算法对打包数据进行解密后,判断打包数据中的所有校验信息是否均与s2中的配置文件相同(swf文件名称相同,swf文件的最终校验结果相同),若是,服务端确认swf文件正常(未被修改),当前客户端为正常用户,结束;否则服务端确认swf文件异常(被修改),当前客户端为异常用户,结束。
s2中客户端加载主swf文件后,通过主swf文件加载其他所有需要使用的从swf文件的流程为:
s201:定义actionscript的组件loader,以用于加载主swf文件,具体实现流程为:privatevarswfloader:loader=newloader(),转到s202。
s202:调用loader的接口load从网络中加载主swf文件,具体实现流程为:swfloader.load(newurlrequest("htttps://xx.swf"));其中urlrequest("htttps://xx.swf")代表从网络中加载的swf文件(xx.swf),转到s203。
s203:主swf文件加载完成后,主swf文件会自动加载所有从swf文件,此时会通过预先注册的事件来触发回调函数swfcompletehandler回调所有swf文件,具体实现流程为:
privatefunctionswfcompletehandler(evt:event):void;
预先注册的事件为:
swfloader.contentloaderinfo.addeventlistener(event.complete,swfcompletehandler);转到s204。
s204:调用cmodule的malloc分配校验内存,校验内存的大小为加载的所有swf文件的大小的总和,具体实现流程为:varinptr:int=cmodule.malloc(swfloader.contentloaderinfo.bytestotal),转到s205。
s205:加载的所有swf文件存储在swfloader.contentloaderinfo.bytes中,通过调用cmodule的writebytes接口,将所有swf文件拷贝至校验内存中,具体实现流程为:cmodule.writebytes(inptr,swfloader.contentloaderinfo.bytestotal,swfloader.contentloaderinfo.bytes),转到s206。
s206:调用cmodule的malloc来分配一个内存,用于返回校验的结果数据,具体实现流程为:varresultptr:int=cmodule.malloc(4)。
s3的具体实现流程为:
verifydata(inptr,swfloader.contentloaderinfo.bytestotal,resultptr)
校验接口为:
voidverifydata(char*pdata,intndatalen,char*presult);
verifydata(inptr,swfloader.contentloaderinfo.bytestotal,resultptr)
其中参数char*pdata是传入对所需要校验的数据,参数intndatalen是传入对所需要校验的数据长度,参数char*presult是传出数据校验的结果。
在verifydata函数内部实现是调用的md5算法(messagedigestalgorithm5,消息摘要算法第五版)的接口函数和crc32(循环冗余校验)算法的接口函数。
具体md5算法的接口为:
voidmd5create(char*input,intinput_len,char*md5result);
其中参数char*input为输入需要计算md5的数据,参数intinput_len为输入需要校验数据的长度,参数char*md5result为计算的md5结果数据。
具体的crc32算法的接口为:
voidcrc32(char*input,intlen,char*result);
其中参数char*input为输入需要计算crc32的数据,参数intlen为输入需要校验数据的长度,参数char*result为计算的crc32结果数据。
verifydata具体实现的伪代码如下:
voidverifydata(char*pdata,intndatalen,char*presult)
verifydata(inptr,swfloader.contentloaderinfo.bytestotal,resultptr)
//首先通过md5算法计算需要校验的swf文件的数据,得到md5校验结果:
char*pmd5result=null;
md5create(pdata,ndatalen,pmd5result);
//然后通过crc32算法计算需要校验的swf文件的数据,得到crc32校验结果:
char*pcrc32result=null;
crc32(pdata,ndatalen,pcrc32result);
//最后将md5校验结果和crc32校验结果拼接起来,做为swf文件的数据的最终校验结果:
presult=pmd5result+pcrc32result。
本发明实施例提供的swf文件的校验系统,包括主swf生成模块;位于客户端的swf文件加载模块、swf文件校验模块和校验结果上传模块;以及位于服务端的swf文件校验配置模块和校验结果比对模块。
主swf生成模块用于:采用c语言编译生成具有校验功能swc库文件,通过actionscript脚本调用swc库文件编译形成主swf文件。
swf文件加载模块用于:加载主swf文件后,通过主swf文件加载所有需要使用的从swf文件,向swf文件校验模块发送swf文件校验信号。
swf文件校验配置模块用于:生成配置文件,配置文件中包括每份需要校验的swf文件名称和最终校验结果,将所需需要校验的swf文件名称发送至swf文件校验模块。
swf文件校验模块用于:收到swf文件校验信号后,调用主swf文件中的swc库文件,对需要校验的swf文件(与配置文件中的swf文件名称相同)进行校验,校验流程为:通过md5算法对需要校验的swf文件的数据进行计算,得到md5校验结果;通过crc32算法对需要校验的swf文件的数据进行计算,得到crc32校验结果;将md5校验结果和crc32校验进行拼接得到最终校验结果,向校验结果上传模块发送所有最终校验结果。
校验结果上传模块用于:收到所有最终校验结果后,根据需要校验的swf文件的文件标识(即swf文件名称)、以及该swf文件的最终校验结果,形成校验信息;将所有校验信息进行打包形成打包数据,采用aes加密算法对打包数据进行加密后,发送至服务端的校验结果比对模块。
校验结果比对模块用于:收到打包数据后,采用aes解密算法对打包数据进行解密;判断打包数据中的所有校验信息是否均正确,若是,则确认swf文件正常,否则确认swf文件异常。所有校验信息均正确的标准为:每条校验信息中,需要校验的swf文件名称,与配置文件中对应的swf文件名称相同;需要校验的swf文件的最终校验结果,与配置文件中对应的最终校验结果相同。
上述实施例提供的swf文件的校验系统在进行swf文件的校验时,仅以上述各模块的划分进行举例说明;在实际应用中,可根据需要将系统的内部结构划分成与上述不同的模块,以完成以上描述的全部或者部分功能。
进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。