一种恶意代码检测方法、可读存储介质及电子设备转让专利

申请号 : CN202310182499.1

文献号 : CN116089951B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李峰孙瑞勇时伟强景凯彭勃

申请人 : 山东云天安全技术有限公司

摘要 :

本发明涉及网络安全领域,特别是涉及一种恶意代码检测方法、可读存储介质及电子设备。包括获取待测PE文件的检测序列。使用滑动窗口对所述操作码序列进行切分,生成多个操作码子序列;对每一操作码子序列进行特征转化处理,生成每一所述操作码子序列对应的待测特征子向量;将每一所述待测特征子向量分别输入恶意检测神经网络模型,生成每一所述待测特征子向量对应的检测结果;若存在任一所述检测结果为恶意,则确定所述待测PE文件对应的代码为恶意代码。本发明中通过设置滑动窗口可以得到长度更小的待测特征子向量。由于掺杂的无用代码的比例减少,所以恶意代码所具有的恶意特征会更加突出,进而提高检测精准度。

权利要求 :

1.一种恶意代码检测方法,其特征在于,所述方法包括如下步骤:获取待测PE文件的检测序列;所述检测序列包括操作码序列;

使用滑动窗口对所述操作码序列进行切分,生成多个操作码子序列;其中,所述滑动窗口的滑动步长L满足如下条件:L=S/n;

S为所述滑动窗口总长度;n为滑动系数,n属于正整数;

对每一操作码子序列进行特征转化处理,生成每一所述操作码子序列对应的待测特征子向量;

将每一所述待测特征子向量分别输入恶意检测神经网络模型,生成每一所述待测特征子向量对应的检测结果;所述恶意检测神经网络模型包括门控卷积网络及全连接神经网络;所述门控卷积网络用于提取所述待测特征子向量的数据特征;所述全连接神经网络用于根据所述待测特征子向量的数据特征生成对应的分类检测结果;

若存在任一所述检测结果为恶意,则确定所述待测PE文件对应的代码为恶意代码。

2.根据权利要求1所述的方法,其特征在于,所述滑动窗口的总长度为多个,多个所述滑动窗口总长度的获取方法如下:对恶意代码库中的每一恶意PE文件进行反汇编操作,生成每一所述恶意PE文件对应的操作码序列;

对多个所述恶意PE文件对应的操作码序列进行K‑Means聚类处理,生成G个聚类族群;

将每一所述聚类族群中所有操作码序列的平均序列长度,作为所述滑动窗口对应的总长度A1,A2,…,Ai,…,AG;其中,Ai为第i个聚类族群对应的平均序列长度;i=1,2,…,G;G为聚类族群的总数量。

3.根据权利要求2所述的方法,其特征在于,所述使用滑动窗口对所述操作码序列进行切分,包括:使用长度分别为A1,A2,…,Ai,…,AG的滑动窗口对所述操作码序列进行G次切分。

4.根据权利要求1所述的方法,其特征在于,获取待测PE文件的操作码序列,包括:对所述待测PE文件进行脱壳处理,生成所述待测PE文件对应的二进制数据;

对所述待测PE文件对应的二进制数据进行反汇编处理,生成所述待测PE文件的操作码序列。

5.根据权利要求1所述的方法,其特征在于,所述特征转化处理,包括:对所述操作码子序列进行3‑gram分组处理,生成多个操作码子组序列;

计算每个所述操作码子组序列在整个操作码序列中的TF‑IDF;

对每个所述操作码子组序列在整个操作码序列中的TF‑IDF进行编码,生成所述操作码子序列对应的待测特征子向量。

6.根据权利要求1所述的方法,其特征在于,所述检测序列还包括所述待测PE文件的API调用序列。

7.根据权利要求2所述的方法,其特征在于,在生成G个聚类族群之后,所述方法还包括;

将每一所述聚类族群中所有操作码序列长度的众数或中位数,作为所述滑动窗口对应的总长度B1,B2,…,Bi,…,BG;其中,Bi为第i个聚类族群对应的操作码序列长度的众数或中位数;i=1,2,…,G;G为聚类族群的总数量。

8.根据权利要求1所述的方法,其特征在于,在将每一所述待测特征子向量分别输入恶意检测神经网络模型之后,所述方法还包括:若所有所述检测结果均为正常,则确定所述待测PE文件对应的代码为正常代码。

9.一种非瞬时性计算机可读存储介质,所述非瞬时性计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的一种恶意代码检测方法。

10.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8任一项所述的一种恶意代码检测方法。

说明书 :

一种恶意代码检测方法、可读存储介质及电子设备

技术领域

[0001] 本发明涉及网络安全领域,特别是涉及一种恶意代码检测方法、可读存储介质及电子设备。

背景技术

[0002] 在反病毒研究与恶意代码的对抗过程中,恶意代码技术的不断发展也促使了恶意程序检测技术的不断发展与进步,新型恶意代码编写技术也导致了新型检测技术的出现。
[0003] 现有技术中,可以基于机器学习的方式对恶意代码进行特征识别,以更加快速且高精度的对恶意代码进行检测。由于恶意代码中会存在大量的相似操作特征,所以现有的基于机器学习的检测方式一般为提取恶意代码中的opcode序列(操作码)作为待检测特征,再输入神经网络中进行辨识检测。
[0004] 而现今的反病毒是一个对抗的过程。为了对抗上述的检测方式,在恶意代码编写完成后,会加入大量的正常代码或不会起到任何作用的无用代码,来削弱恶意代码所体现出来的恶意特征。由此,使得现有的检测方式无法准确检测出此类恶意代码,检测精准度降低。

发明内容

[0005] 针对上述技术问题,本发明采用的技术方案为:
[0006] 根据本发明的一个方面,提供了一种恶意代码检测方法,方法包括如下步骤:
[0007] 获取待测PE文件的检测序列;所述检测序列包括操作码序列;
[0008] 使用滑动窗口对所述操作码序列进行切分,生成多个操作码子序列;其中,所述滑动窗口的滑动步长L满足如下条件:
[0009] L=S/n;
[0010] S为所述滑动窗口总长度;n为滑动系数,n属于正整数;
[0011] 对每一操作码子序列进行特征转化处理,生成每一所述操作码子序列对应的待测特征子向量;
[0012] 将每一所述待测特征子向量分别输入恶意检测神经网络模型,生成每一所述待测特征子向量对应的检测结果;所述恶意检测神经网络模型包括门控卷积网络及全连接神经网络;所述门控卷积网络用于提取所述待测特征子向量的数据特征;所述全连接神经网络用于根据所述待测特征子向量的数据特征生成对应的分类检测结果;
[0013] 若存在任一所述检测结果为恶意,则确定所述待测PE文件对应的代码为恶意代码。
[0014] 若存在任一检测结果为恶意,则确定待测PE文件对应的代码为恶意代码。
[0015] 根据本发明的第二个方面,提供了一种非瞬时性计算机可读存储介质,非瞬时性计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述的一种恶意代码检测方法。
[0016] 根据本发明的第三个方面,提供了一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述的一种恶意代码检测方法。
[0017] 本发明至少具有以下有益效果:
[0018] 本发明中通过设置滑动窗口来将待测特征向量切分为多个待测特征子向量。并将每一待测特征子向量输入训练好的神经网络模型分别进行识别检测。本发明中,加入大量的正常代码或无用代码后的恶意代码,经过反汇编后属于正常的操作码序列的长度远大于属于恶意的操作码序列的长度。所以,通过设置滑动窗口可以得到长度更小的待测特征子向量。由此,在切分过程含有恶意代码的部分的待测特征子向量中,由于掺杂的正常代码或无用代码的比例减少,所以恶意代码所具有的恶意特征会更加突出。进而使得现有的神经网络模型,可以更加容易的提取到恶意代码的恶意特征,以提高检测精准度。

附图说明

[0019] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1为本发明一实施例提供的一种恶意代码检测方法的流程图。
[0021] 图2为本发明另一实施例提供的一种恶意代码检测方法的流程图。

具体实施方式

[0022] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023] 作为本发明一种可能的实施例,如图1所示,提供了一种恶意代码检测方法,该方法包括如下步骤:
[0024] S100:获取待测PE文件(Portable Executable,可移植的可执行的文件)的检测序列。检测序列包括操作码序列。进一步的,检测序列还包括待测PE文件的API(Application Programming Interface,应用程序编程接口)调用序列。
[0025] 通常PE文件中会存在用于盗取信息或破坏设备的恶意程序。常用的EXE、DLL、OCX、SYS、COM都是PE文件。
[0026] 通过对待测PE文件进行的反汇编操作后,可以获取待测PE文件的操作码序列。通过获取待测PE文件在进行运行时产生的API调用列表可以获取到对应的API调用序列。
[0027] 在进行后续的S200和S300时,可以分别对操作码序列及API调用序列进行处理,以去除其中无用代码产生的相关信息。去噪后,可以分别将操作码对应的待测特征子向量及API对应的待测特征子向量,单独作为S400中的输入进行检测。也可以将操作码对应的待测特征及API对应的待测特征拼合成一个待测特征子向量,在作为S400中的输入进行检测。
[0028] 拼合后的待测特征子向量中所包含的特征信息更加全面,对应的可以提高恶意检测神经网络模型最终的检测结果的准确度。
[0029] S200:使用滑动窗口对操作码序列进行切分,生成多个操作码子序列;其中,滑动窗口的滑动步长L满足如下条件:
[0030] L=S/n。
[0031] S为滑动窗口总长度。n为滑动系数,n属于正整数。优选的n=2。
[0032] 以如下示例对本步骤进行说明:
[0033] 如一个恶意的PE文件对应的操作码共有10000个,其中,只有第5000‑6000中的操作码为恶意代码对应的操作码。其对应的,滑动窗口的总长度可以根据实际使用场景中,通常会遇到的恶意代码的操作码的序列长度进行自由设定。如1000。
[0034] 由此,对应的滑动步长L=1000/2=500。根据此滑动窗口的设定本示例中的恶意的PE文件会被划分为19个片段,每个片段的长度为1000,其中第10个和第11个片段中包含恶意代码对应的操作码。且第10个片段中的恶意操作码占比为0.5,第11个片段中的恶意操作码占比为1。
[0035] 由此,通过设置滑动窗口,对待测特征向量进行切分。在切分过程含有恶意代码的部分的待测特征子向量中,由于掺杂的正常代码或无用代码的比例减少,所以恶意代码所具有的恶意特征会更加突出。
[0036] 进一步的,S满足如下条件:
[0037] S=W/k;其中,W为待测特征向量的操作码序列的总长度,k为窗口系数,k为大于等于2的正整数。优选的,k=2,4,8。
[0038] 通常,为了削弱恶意代码的特征至少加入一倍长度的无用代码,另外,考虑到恶意代码的在运行过程中容易被发现,所以需要尽量降低代码的运行时间,也即需要控制无用代码不可加入太多。由此,根据该特性可以大致确定出一个更加精准的S的长度。
[0039] S300:对每一操作码子序列进行特征转化处理,生成每一操作码子序列对应的待测特征子向量。
[0040] 通过TF‑IDF(Term Frequency–Inverse Document Frequency,词频‑逆文档频率)算法,可以将待测PE文件的操作码子序列或API调用序列转化为对应的TF‑IDF值序列,然后,再通过层叠降噪自编码器进行降维处理,得到每一操作码子序列降维后具有预设维度的待测特征子向量。
[0041] 本步骤中的待测特征子向量可为由操作码子序列进行编码转化来的特征向量;也可以为由操作码子序列和对应的API调用序列拼合后形成组合特征,再进行编码后转化来的特征向量;还可以为由操作码子序列、对应的API调用序列及PE文件头部字段拼合后形成组合特征,再进行编码后转化来的特征向量。
[0042] 通过操作码序列、API调用序列及PE文件头部字段拼合后形成的组合特征,可以包含更加全面丰富的特征信息,对应的可以提高恶意检测神经网络模型最终的检测结果的准确度。
[0043] S400:将每一待测特征子向量分别输入恶意检测神经网络模型,生成每一待测特征子向量对应的检测结果。恶意检测神经网络模型包括门控卷积网络及全连接神经网络。门控卷积网络用于提取待测特征子向量的数据特征。全连接神经网络用于根据待测特征子向量的数据特征生成对应的分类检测结果。
[0044] 本步骤中的恶意检测神经网络模型为提前训练好的具有辨识恶意代码和正常代码能力的神经网络模型,可以选用现有的模型作为基础模型,再通过训练样本训练后生成。
[0045] 根据生成的每一待测特征子向量对应的检测结果,可以确定对应的待测PE文件是否为恶意代码,具体确定方法如下:
[0046] S500:若存在任一检测结果为恶意,则确定待测PE文件对应的代码为恶意代码。
[0047] 进一步的,S501:若所有检测结果均为正常,则确定待测PE文件对应的代码为正常代码。
[0048] 本发明中通过设置滑动窗口来将待测特征向量切分为多个待测特征子向量。并将每一待测特征子向量输入训练好的神经网络模型分别进行识别检测。本发明中,加入大量的正常代码或无用代码后的恶意代码,经过反汇编后属于正常的操作码序列的长度远大于属于恶意的操作码序列的长度。所以,通过设置滑动窗口可以得到长度更小的待测特征子向量。由此,在切分过程含有恶意代码的部分的待测特征子向量中,由于掺杂的正常代码或无用代码的比例减少,所以恶意代码所具有的恶意特征会更加突出。进而使得现有的神经网络模型,可以更加容易的提取到恶意代码的恶意特征,以提高检测精准度。
[0049] 作为本发明的另一种可能的实施例,滑动窗口的总长度为多个,多个滑动窗口总长度的获取方法如下:
[0050] S210:对恶意代码库中的每一恶意PE文件进行反汇编操作,生成每一恶意PE文件对应的操作码序列。
[0051] 现有的恶意代码库中会收集有大量的恶意代码,由此,通过对大量的恶意代码进行反汇编,可以得到大量的恶意代码对应的操作码序列。由于,同一种类型的恶意代码在进行攻击时,所使用的技战术具有较高的一致性,所以其代码在一定程度上也具有相似性。根据该特性可以更加准确的确定出滑动窗口的总长度。
[0052] S220:对多个恶意PE文件对应的操作码序列进行K‑Means聚类处理,生成G个聚类族群。
[0053] S230:将每一聚类族群中所有操作码序列的平均序列长度,作为滑动窗口对应的总长度A1,A2,…,Ai,…,AG。其中,Ai为第i个聚类族群对应的平均序列长度。i=1,2,…,G。G为聚类族群的总数量。
[0054] 优选的,S240:将每一聚类族群中所有操作码序列长度的众数或中位数,作为滑动窗口对应的总长度B1,B2,…,Bi,…,BG。其中,Bi为第i个聚类族群对应的操作码序列长度的众数或中位数。i=1,2,…,G。G为聚类族群的总数量。
[0055] 本实施例中,通过K‑Means聚类算法,可以根据代码长度将现有的恶意代码聚类为多个族群。再将每个族群中的恶意代码长度的平均数、众数或中位数,作为的滑动窗口对应的总长度。本实施例中根据现有恶意代码的长度这一先验经验,来确定出恶意代码通常更加可能具有的长度,进而更加准确的确定出多个滑动窗口的总长度。本是实施例中,通过现有的恶意代码库可以更加准确的确定多个出滑动窗口的总长度,有助于通过本实施例中的滑动窗口可以更加准确的切分出恶意代码。
[0056] 作为本发明的另一种可能的实施例,使用滑动窗口对操作码序列进行切分,包括:
[0057] S201:使用长度分别为A1,A2,…,Ai,…,AG的滑动窗口对操作码序列进行G次切分。
[0058] 当确定出多个滑动窗口的长度后,需要使用每一种窗口长度对待测PE文件的操作码序列进行切分。并对切分得到的每一个片段进行特征转化处理,再通过恶意检测神经网络模型进行一一识别检测。
[0059] 作为本发明的另一种可能的实施例,获取待测PE文件的操作码序列,包括:
[0060] S110:对待测PE文件进行脱壳处理,生成待测PE文件对应的二进制数据。
[0061] S120:对待测PE文件对应的二进制数据进行反汇编处理,生成待测PE文件的操作码序列。
[0062] 在对PE文件进行处理的时候,很多PE文件都会加壳(对可执行程序资源压缩、加密,压缩后的程序可以直接运行),所以导致不能直接看到其内部真正的指令,因此在特征提取之前需要对PE文件进行脱壳处理,从而获取PE文件真正执行时所获得的代码。因此,通过PEID软件分别对单个PE文件进行查壳处理,并做标记,然后根据标记确定每类壳的脱壳工具,然后使用对应的脱壳工具进行脱壳,得到各PE文件的二进制数据。
[0063] 然后提取单个PE文件的二进制数据的特征,具体包括提取对应的操作码、API(应用程序接口)调用序列和PE文件头部字段。
[0064] 通过IDAPro软件对得到PE文件的二进制数据进行反汇编,可以得到该PE文件反汇编后的汇编指令,也即待测PE文件的操作码序列。
[0065] 作为本发明的另一种可能的实施例,特征转化处理,包括:
[0066] S310:对操作码子序列进行3‑gram分组处理,生成多个操作码子组序列;
[0067] S320:计算每个操作码子组序列在整个操作码序列中的TF‑IDF;
[0068] S330:对每个操作码子组序列在整个操作码序列中的TF‑IDF进行编码,生成操作码子序列对应的待测特征子向量。
[0069] 本实施例中,将操作码子序列的操作码按照3‑gram的形式依次组成相应的序列,也即操作码子组序列,然后再计算操作码子组序列在整个操作码序列中的TF‑IDF。
[0070] 然后,可以使用层叠降噪自编码器进行降维处理,得到降维后预设维度的特征向量。预设维度可以为25维。S330中也可以对由操作码子序列、对应的API调用序列及PE文件头部字段拼合后形成组合特征进行编码,生成对应的待测特征子向量。
[0071] 作为本发明的另一种可能的实施例,如图2所示,还提供了一种恶意代码检测方法,该方法具体为,在S300与S400之间加入预处理步骤,具体内容如下:
[0072] S100:获取待测PE文件的检测序列。检测序列包括操作码序列。
[0073] S200:对操作码序列进行切分,生成多个操作码子序列。操作码子序列的长度小于或等于操作码序列的长度。
[0074] S300:对每一操作码子序列进行特征转化处理,生成每一操作码子序列对应的待测特征子向量。
[0075] S301:对每一待测特征子向量进行预处理,确定至少一个初始目标子向量。初始目标子向量为多个待测特征子向量中的至少一个。
[0076] S401:将每一初始目标子向量分别输入恶意检测神经网络模型,生成每一初始目标子向量对应的检测结果。恶意检测神经网络模型包括门控卷积网络及全连接神经网络。门控卷积网络用于提取初始目标子向量的数据特征。全连接神经网络用于根据初始目标子向量的数据特征生成对应的分类检测结果。
[0077] S500:若存在任一检测结果为恶意,则确定待测PE文件对应的代码为恶意代码。
[0078] 预处理包括如下步骤:
[0079] S311:计算待测特征子向量与待测特征向量之间的相似度。待测特征向量为操作码序列对应的特征向量。
[0080] 待测特征向量的获得方式可以与待测特征子向量相同,均可以通过层叠降噪自编码器进行降维处理,生成25维的特征向量。
[0081] 由此,可以通过余弦相似度算法计算任意两个向量之间的相似度。
[0082] S312:将相似度小于第一相似阈值的待测特征子向量,确定为初始目标子向量。
[0083] 本实施例中的第一相似阈值可与根据实际使用场景进行设定,如30%‑80%。或者,也可以将多个相似度值中的第3或第4小相似度值作为第一相似阈值。如多个相似度分别为20%、22%、25%、25.6%、40%、41%、42%、44%、44%、45%。则可以将25%或25.6%作为第一相似阈值。
[0084] 具体的,可以通过如下方法确定第一相似阈值X。
[0085] 对得到的多个相似度值进行排序,得到相似度序列C1,C2,…,Cd,…,Cw。其中,C1
[0086] 获取相似度序列对应的间隔值序列D1,D2,…,Dd,…,Dw‑1。其中,Dd=Cd+1‑Cd;Dd为第d个间隔值。
[0087] 根据相似度序列及间隔值序列,生成第一相似阈值X,X满足如下条件:
[0088] X=(Y1+Y2)/2;其中,Y1和Y2分别为MAX(D1,D2,…,Dd,…,Dw‑1)所对应的两个相似度值。
[0089] 根据实施例中的第一相似阈值的算法,可以更加准确的从多个相似度值中,挑选出多个较小且间隔较小的值。如共有10个待测特征子向量,在进行相似度计算中,其中8个的相似度均在50%‑60%的范围内,而只有两个在20%‑30%的范围中。通过本实施例中的算法得到的第一相似阈值,可以准确的将在20%‑30%的范围中的两个相似度值选取出来。
[0090] 待测特征向量中大多数均是正常代码的特征,所以在进行相似度计算时,包含恶意代码的待测特征子向量与待测特征子向量的相似度,会相对小于仅包含正常代码的待测特征子向量与待测特征子向量的相似度。由此,通过预处理可以初步确定出多个待测特征子向量中可能包含恶意代码的待测特征子向量,也即初始目标子向量。再将初始目标子向量输入神经网络进行检测。由于,可以减少输入神经网络中的待测特征子向量的数量,进而可以降低对计算资源的消耗。
[0091] 作为本发明的另一个可能的实施例,S312:将相似度小于第一相似阈值的待测特征子向量,确定为初始目标子向量,包括:
[0092] S3121:将相似度小于第一相似阈值的待测特征子向量,作为第一拼合向量。
[0093] S3122:将第一拼合向量及与第一拼合向量相邻的两个待测特征子向量,拼合成初始目标子向量。
[0094] 由于在进行滑动窗口切分的过程中,通常不可能恰好将全部的恶意代码切分到一个片段中。更多的情况为,滑动窗口的边界恰好切分在恶意代码的中间,由此,在相邻的片段中也存在部分恶意代码,本实施例中将第一拼合向量及与第一拼合向量相邻的两个待测特征子向量,拼合成初始目标子向量,可以更将全面的将恶意代码包含在初始目标子向量中,进而提高初始目标子向量中恶意代码的特征的完整性,由此,可以提高后续检测结果的准确性。
[0095] 作为本发明的另一个可能的实施例,在对操作码序列进行切分之前,方法还包括:
[0096] S111:若操作码序列的长度小于对比长度,则将由操作码序列生成的待测特征向量输入恶意检测神经网络模型,生成操作码序列对应的检测结果。对比长度为A1,A2,…,Ai,…,AG中的最小值。
[0097] 当发现操作码序列的长度比现有的恶意代码的最小长度还小时,则表明该代码中没有加入无用代码,由此不需要对操作码序列进行切分,直接进行检测既可,可以减少多余操作,节省计算资源。
[0098] 本发明的实施例还提供了一种非瞬时性计算机可读存储介质,该存储介质可设置于电子设备之中以保存用于实现方法实施例中一种方法相关的至少一条指令或至少一段程序,该至少一条指令或该至少一段程序由该处理器加载并执行以实现上述实施例提供的方法。
[0099] 本发明的实施例还提供了一种电子设备,包括处理器和前述的非瞬时性计算机可读存储介质。
[0100] 本发明的实施例还提供一种计算机程序产品,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使该电子设备执行本说明书上述描述的根据本发明各种示例性实施方式的方法中的步骤。
[0101] 虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本发明的范围和精神。本发明开的范围由所附权利要求来限定。