发明内容
针对上述技术问题,本发明实施例提供了一种数据调用方法及数据调用装置,可以保证核心算法的安全,防止核心算法被破解和非法调用。
本发明实施例的第一方面提供一种数据调用方法,应用于条码识别设备,包括:
接收通过受限接口调用所述条码识别设备的目标动态链接库的调用请求;
基于随机算法判断所述调用请求是否需要校验;
当所述调用请求需要校验时,通过代理函数获取访问钥匙,所述访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到;
使用所述预设加密算法的私钥对所述访问钥匙进行解密,以得到解密结果;
将所述解密结果与所述随机因子的值进行校验,以检验使用受限接口调用所述目标动态链接库是否合法;
当校验成功时,则确定使用受限接口调用所述目标动态链接库合法;
基于所述代理函数查找当前时刻所述目标散列哈希表中保存的所述目标动态链接库的目标调用接口地址的索引下标;
根据所述索引下标在所述目标散列哈希表中查找,以得到所述目标动态链接库。
可选地,所述基于所述代理函数查找当前时刻所述目标散列哈希表中保存的所述目标动态链接库的目标调用接口地址的索引下标之前,所述方法还包括:
获取所述条码识别设备的目标动态链接库的目标调用接口地址;
将所述目标调用接口地址保存至所述目标散列哈希表,所述目标散列哈希表为包括假数据的散列表;
根据随机算法对所述目标散列哈希表进行刷新,以得到所述目标调用接口地址在所述目标散列中的索引下标。
可选地,所述获取所述条码识别设备的目标动态链接库的目标调用接口地址包括:
获取所述条码识别设备的目标密文片段;
构建目标内存文件,所述目标内存文件为固定大小的内存文件;
将所述密文片段进行解密,以得到目标明文片段;
将所述目标明文片段在所述目标内存文件中合成所述目标动态链接库;
加载所述目标动态链接库至所述条码设备的当前程序的进程空间,以得到所述目标动态链接库的目标调用接口地址。
可选地,所述通过代理函数获取访问钥匙包括:
通过非受限接口获取随机因子的值,所述随机因子的值为基于所述条码识别设备的当前系统时间以及所述目标散列哈希表对应的目标函数进行计算得到;
利用预设加密算法的公钥对所述随机因子的值进行加密,以得到访问钥匙。
可选地,当所述调用请求无需校验时,所述方法还包括:
直接通过所述受限接口调用所述目标动态链接库。
本发明实施例第二方面提供了一种数据调用装置,应用于条码识别设备,包括:
接收单元,用于接收通过受限接口调用所述条码识别设备的目标动态链接库的调用请求;
校验单元,用于基于随机算法判断所述调用请求是否需要校验;
第一获取单元,用于当所述调用请求需要校验时,通过代理函数获取访问钥匙,所述访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到;
解密单元,用于使用所述预设加密算法的私钥对所述访问钥匙进行解密,以得到解密结果;
所述校验单元,还用将所述解密结果与所述随机因子的值进行校验,以检验使用受限接口调用所述目标动态链接库是否合法;
确定单元,用于当校验成功时,则确定使用受限接口调用所述目标动态链接库合法;
查找单元,用于基于所述代理函数查找当前时刻所述目标散列哈希表中保存的所述目标动态链接库的目标调用接口地址的索引下标;
所述查找单元,还用于根据所述索引下标在所述目标散列哈希表中查找,以得到所述目标动态链接库。
可选地,所述装置还包括:
第二获取单元,用于获取所述条码识别设备的目标动态链接库的目标调用接口地址;
存储单元,用于将所述目标调用接口地址保存至所述目标散列哈希表,所述目标散列哈希表为包括假数据的散列表;
刷新单元,用于根据随机算法对所述目标散列哈希表进行刷新,以得到所述目标调用接口地址在所述目标散列中的索引下标。
可选地,所述第二获取单元具体用于:
获取所述条码识别设备的目标密文片段;
构建目标内存文件,所述目标内存文件为固定大小的内存文件;
将所述密文片段进行解密,以得到目标明文片段;
将所述目标明文片段在所述目标内存文件中合成所述目标动态链接库;
加载所述目标动态链接库至所述条码设备的当前程序的进程空间,以得到所述目标动态链接库的目标调用接口地址。
本发明实施例第三方面提供了一种处理器,所述处理器用于运行计算机程序,所述计算机程序运行时执行如上述任意一项所述的数据调用方法的步骤。
本发明实施例第六方面提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现上述任意一项所述的数据调用方法的步骤。
综上所述,本发明提供的实施例中,接收通过受限接口调用条码识别设备的目标动态链接库的调用请求,基于随机算法判断调用请求是否需要校验,当调用请求需要校验时,获取访问钥匙,访问钥匙由代理函数提供,且访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到,使用预设加密算法的私钥对所述访问钥匙进行解密,以得到解密结果,将解密结果与随机因子的值进行校验,以检验使用受限接口调用目标动态链接库是否合法,当校验成功时,则确定使用受限接口条用目标动态链接库合法,基于代理函数查找当前时刻目标散列哈希表中保存的目标动态链接库的目标调用接口地址的索引下标,根据索引下标在所述目标散列哈希表中查找,以得到目标动态链接库。由此可以看出,本发明中,采用了带有公钥和私钥的加密算法,加密部分和解密部分具有一对一的强耦合特点,具有不可分割的强耦合性,难以通过反汇编来单独剥离目标动态链接库,通过本技术方案可以大大的提高核心动态链接库被破解的难度。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明实施例可以应用于条码识别设备,下面从数据调用装置的角度,对本发明中数据调用方法进行详细说明,所述数据调用装置可以为服务器,也可以为该服务器中的功能单元。其中,数据调用装置可以分为应用调用层,加固层和动态链接库层,动态库层在条码识别设备的文件存储中是密文,该加固层一方面面向应用层提供接口调用,另一方面面向动态链接库,提供应用接口的调用代理。其中,该加固层面向应用层提供的接口按照权限分为两类,受限接口和非受限接口,受限接口需要应用层提供当前访问的钥匙;非受限接口则不存在上述限制,应用层对非受限接口的调用和正常的接口无差异,主要针对如更新当前的Random因子等状态获取类接口,而应用层通过受限接口的调用即需要通过校验,只有当校验通过时,才准许调用,否则拒绝调用。
请参阅图1,图1为本发明实施例提供的数据调用方法的一个实施例示意图,具体包括:
101、接收通过受限接口调用的条码识别设备的目标动态链接库的调用请求。
本实施例中,数据调用装置可以接收通过受限接口调用条码识别设备的目标动态链接库的调用请求,该目标动态链接库为预先在条码识别设备的文件系统中生成的,该目标动态链接库为预设数目(例如3个或5个)个明文片段合成的,其中,该预设数目为大于2的正整数,该预设数目个明文片段为对条码识别设备内存文件系统中存储的预设数目个密文片段进行解密得到。
需要说明的是,在条码识别设备的文件系统中动态链接库是以3-5个密文片段存储的,在加固层初始化的时候会去读取正确的密文片段,将其通过算法解密,在内存中合并成正确的目标动态链接库。
102、基于随机算法判断调用请求是否需要校验,若是,则执行步骤103,若否,则执行步骤109。
本实施例中,当数据调用装置接收到通过受限接口调用条码识别设备的目标动态库的调用请求,可以基于随机算法判断调用请求是否需要校验,当该调用请求需要校验时,则执行步骤103,当该调用请求无需校验时,则执行步骤109。具体的,数据调用装置会根据自身的随机算法来决定何时对调用请求进行校验,当无需校验时,受限接口的访问不会存在任何限制。
103、当调用请求需要校验时,通过代理函数获取访问钥匙。
本实施例,当数据调用装置确定该调用请求需要校验时,数据调用装置通过代理函数获取访问钥匙,该访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到。该随机因子的值为基于条码识别设备的系统时间为种子,根据目标散列哈希表的函数定时计算出来随机数。
需要说明的是,在加固层初始化的时候会把所有目标动态链接库的函数地址(即目标调用接口)散列到目标散列哈希表中,并且会定期去对目标散列哈希表做循环移位,并且在每次刷新之后,会重新计算随机因子,其实就是一个随机数,只是这个随机数是由目标散列哈希表计算出来的,
104、使用预设加密算法的私钥对访问钥匙进行解密,以得到解密结果。
本实施例中,数据调用装置在得到访问钥匙时,可以使用预设加密算法的私钥对访问钥匙进行解密,得到解密结果。需要说明的时,该预设加密算法可以为RSA(Rivest-Shamir-Adleman,RSA)非对称加密算法,当然也可以是其他的包括公钥和私钥的加密算法,具体不做限定。
105、将解密结果与随机因子的值进行校验,以校验使用受限接口调用目标动态链接库是否合法,当校验成功时,执行步骤106,当校验不成功时,则执行步骤110。
本实施例中,条码识别设备可以将解密结果与随机因子的值进行校验,以校验使用受限接口调用目标动态链接库是否合法,当校验成功时,则校验成功时,则执行步骤106,当校验不成功时,则执行凋110。
106、当校验成功时,则确定使用受限接口调用目标动态链接库合法。
本实施例中,当数据调用装置对加密结果和随机因子的值校验成功时,则确定使用该受限接口调用目标动态链接库合法,即可以使用该受限接口对该目标动态链接库进行调用。
需要说明的时,RSA算法是目前公认最安全的算法,其应用很广,典型的如银行系统等,属于一种非对称的加密算法,这里假设M为明文片段,C为密文片段,则:
加密:C=MeMod(N),公钥为(E,N);
解密:M=CdMod(N),私钥为(D,N);
由于随机因子是以条码识别设备的系统时间为种子,目标散列哈希表计算得出的,且是随着时间而变化的,所以当调用时,只有知道所采用的RAS算法和对应的公钥才能计算出正确的钥匙,当进行校验时,会解密调用参数的钥匙得到的结果与当前的随机因子做对比,从而保证调用者的合法性。
107、基于代理函数查找当前时刻目标散列哈希表中保存的目标动态链接库的目标调用接口的索引下标。
本实施例中,由于目标动态链接库的目标调用地址预先存储在目标散列哈希表,因此,数据调用装置可以基于代理函数查找当前时刻目标散列哈希表保存的目标动态链接库的目标调用接口的索引下标。
需要说明的时,目标动态链接库的函数是不爆露给应用的,这里的代理函数是对外提供的函数,即通过该代理函数来访问目标动态链接库,这里的代理函数就是加固层的函数。
需要说明的是,该目标动态链接库的目标调用接口地址为预先存储于目标散列哈希表中,数据调用装置可以根据随机算法对目标散列哈希表进行刷新,得到目标调用接口地址在目标散列哈希表中的索引下标,具体的,数据调用装置可以在基于代理函数查找当前时刻目标散列哈希表中保存的目标动态链接库的目标调用接口的索引下标之前,获取条码识别设备的目标动态链接库的目标调用接口地址,并将该目标调用接口地址保存至目标散列哈希表中,该目标散列哈希表中包括大量的Dummy数据(这种Dummy数据为假数据,起到混淆的目的,以假乱真的效果,目标动态链接库的目标调用接口地址也是数据,其混在大量假数据中,增加分析的难度),同时,根据随机算法对目标散列哈希表进行刷新,以得到目标调用接口地址在目标散列哈希表中的索引下标。
需要说明的时,数据调用装置获取条码识别设备的目标动态链接库的目标调用接口地址包括:
获取条码识别设备的目标密文片段;
构建目标内存文件,目标内存文件为固定大小的内存文件;
将密文片段进行解密,以得到目标明文片段;
将目标明文片段在目标内存文件中合成目标动态链接库;
加载目标动态链接库至条码设备的当前程序的进程空间,以得到目标动态链接库的目标调用接口地址。
下面进行具体对数据调用装置如何得到目标动态链接库的目标调用接口地址以及数据调用装置如何对目标散列哈希表刷新进行说明:
数据调用装置,在加固层初始化的时候会去读取条码识别设备存储的正确的密文片段,将其通过算法(具体不限定该算法的种类,只要加密解密采用统一算法即可)解密,在条码识别设备的内存中合并成目标动态链接库,与此同时,数据调用装置会分配一个固定Size的目标内存,本实施例中为2048K字节(当然也可以是其他的数值,例如1024K字节,具体不限定),并将此目标内存挂载到条码识别设备的文件系统中,挂载的路径为/tmp/~data/,挂载成功后,将目标动态链接库写入到挂载的目标内存的内存文件目录下,写入完成后,当前程序会立即对目标动态链接库进行加载(具体的,使用dlopen函数加载内存文件系统中的目标动态链接库,通过dlsym获取目标动态链接库在当前进程空间的映射地址即是目标调用接口地址),以将目标动态链接库加载到当前程序的进程空间中,并将目标动态链接库映射的函数地址保存到目标散列哈希表哈希表中(即将目标动态链接库的目标调用接口地址保存至目标散列哈希表中),完成以上操作后,会立即删除动态链接库在内存文件系统路径中的原文,因为整个操作都是在内存中完成,所以原文在文件系统中出现的时间非常短暂,经过实测为20ms,增加了目标动态链接库的安全系数。
另外,数据调用装置在将目标动态链接库的目标调用接口保存至目标散列哈希表中后,可以根据随机算法不定期,无规律的对目标散列哈希表进行刷新,并在完成每一次刷新都会记录真实的目标动态链接库对应的函数入口在散列表中的下标(即目标调用接口地址的索引下标),同时在每次刷新之后会,更新随机因子。
数据调用装置,在应用层通过非受限接口获取此随机因子的值,利用RSA非对称加密算法的公钥对此随机因子的值进行加密生成访问合法性钥匙(即访问钥匙),在受限接口的使用时作为形参传入,加固层会对受限接口的调用使用校验算法,例如会使用RSA非对称加密算法的私钥对代理函数提供的形参Key(即访问钥匙)进行解密,获取到的解密结果与随机因子做校验,若校验成功,则确定通过该受限接口的调用为合法的,则通过代理函数查找当前时刻目标散列哈希表中保存的目标动态链接库的目标调用接口地址的索引下标。
108、根据索引下标在目标散列哈希表中查找,以得到目标动态链接库。
本实施例中,当得到索引下标之后,数据调用装置可以依据该索引下标在目标散列哈希表中查找,最终得到目标动态链接库。
109、执行其他操作。
本实施例中,当数据调用装置确定调用请求无需校验时,则数据调用装置可以直接基于代理函数查找当前时刻目标散列哈希表中保存的目标动态链接库的目标调用接口地址的索引下标,进而根据索引下标在目标散列哈希表中查找,以得到目标动态链接库;当数据调用装置确定校验位成功时,则确定此次使用受限接口调用目标动态链接库时不合法的,则拒绝该次调用。
需要说明的时,数据调用装置的加固层在初始化的时候,会获取条码识别的硬件特征码(identification identity,ID),根据其特征码ID经过算法的加密,形成密文1,对该密文1进行MD5(Message Digest Algorithm MD5,消息摘要算法第五版)运算求得定长密文2,然后对密文2进行高级加密标准(Advanced Encryption Standard,AES)运算,最终求得公私钥生成的初始值参数,通过这样操作可以保证因条码识别设备的差异加固层的初始状态会不同,增加分析的难度。
需要说明的时,目标动态链接库为提前合成的,同时目标动态链接库也是提前保存至目标散列哈希表中,在保存至目标散列哈希表之后,数据调用装置会不定期、无规律的根据随机算法进行刷新,与上述实施例中所述的调用方法为同步进行的,两者之间并没有先后执行顺序的限制。
需要说明的是,上述所述的随机算法可以为任意的随机算法,此处具体不限定随机算法的种类。
综上所述,本发明实施例提供的技术方案中,数据调用装置可以无规律,不定期的对接口调用加以拦截,独立的构建了一套加固系统(无规律的刷新目标散列哈希表)能够大大提高反汇编破解的难度,增加企业核心技术的安全系数,因采用了非对称的RSA加密算法,加密部分和解密部分具有一对一的强耦合特点,保证了数据调用装置的调用层和加固调用层具有不可分割的强耦合性,难以通过反汇编来单独剥离目标动态链接库,通过本发明可以有效的防止目前主流的对核心动态链接库的破解和非法调用,有效保护企业的核心技术。
上面对本发明实施例中的数据调用方法进行了描述,下面对本发明实施例中的数据调用装置进行描述,请参阅图2,图2为本发明实施例中数据调用装置的一个实施例示意图,该数据调用装置200应用于条码识别设备,具体包括:
接收单元201,用于接收通过受限接口调用所述条码识别设备的目标动态链接库的调用请求;
校验单元202,用于基于随机算法判断所述调用请求是否需要校验;
第一获取单元203,用于当所述调用请求需要校验时,通过代理函数获取访问钥匙,所述访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到;
解密单元204,用于使用所述预设加密算法的私钥对所述访问钥匙进行解密,以得到解密结果;
所述校验单元202,还用将所述解密结果与所述随机因子的值进行校验,以检验使用受限接口调用所述目标动态链接库是否合法;
确定单元205,用于当校验成功时,则确定使用受限接口调用所述目标动态链接库合法;
查找单元206,用于基于所述代理函数查找当前时刻所述目标散列哈希表中保存的所述目标动态链接库的目标调用接口地址的索引下标;
所述查找单元206,还用于根据所述索引下标在所述目标散列哈希表中查找,以得到所述目标动态链接库。
为了便于理解,下面结合图3进行说明。
请参阅图3,图3为本发明实施例提供的数据调用装置的另一实施例示意图,该数据调用装置300应用于条码识别设备,具体包括:
接收单元301,用于接收通过受限接口调用所述条码识别设备的目标动态链接库的调用请求;
校验单元302,用于基于随机算法判断所述调用请求是否需要校验;
第一获取单元303,用于当所述调用请求需要校验时,通过代理函数获取访问钥匙,所述访问钥匙是通过预设加密算法的公钥对随机因子的值进行加密得到;
解密单元304,用于使用所述预设加密算法的私钥对所述访问钥匙进行解密,以得到解密结果;
所述校验单元302,还用将所述解密结果与所述随机因子的值进行校验,以检验使用受限接口调用所述目标动态链接库是否合法;
确定单元305,用于当校验成功时,则确定使用受限接口调用所述目标动态链接库合法;
查找单元306,用于基于所述代理函数查找当前时刻所述目标散列哈希表中保存的所述目标动态链接库的目标调用接口地址的索引下标;
所述查找单元306,还用于根据所述索引下标在所述目标散列哈希表中查找,以得到所述目标动态链接库;
第二获取单元307,用于获取所述条码识别设备的目标动态链接库的目标调用接口地址;
存储单元308,用于将所述目标调用接口地址保存至所述目标散列哈希表,所述目标散列哈希表为包括假数据的散列表;
刷新单元309,用于根据随机算法对所述目标散列哈希表进行刷新,以得到所述目标调用接口地址在所述目标散列中的索引下标。
可选地,所述第二获取单元307具体用于:
获取所述条码识别设备的目标密文片段;
构建目标内存文件,所述目标内存文件为固定大小的内存文件;
将所述密文片段进行解密,以得到目标明文片段;
将所述目标明文片段在所述目标内存文件中合成所述目标动态链接库;
加载所述目标动态链接库至所述条码设备的当前程序的进程空间,以得到所述目标动态链接库的目标调用接口地址。
可选地,所述第一获取单元303具体用于:
通过非受限接口获取随机因子的值,所述随机因子的值为基于所述条码识别设备的当前系统时间以及所述目标散列哈希表对应的目标函数进行计算得到;
利用预设加密算法的公钥对所述随机因子的值进行加密,以得到访问钥匙。
可选地,所述数据调用装置300还包括调用单元310,所述调用单元310用于,当所述调用请求无需校验时,直接通过所述受限接口调用所述目标动态链接库。
综上所述,本发明实施例提供的技术方案中,数据调用装置可以无规律,不定期的对接口调用加以拦截,独立的构建了一套加固系统(无规律的刷新目标散列哈希表)能够大大提高反汇编破解的难度,增加企业核心技术的安全系数,因采用了非对称的RSA加密算法,加密部分和解密部分具有一对一的强耦合特点,保证了数据调用装置的调用层和加固调用层具有不可分割的强耦合性,难以通过反汇编来单独剥离目标动态链接库,通过本发明可以有效的防止目前主流的对核心动态链接库的破解和非法调用,有效保护企业的核心技术。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
请参阅图4,本发明实施例还提供了一种服务器,所述服务器包括处理器401和存储器402,上述接收单元、检验单元以及第一获取单元等单元均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器401中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来对用户数据进行更新。
存储器402可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述数据调用方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述数据调用方法。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化执行所述数据调用方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。