基于摘要语法树和语义匹配的软件同源性检测方法及装置制造方法及图纸

技术编号:4058530 阅读:202 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种基于摘要语法树和语义匹配的软件同源性检测方法及装置,通过生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算所述摘要语法树中子树的哈希值;通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。从而在语法层次上,结合语义进行准确而有效的软件同源性检测。

【技术实现步骤摘要】

本专利技术涉及信息安全中的软件安全
,尤其涉及一种基于摘要语法树和语义匹配的软件同源性检测方法及装置
技术介绍
软件同源性检测技术是计算机编程语言研究的一个重要方面,根据其检测的方法不同,这个领域现存在以下主流研究领域:基于文本的软件同源性检测和基于标记(Token)的软件同源性检测。基于文本的软件同源性检测技术方案是基于文本层次进行软件同源性检测,而目前软件源代码抄袭的过程一般都是整块复制,或者在此基础上加以改动,比如替换变量名、在不影响程序功能的情况下打乱语句顺序、更改函数名或者函数位置等等,因此,基于文本的软件同源性检测技术方案仅仅在文本层次进行软件同源性检测,已经不能满足软件同源性检测的需求。而且,基于文本层次的软件同源性检测完全忽略了软件源代码的语法含义,因而有很大的局限性,对于上述软件源代码抄袭手段都无法正确检测出来。基于标记Token的软件同源性检测技术方案主要是用来进行软件源代码克隆检测,也可以用来做软件同源性检测。这种技术方案一定程度上考虑了语言特点,但其原理是查找软件源代码中最长的相似子串,所以不能应对软件源代码顺序调换这样的抄袭情况。目前,还没有一种成熟可靠的软件同源性检测技术方案,在语法层次上结合语义对软件源代码进行有效而准确的同源性检测。
技术实现思路
有鉴于此,本专利技术实施例的目的是提供了一种基于摘要语法树和语义匹配的软件同源性检测方法及装置,从而有效而准确的进行软件同源性检测,以应对各种软件源代码抄袭行为,促进了软件评估工作和保护软件版权的推进。为了达到上述目的,本专利技术实施例提供了一种基于摘要语法树和语义匹配的软件同源性检测方法,包括:生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算所述摘要语法树中子树的哈希值;通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。优选的,上述方法中,所述生成软件源代码对应的摘要语法树包括:将所述软件源代码中的文件包含指令、注释和多余的空白符删除;查找所述软件源代码中被宏定义指令所替换的字符串,并换回原来的字符串;判断所述软件源代码中的条件编译指令中的判断条件是否成立,然后选择删除或保留对应的软件源代码段。优选的,上述方法中,所述语义特征规则至少为下列特征中的一种:条件表达式为比较表达式、变量标识、函数调用。-->优选的,上述方法中,所述计算所述摘要语法树中子树的哈希值包括:根据所述摘要语法树的节点类型信息,计算得到所述节点的哈希值,并以线性链表格式保存所述节点包括哈希值在内的信息;将所述摘要语法树中子树所包括的节点的哈希值进行累加,得到所述子树的哈希值。优选的,上述方法中,所述将所述摘要语法树中子树所包括的节点的哈希值进行累加,得到所述子树的哈希值包括:将除法、减法和取余运算操作前后参与运算的元素赋予不同的权值。优选的,上述方法中,所述通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测包括:根据所述摘要语法树中子树所包括的节点数目,将子树进行分组。本专利技术实施例还提供了一种基于摘要语法树和语义匹配的软件同源性检测装置,包括:生成模块,用于生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算模块,用于计算所述生成模块生成的摘要语法树中子树的哈希值检测模块,用于根据所述计算模块计算获取的所述哈希值,通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。优选的,上述装置中,所述生成模块包括:预处理单元,用于将所述软件源代码中的文件包含指令、注释和多余的空白符删除;查找所述软件源代码中被宏定义指令所替换的字符串,并换回原来的字符串;判断所述软件源代码中的条件编译指令中的判断条件是否成立,然后选择删除或保留对应的软件源代码段;词法分析单元,用于依次读入经过所述预处理单元预处理后的所述软件源代码文本中字符序列,根据所述软件源代码所采用的编程语言语法规则,采用对应的正则表达式将所述字符序列与所述编程语言的匹配规则对应后,返回标识所述字符序列的标记;语法分析单元,用于根据所述词法分析单元返回的所述标记,将所述标记对应的软件源代码序列,与所述软件源代码所采用的编程语言语法规则匹配后,开辟内存空间,生成所述软件源代码对应的摘要语法树中的节点信息,构建所述摘要语法树;语义匹配单元,用于分析所述语法分析单元构建的所述摘要语法树的结构信息,将匹配相同语义特征规则且语义相同的子树调整为统一结构。优选的,上述装置中,所述计算模块包括:节点计算单元,用于根据经过所述语义匹配单元调整之后的所述摘要语法树中的节点类型信息,计算得到所述节点的哈希值;子树计算单元,用于根据所述节点计算单元计算获取的节点哈希值,将所述摘要语法树中子树所包括的节点的哈希值进行累加,得到所述子树的哈希值。优选的,上述装置中,所述检测模块包括:分组单元,用于根据所述摘要语法树中子树所包括的节点数目,将所述子树进行分组。-->由上述本专利技术实施例提供的技术方案可以看出,本专利技术实施例中,通过生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算所述摘要语法树中子树的哈希值;通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。从而在语法层次上,结合语义进行准确而有效的进行软件同源性检测。附图说明图1为本专利技术实施例提供的所述方法具体实现示意图一;图2为本专利技术实施例提供的所述方法具体实现示意图二;图3为本专利技术实施例提供的所述方法具体实现示意图三;图4为本专利技术实施例提供的所述装置具体实现结构示意图一;图5为本专利技术实施例提供的所述装置具体实现结构示意图二;图6为本专利技术实施例提供的所述装置具体实现结构示意图三;图7为本专利技术实施例提供的所述装置具体实现结构示意图四。具体实施方式本专利技术实施例提供了一种基于摘要语法树和语义匹配的软件同源性检测方法,如附图1所示,包括:步骤11,生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;步骤12,计算所述摘要语法树中子树的哈希(Hash)值;步骤13,通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。通过本专利技术实施例提供的基于摘要语法树和语义匹配的软件同源性检测方法的实施,可以在语法层次上,结合语义进行准确而有效的软件同源性检测。为使本专利技术的目的、技术方案和优点更加清楚,下面结合附图对本专利技术实施例作进一步的详细描述。本专利技术实施例提供的在语法层次进行软件同源性检测方法,可以充分考虑软件源代码原有的语义,保证了同源性检测的正确性。而且,全新提出了一种利用软件源代码对应树形结构一摘要语法树的检测手段,将软件源代码对应摘要语法树中每一个节点的哈希值作为软件同源性检测的基准,并针对常见的源代码抄袭手段提出语义特征规则匹配检测方法,将检测方法提高到了语义层次,从而提高了同源性检测的准确性。同时,将相同节点数目的软件源代码摘要语法树件中的子树分组进行对比检测,避免了不必要的对比,大大提高了检测效率。本专利技术实施例提供的基于摘要语法树和语义匹配的软件同源性检测方法的一个实施例在具体实现过程中,具体可如附图2所示,本文档来自技高网...
基于摘要语法树和语义匹配的软件同源性检测方法及装置

【技术保护点】
一种基于摘要语法树和语义匹配的软件同源性检测方法,其特征在于,包括:生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算所述摘要语法树中子树的哈希值;通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。

【技术特征摘要】
1.一种基于摘要语法树和语义匹配的软件同源性检测方法,其特征在于,包括:生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的子树调整为统一结构;计算所述摘要语法树中子树的哈希值;通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测。2.根据权利要求1所述的方法,其特征在于,所述生成软件源代码对应的摘要语法树包括:将所述软件源代码中的文件包含指令、注释和多余的空白符删除;查找所述软件源代码中被宏定义指令所替换的字符串,并换回原来的字符串;判断所述软件源代码中的条件编译指令中的判断条件是否成立,然后选择删除或保留对应的软件源代码段。3.根据权利要求1所述的方法,其特征在于,所述语义特征规则至少为下列特征中的一种:条件表达式为比较表达式、变量标识、函数调用。4.根据权利要求1所述的方法,其特征在于,所述计算所述摘要语法树中子树的哈希值包括:根据所述摘要语法树的节点类型信息,计算得到所述节点的哈希值,并以线性链表格式保存所述节点包括哈希值在内的信息;将所述摘要语法树中子树所包括的节点的哈希值进行累加,得到所述子树的哈希值。5.根据权利要求4所述的方法,其特征在于,所述将所述摘要语法树中子树所包括的节点的哈希值进行累加,得到所述子树的哈希值包括:将除法、减法和取余运算操作前后参与运算的元素赋予不同的权值。6.根据权利要求4所述的方法,其特征在于,所述通过判断节点数目相同的子树的哈希值是否一致,进行软件同源性检测包括:根据所述摘要语法树中子树所包括的节点数目,将子树进行分组。7.一种基于摘要语法树和语义匹配的软件同源性检测装置,其特征在于,包括:生成模块,用于生成软件源代码对应的摘要语法树,并将所述摘要语法树中匹配相同语义特征规则且语义相同的...

【专利技术属性】
技术研发人员:崔宝江吴世忠郭涛
申请(专利权)人:北京华夏信安科技有限公司中国信息安全测评中心
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1