一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于新型漏洞指纹的脆弱性检测方法及系统

2022-08-11 08:35:40 来源:中国专利 TAG:


1.本发明属于计算机软件漏洞挖掘技术领域,涉及一种基于新型漏洞指纹的脆弱性检测方法及系统。


背景技术:

2.利用现有组件与代码模板进行开发已经成为软件工程中的常用手段,现有研究指出知名代码仓库github中70%的代码由以前创建文件的克隆组成开源代码作为提高开发效率、降低开发成本的良好选择,在互联网应用、网络安全、医疗卫生、大数据与人工智能、工业控制与自动化等领域有着广泛应用。引用开源项目、调用第三方库以及使用公开组件等手段使得开源代码从不同渠道进入到各类项目中,含有漏洞的代码(脆弱性代码)也被同时引入。开源项目的漏洞信息通常会通过漏洞数据库、邮件列表和项目主页等公开渠道披露,获取漏洞细节的门槛较低,项目受到攻击的风险较高。black duck公司在《开源软件安全与威胁分析报告》中指出,超过67%的使用开源组件的商用软件中存在已知的漏洞代码;研究开源项目中脆弱性代码复用的检测方法对保证信息安全具有重要意义。
3.脆弱性代码的复用是引发漏洞的重要原因之一,检测脆弱性代码复用是面向源代码进行漏洞挖掘的重要手段之一。代码克隆是代码复用的基本手段,代码复用的手段通常是在代码克隆的基础上使用修改注释、重命名、更改操作符或操作数、调整语句顺序、更改代码块顺序、添加冗余代码、更改数据类型、控制结构的等价变换。目前提出的对代码克隆过程中的修改操作的分类方法受到了普遍认可。level1修改是指仅重新排版和删改注释,不对代码部分进行任何变动;level2修改是指对函数名、变量名等标识符进行重命名,并改变变量、函数返回的数据类型;level3修改是指在不影响正常功能的前提下,添加或删除少量语句,替换部分表达式或函数调用;level4修改是指在不影响语义的前提下调整代码结构,更改代码顺序,进行控制结构的等价变换。包含level2、3、4中的修改手段的克隆通常被称为近似克隆(near-miss clone),也被称为代码复用。随着代码修改程度的不断增加,代码复用检测的难度也不断增大。现有工作可以准确完成对level1、2修改手段的检测,但是更进一步的检测需要在分析结构、语义的基础上利用中间表示完成,计算开销较大。常见的代码克隆通常包含level3、4的修改,高效检测包含此类修改的脆弱性代码复用意义重大。
4.现有技术的缺陷和不足:
5.现有方法为了检测脆弱性代码的近似克隆,通常需要将代码抽象为解析树或控制流图等中间表示,与已知漏洞代码的结构或特征进行匹配。然而引入复杂的中间表示会带来较高的计算代价,过度抽象可能会导致漏洞必要属性的缺失.在平衡效率与准确性的前提下。漏洞指纹技术在一定程度上有效缓解了这个问题,但是在代码块的语义和语法表达上却具有一定的欠缺。如何有效应对常见的代码修改手段是研究的重点问题。


技术实现要素:

6.本发明的目的在于解决现有技术中的问题,提供一种基于新型漏洞指纹的脆弱性
检测方法及系统,提高代码复用的检测效率,提高检测方法的鲁棒性与实用性。
7.为达到上述目的,本发明采用以下技术方案予以实现:
8.一种基于新型漏洞指纹的脆弱性检测方法,包括:
9.选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;
10.构建代码解析器;
11.利用代码解析器分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;
12.基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列;
13.对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;
14.对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;
15.将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;
16.对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。
17.本发明的进一步改进在于:
18.构建代码解析器具体为:基于开源解析器antlr4构建解析器对应的岛屿语法,生成代码解析器。
19.在进行预处理之前,将所用代码转换为小写,删除多余空格、制表符、换行符和所有注释;将缩进样式改为lisp样式。
20.代码解析器对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码,具体为:对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换;获得代码规范化和抽象化的结果。
21.对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换,具体为:
22.函数名与参数名替换:从函数的声明中获取所有形式参数,使用符号“_p aram”替换函数体中所有参数变量,使用符号“_funcdec”替换函数声明中的函数名;
23.变量标识符替换:使用符号“_data”替换在函数体内定义并且使用的所有变量;
24.数据类型替换:使用符号“_type”替换数据类型,但不替换signed、uns igned等类型修饰符;
25.常量替换:使用符号“_str”替换代码中字符串常量,不替换所有print类函数中包含的“%”等格式字符的字符串参数;
26.函数调用替换:使用符号“_function”替换每个被调用的函数的名称。
27.基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;具体为:
28.1.1,利用语法树形成控制流图获取代码的基本块和基本块之间的控制转移路径;
29.1.2,将修改前的补丁文件形成的基本块集合称为blocka,路径集合称为p atha;
修改后的基本块集合称为blockb;
30.1.3,利用哈希函数分别计算blocka和blockb中基本块的特征值和patha中路径的特征值;
31.1.4,设置第一空白代码块特征序列和第二空白代码块特征序列,设置第一空白的路径特征序列,将获得的基本块特征值分别添加到第一空白代码块特征序列和第二空白代码块特征序列中,得到修改前的补丁文件的代码块特征序列seqa和修改后的补丁文件的代码块特征序列seqb;将patha获得的路径特征添加到第一空白的路径特征序列中,得到修改后的补丁文件的路径特征序列ha,并形成补丁文件diff对应的特征向量v(seqa,seqb,ha);
32.1.5,针对漏洞补丁中所有的补丁文件diff,重复步骤1.1到1.4获得特征向量v1,v2...vn;特征向量v1,v2...vn共同组成漏洞指纹f{v1,v2...vn};
33.所述漏洞指纹包含的基本块特征序列为修改前的补丁文件的代码块特征序列seqa和修改后的补丁文件的代码块特征序列seqb。
34.对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列,具体为:
35.将敏感代码段划分为若干个基本块和若干条路径,基本块形成的集合称为blockc,路径形成的集合称为pathc;
36.利用哈希函数计算blockc中基本块的特征值和pathc中路径的特征值;
37.设置空白的代码块特征序列和路径特征序列,将获得的基本块特征值添加到空的代码块特征序列中;将pathc获得的路径特征添加到空的路径特征序列,得到敏感代码段的代码块特征序列seqf和敏感代码段的路径特征序列hf。
38.在对敏感代码段进行标记之前,还包括:判定敏感代码段是否满足预设条件;具体为:
39.判定条件1:敏感代码段的代码块特征序列seqf和修改前的补丁文件的代码块特征序列seqa的交集不为空集,敏感代码段的代码块特征序列seqf和修后前的补丁文件的代码块特征序列seqb的交集为空集;
40.判定条件2:对于同一向量形成的位图中特征值对应的位标签相同。
41.判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段;具体为:对于标记的敏感代码段,计算敏感代码段的路径特征序列hf和修改前的补丁文件的路径特征序列ha之间的皮尔逊相关系数;如果相关系数大于0.8则判定为脆弱代码片段。
42.对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;具体为:通过计算待检测代码和形成漏洞指纹的补丁文件之间的最长公共子序列lcs,获取两段代码的相似度如公式(1)所示:
[0043][0044]
其中,si为待测代码行数,sj为补丁文件行数;
[0045]
最长公共子序列lcs为待检测代码和形成漏洞指纹的补丁文件之间最长子序列;
[0046]
皮尔逊相关系数如公式(2)所示:
[0047][0048]
其中,xi为敏感代码段的路径特征序列hf的特征值,yi为修改前的补丁文件的路径特征序列ha的特征值。
[0049]
一种基于新型漏洞指纹的脆弱性检测系统,包括:
[0050]
获取模块,所述获取模块用于选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;
[0051]
构建模块,所述构建模块用于构建代码解析器;
[0052]
预处理模块,所述预处理模块利用代码解析器对分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;
[0053]
漏洞指纹获取模块,所述漏洞指纹获取模块基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列;
[0054]
相似度计算模块,所述相似度计算模块对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;
[0055]
处理模块,所述处理模块用于对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;
[0056]
第一判断模块,所述第一判断模块用于将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;
[0057]
第二判断模块,所述第二判断模块对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。
[0058]
与现有技术相比,本发明具有以下有益效果:
[0059]
本发明通过代码相似性定位可能存在漏洞的敏感代码段,使用漏洞指纹技术对敏感代码段进行判定,使用基于lcs的轻量级代码相似性评估算法过滤无关代码、定位敏感代码,提高代码复用的检测效率。引入基于哈希值的漏洞指纹模型,抽取脆弱性代码细粒度特征,应对代码复用过程中多种常见修改手段带来的影响,提高方法的鲁棒性与实用性
附图说明
[0060]
为了更清楚的说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0061]
图1为本发明实施例的基于新型漏洞指纹的脆弱性检测方法示意图;
[0062]
图2为本发明的控制流图生成方法示意图;
[0063]
图3为本发明的哈希算法示意图;
[0064]
图4为本发明的整体流程图;
[0065]
图5为本发明的cve-2019-20934中diff文件1示意图;
[0066]
图6为本发明的cve-2019-20934中diff文件2示意图;
[0067]
图7为本发明的cve-2019-20934中diff文件3示意图;
[0068]
图8为本发明的代码预处理后的结果图;
[0069]
图9为本发明实施例的基于新型漏洞指纹的脆弱性检测系统结构图。
具体实施方式
[0070]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
[0071]
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0072]
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0073]
在本发明实施例的描述中,需要说明的是,若出现术语“上”、“下”、“水平”、“内”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0074]
此外,若出现术语“水平”,并不表示要求部件绝对水平,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。
[0075]
在本发明实施例的描述中,还需要说明的是,除非另有明确的规定和限定,若出现术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
[0076]
下面结合附图对本发明做进一步详细描述:
[0077]
参见图1,本发明公开了一种基于新型漏洞指纹的脆弱性检测方法,包括:
[0078]
s101:选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;
[0079]
s102:构建代码解析器;
[0080]
基于开源解析器antlr4构建解析器对应的岛屿语法,生成代码解析器。这款解析器可以直接为源文件建立一个具体的语法树。
[0081]
s103:利用代码解析器对分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;
[0082]
在进行预处理之前,将所用代码转换为小写,删除多余空格、制表符、换行符和所有注释;将缩进样式改为lisp样式。
[0083]
对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换;获得代码规范化和抽象化的结果。
[0084]
对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换,具体为:
[0085]
函数名与参数名替换:从函数的声明中获取所有形式参数,使用符号“_p aram”替换函数体中所有参数变量,使用符号“_funcdec”替换函数声明中的函数名;
[0086]
变量标识符替换:使用符号“_data”替换在函数体内定义并且使用的所有变量;
[0087]
数据类型替换:使用符号“_type”替换数据类型,但不替换signed、uns igned等类型修饰符;
[0088]
常量替换:使用符号“_str”替换代码中字符串常量,不替换所有print类函数中包含的“%”等格式字符的字符串参数;
[0089]
函数调用替换:使用符号“_function”替换每个被调用的函数的名称。
[0090]
s104:基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列。
[0091]
对经过代码解析器处理之后形成的语法树通过图2的方式处理过后,形成控制流图cfg(p1,p2,...,pn)。其中p为其中一条基本块之间的状态转移路径p(b1,b2,...,bn)。
[0092]
s104.1,利用语法树形成控制流图获取代码的基本块和基本块之间的控制转移路径;
[0093]
s104.2,将修改前的补丁文件形成的基本块集合称为blocka,路径集合称为patha;修改后的基本块集合称为blockb;
[0094]
s104.3,利用哈希函数分别计算blocka和blockb中基本块的特征值和pat ha中路径的特征值;
[0095]
s104.4,设置第一空白代码块特征序列和第二空白代码块特征序列,设置第一空白的路径特征序列,将获得的基本块特征值分别添加到第一空白代码块特征序列和第二空白代码块特征序列中,得到修改前的补丁文件的代码块特征序列seqa和修改后的补丁文件的代码块特征序列seqb;将patha获得的路径特征添加到第一空白的路径特征序列中,得到修改后的补丁文件的路径特征序列ha,并形成补丁文件diff对应的特征向量v(seqa,seqb,ha);
[0096]
s104.5,针对漏洞补丁中所有的补丁文件diff,重复s104.1到s104.4获得特征向量v1,v2...vn;特征向量v1,v2...vn共同组成漏洞指纹f{v1,v2...vn}。
[0097]
漏洞指纹包含的基本块特征序列为修改前的补丁文件的代码块特征序列se qa和修改后的补丁文件的代码块特征序列seqb。
[0098]
s105:对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;
[0099]
通过计算待检测代码和形成漏洞指纹的补丁文件之间的最长公共子序列lcs,获取两段代码的相似度如公式(1)所示:
[0100][0101]
其中,si为待测代码行数,sj为补丁文件行数;
[0102]
最长公共子序列lcs为待检测代码和形成漏洞指纹的补丁文件之间最长子序列。
[0103]
s106:对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;
[0104]
s106.1,将敏感代码段划分为若干个基本块和若干条路径,基本块形成的集合称为blockc,路径形成的集合称为pathc;
[0105]
s106.2,参见图3,用哈希函数计算blockc中基本块的特征值和pathc中路径的特征值;
[0106]
s106.3,设置空白的代码块特征序列和路径特征序列,将获得的基本块特征值添加到空的代码块特征序列中;将pathc获得的路径特征添加到空的路径特征序列,得到敏感代码段的代码块特征序列seqf和敏感代码段的路径特征序列hf。
[0107]
s107:将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;
[0108]
判定敏感代码段是否满足预设条件,具体为:
[0109]
判定条件1:敏感代码段的代码块特征序列seqf和修改前的补丁文件的代码块特征序列seqa的交集不为空集,敏感代码段的代码块特征序列seqf和修后前的补丁文件的代码块特征序列seqb的交集为空集;
[0110]
判定条件2:对于同一向量形成的位图中特征值对应的位标签相同。
[0111]
s108:对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。
[0112]
对于标记的敏感代码段,计算敏感代码段的路径特征序列hf和修改前的补丁文件的路径特征序列ha之间的皮尔逊相关系数;如果相关系数大于0.8则判定为脆弱代码片段。
[0113]
皮尔逊相关系数如公式(2)所示:
[0114][0115]
其中,xi为敏感代码段的路径特征序列hf的特征值,yi为修改前的补丁文件的路径特征序列ha的特征值。
[0116]
下面通过举例进一步说明发明的有效性,具体过程如图4所示,实施过程如下:
[0117]
步骤1.选取用去构建指纹的漏洞,从各种开源漏洞信息数据库中获取补丁中所有的diff文件作为脆弱性样本代码。diff文件是一种常用的记录代码修改的方式,右一段带有特殊标记的代码行组成。代码行前存在符号“ ”表示此行代码为添加的代码,代码行前存在符号
“‑”
表示此行代码为删除的代码,没有标记则表示没有修改。
[0118]
步骤2.以漏洞cve-2019-20934中的补丁文件举例,补丁文件中包含对fs/exec.c、
include/linux/sched/numa_balancing.h和kernel/fork.c文件中三个函数的修改,如图5、图6和图7所示。
[0119]
步骤3.生成代码解析器,使用开源解析器antlr4构建解析器对应的岛屿语法生成代码解析器。
[0120]
步骤4.代码预处理,利用步骤3生成的代码解析器对脆弱性代码样本进行预处理,将所有代码转换为小写,删除多以空格、制表符、换行符和所有注释。将缩进样式改为lisp样式,文件预处理后的结果如图8所示。
[0121]
预处理如下:
[0122]
步骤4.1,函数名与参数名替换:从函数的声明中获取所有形式参数,使用符号“_param”替换函数体中所有参数变量,使用符号“_funcdec”替换函数声明中的函数名。
[0123]
步骤4.2,变量标识符替换:使用符号“_data”替换在函数体内定义并且使用的所有变量。
[0124]
步骤4.3,数据类型替换:使用符号“_type”替换数据类型,同时替换代码中所有的自定义结构体,替换过程中保留关键字“struct”便于与正常数据类型区分,同时不替换自动逸结构体中声明的成员变量。
[0125]
步骤4.4,常量替换:使用符号“_str”替换代码中字符串常量,但是考虑到可能存在的格式化字符串漏洞,不替换所有print类函数中包含的“%”等格式字符的字符串参数。
[0126]
步骤4.5,函数调用替换,使用符号“_function”替换每个被调用的函数的名称。
[0127]
步骤5,指纹生成。
[0128]
使用输出为32位的murmurhash算法作为哈希函数用于计算特征值,并通过s104的方式形成指纹。如表1所示:
[0129]
表1 cve-2019-20934漏洞指纹
[0130][0131]
步骤6:计算待检测代码的特征值:
[0132]
通过计算待检测代码和形成漏洞指纹的补丁文件之间的最长公共子序列lcs,通过公式(1)获取两段代码的近似相似度,将这段代码作为敏感代码段。同样的经过s106处理
之后获得敏感代码段的特征值。
[0133]
步骤7.漏洞识别
[0134]
步骤7.1漏洞映射,通过s107的方式获取映射位图。
[0135]
步骤7.2漏洞判定,通过对敏感代码段进行标记并进行判定可以得到标记代码片段。通过公式(2)得到漏洞指纹和标记代码片段之间的皮尔逊相关系数,对于结果大于0.8判定敏感代码段为漏洞代码。样本对对应最终结果如表格2所示。
[0136]
表2样本对对应结果
[0137][0138]
参见图9,本发明公布了一种基于新型漏洞指纹的脆弱性检测系统,包括:
[0139]
获取模块,所述获取模块用于选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;
[0140]
构建模块,所述构建模块用于构建代码解析器;
[0141]
预处理模块,所述预处理模块利用代码解析器对分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;
[0142]
漏洞指纹获取模块,所述漏洞指纹获取模块基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列;
[0143]
相似度计算模块,所述相似度计算模块对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;
[0144]
处理模块,所述处理模块用于对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;
[0145]
第一判断模块,所述第一判断模块用于将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;
[0146]
第二判断模块,所述第二判断模块对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。
[0147]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献