CN114968351B - 分级多特征的代码同源分析方法及系统 - Google Patents

分级多特征的代码同源分析方法及系统 Download PDF

Info

Publication number
CN114968351B
CN114968351B CN202210913259.XA CN202210913259A CN114968351B CN 114968351 B CN114968351 B CN 114968351B CN 202210913259 A CN202210913259 A CN 202210913259A CN 114968351 B CN114968351 B CN 114968351B
Authority
CN
China
Prior art keywords
level
code
file
feature
text
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210913259.XA
Other languages
English (en)
Other versions
CN114968351A (zh
Inventor
高庆
张世琨
李玫
孙基男
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN202210913259.XA priority Critical patent/CN114968351B/zh
Publication of CN114968351A publication Critical patent/CN114968351A/zh
Application granted granted Critical
Publication of CN114968351B publication Critical patent/CN114968351B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及软件代码分析领域,公开了一种分级多特征的代码同源分析方法及系统,使用值依赖分析技术,脱离了特征提取对于结构的依赖,更准确地发现代码中的不可达路径、并更精确地计算变量常量值和变量之间的依赖关系,从而更加全面、准确构建代码在控制流和数据流上的归一化模型,使用分级的方法,将项目按照粒度由大到小划分为项目、包、文件、类和函数五层,此外按照分析精度由低到高划分为文本、标识、语法、语义四层,通过流水线由项目向函数逐级分解、再从函数向项目逐级推导和综合结果,通过流水线的方式有机组合不同粒度和不同分析层次,利用不同分析方法的优点,加速代码匹配过程,提高匹配速度和匹配精度。

Description

分级多特征的代码同源分析方法及系统
技术领域
本发明涉及软件代码分析领域,尤其涉及一种分级多特征的代码同源分析方法及系统。
背景技术
现有的基于文本、标识、语法等分析技术构建的程序模型不够精确,对代码结构改变等问题并未很好地解决,由此造成了精度的缺失。此外,现有一般性的反混淆方法对代码的依赖关系构建不够准确,因而对数据流等混淆技术的针对能力不足。
目前已存在多种代码匹配的方法,但是分析粒度较为单一,不能有效平衡匹配效率与匹配精度,分析层次较低的方法效率较高、精度较低;分析层次较高的方法匹配效率较低、精度较高。
发明内容
本发明的目的在于针对软件代码的高维特性,从函数、类、文件、包、项目的级别上,归一化提取开源代码中间表示,构建软件代码复合特征、多级流水、混合粒度的提取方法和多层次特征索引生成及检索机制。
为实现上述目的,本发明提供一种分级多特征的代码同源分析方法,包括:
通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
根据本发明的一个方面,所述分别提取不同级的文本摘要并建立与之对应的特征值库的方法为:
将所述代码展开为所述项目级,提取所述项目级的文本摘要,建立项目级特征值库,将所述项目级展开为所述包级,提取所述包级的文本摘要,建立包级特征值库,将所述包级展开为所述文件级,提取所述文件级的文本摘要,建立文件级特征值库。
根据本发明的一个方面,所述函数级和所述文件级提取的文本摘要分别为所述函数级和所述文件级本身的MD5指纹值,所述类级、所述包级和所述项目级提取的文本摘分别是由所述类级、所述包级和所述项目级下层指纹构成的字符串生成的所述MD5指纹值。
根据本发明的一个方面,所述判断所述文件级的属性是否为代码文件的方法为:
判断所述文件级的属性是否为所述代码文件,若是,则提取所述代码文件的文本摘要并通过哈希计算建立代码文件级特征库,若不是,则通过哈希值计算,建立非代码文件哈希值库。
根据本发明的一个方面,所述建立函数级特征值库的方法为:
对所述函数级进行变换,得到中间表示,对所述代码通过词法层、语法层和语义层对所述代码进行分析并提取特征值,建立所述函数级特征值库。
根据本发明的一个方面,所述得到中间表示的方法为:
在所述词法层上,所述代码的中间表示为符号或序列或袋,在所述语法层上,所述代码的中间表示为抽象语法树,在所述语义层上,所述代码的中间表示为值依赖图。
根据本发明的一个方面,所述对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式的方法为:
对所述被测试代码使用反混淆技术进行处理,按照所述项目级、所述包级和所述文件级的格式进行划分。
根据本发明的一个方面,所述判断所述被测试代码的文本摘要是否与不同级的特征值库匹配的方法为:
计算所述项目级、所述包级和所述文件级的所述被测试代码的文本摘要,判断所述被测试代码的所述项目级的文本摘要与所述项目级特征值库是否匹配,若匹配,则结束,若不匹配,则判断所述被测试代码的所述包级的文本摘要与所述包级特征值库是否匹配,若匹配,则结束,若不匹配,则判断所述被测试代码的所述文件级的文本摘要与所述文件级特征值库是否匹配,若匹配,则结束。
根据本发明的一个方面,所述判断所述标识集合是否与不同级的特征值库匹配的方法为:
判断所述标识特征、所述语法特征和所述语义特征与所述类级特征值库是否匹配,若匹配,则根据所述标识集合建立类级多特征模型和文件级多特征模型,汇总得到包级多特征模型,根据所述包级多特征模型计算所述被测试代码与不同级特征值库的相似性,得到检测结果,若不匹配,则继续与下一级特征值库进行匹配,直到匹配成功。
根据本发明的一个方面,所述判断所述被测试代码的文本摘要是否与不同级特征值库的匹配的方法为精确匹配,所述判断所述标识集合是否与不同级特征值库的匹配的方法为相似匹配,所述精确匹配比较所述被测试代码的文本摘要和不同级特征值库是否一样,所述相似匹配比较所述被测试代码的所述特征值是否小于与所述函数级特征值库的预设阈值。
为实现上述目的,本发明提供一种分级多特征的代码同源分析系统,包括:
特征值库建立模块:通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
文件判断模块:判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
代码预处理模块:对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
第一次判断模块:计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
第二次判断模块:提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
为实现上述目的,本发明提供一种电子设备,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现上述针对一种分级多特征的代码同源分析方法。
为实现上述目的,本发明提供一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述针对一种分级多特征的代码同源分析方法。
基于此,本发明的有益效果在于:
(1)使用值依赖分析技术,脱离了特征提取对于结构的依赖,能够更准确地发现代码中的不可达路径、并更精确地计算变量常量值和变量之间的依赖关系;
(2)更加全面、准确构建代码在控制流和数据流上的归一化模型,提高了特征提取和反混淆的准确度;
(3)通过这种流水线的方式有机组合不同粒度和不同分析层次,充分利用不同分析方法的优点;
(4)加速代码匹配过程,提高匹配速度,能够高精度匹配经过修改的文件,提高匹配精度。
附图说明
图1示意性表示根据本发明的一种分级多特征的代码同源分析方法的流程图;
图2示意性表示根据本发明的软件代码多特征分级提取技术的流程图;
图3示意性表示根据本发明的软件代码实体识别匹配的流程图;
图4示意性表示根据本发明的一种分级多特征的代码同源分析系统的流程图。
具体实施方式
现在将参照示例性实施例来论述本发明的内容,应当理解,论述的实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”,术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。
图1示意性表示根据本发明的一种分级多特征的代码同源分析方法的流程图,如图1所示,根据本发明的一种分级多特征的代码同源分析方法,包括以下步骤:
通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
根据本发明的一个实施方式,分别提取不同级的文本摘要并建立与级对应的特征值库的方法为:
将代码展开为项目级,提取项目级的文本摘要,建立项目级特征值库,将项目级展开为包级,提取包级的文本摘要,建立包级特征值库,将包级展开为文件级,提取文件级的文本摘要,建立文件级特征值库。
根据本发明的一个实施方式,函数级和文件级提取的文本摘要分别为函数级和文件级本身的MD5指纹值,类级、包级和项目级提取的文本摘要分别由类级、包级和项目级下层指纹构成的字符串生成的MD5指纹值。
根据本发明的一个实施方式,判断文件级是否为代码文件的方法为:
判断文件级是否为代码文件,若是,则提取代码文件的文本摘要并通过哈希计算建立代码文件级特征库,若不是,则通过哈希值计算,建立非代码文件哈希值库。
根据本发明的一个实施方式,建立函数级特征值库的方法为:
对函数级进行变换,得到中间表示,对代码通过词法层、语法层和语义层对代码进行分析并提取特征值,建立函数级特征值库。
根据本发明的一个实施方式,得到中间表示的方法为:
在词法层上,代码的中间表示为符号或序列或袋,在语法层上,代码的中间表示为抽象语法树,在语义层上,代码的中间表示为值依赖图。
根据本发明的一个实施方式,对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式的方法为:
对被测试代码使用反混淆技术进行处理,其中反混淆技术为常用的处理手段,但是准确度不高,因此对其进行分级处理,按照项目级、包级和文件级的格式进行划分。
根据本发明的一个实施方式,判断被测试代码的文本摘要是否与不同级的特征值库匹配的方法为:
计算被测试代码的项目级、包级和文件级的文本摘要,判断被测试代码的项目级的文本摘要与项目级特征值库是否匹配,若匹配,则结束,若不匹配,则判断被测试代码的包级的文本摘要与包级特征值库是否匹配,若匹配,则结束,若不匹配,则判断被测试代码的文件级的文本摘要与文件级特征值库是否匹配,若匹配,则结束。
根据本发明的一个实施方式,判断标识集合是否与不同级的特征值库匹配的方法为:
判断标识特征、语法特征和语义特征与类级特征值库是否匹配,若匹配,则根据标识集合建立类级多特征模型和文件级多特征模型,汇总得到包级多特征模型,根据包级多特征模型计算被测试代码与不同级特征值库的相似性,得到检测结果,若不匹配,则继续与下一级特征值库进行匹配,直到匹配成功。
根据本发明的一个实施方式,判断被测试代码的文本摘要是否与不同级特征值库的匹配的方法为精确匹配,判断标识集合是否与不同级特征值库的匹配的方法为相似匹配,精确匹配比较被测试代码的文本摘要和不同级特征值库是否一样,相似匹配比较被测试代码的特征值是否小于与函数级特征值库的预设阈值。
根据本发明的一个实施例, 如图2所示,基于建立的分布式存储代码资源库,代码特征库生成技术从函数、类、文件、包、项目五个方面提取相应级别的特征,提取的特征具有很好的区分性,称为代码指纹。首先对待分析项目从下至上依次进行特征提取。设有待分析项目s,共包含两个包p1,p2,其中p1和p2分别包含两个文件f1,1,f1,2,f2,1,f2,2,每个文件包含一个类c1,1,c1,2,c2,1,c2,2,每个类包含两个函数m1,1,1,m1,1,2,… ,以此类推。
根据本发明的一个实施例, 对于函数集合F中的每一个函数m,首先获得其文本摘要,即当前函数的MD5值(MD5m)用于精确匹配,也是该函数的文本层次的特征。接着通过对当前函数词法、语法、语义分析获取当前函数的符号序列(Tokens m)、抽象语法树(AST m)和值依赖图(VDG m),作为该函数在不同分析力度上的不同特征。
根据本发明的一个实施例, 对于函数f在不同层次的特征构建方法如下:词法级别的函数特征构建。词法级别的函数特征是在整个代码库的基础上完成的,需要将源代码仓库中的代码片段解析为<符号,频数>的集合并存储。每个代码片段有全局唯一的ID,通过统计所有的符号,生成全局符号频数表,接着利用子块重叠过滤的思想,建立部分索引。
根据本发明的一个实施例, 设相似度为θ,为平衡精确度和召回率,θ可取70%;查询全局符号频数表,将代码片段中的符号按全局频数升序排列;设代码片段中总符号数为N,选取前N-θN+1个符号,建立符号-代码片段的反向索引,语法级别的函数特征构建。通过构建源代码函数级别的抽象语法树来构建语法级别的特征向量ASTF m,并将其存入数据库。抽象语法树上的特征分为树的节点个数、深度以及树的前向遍历顺序等类别,最后通过语义计算函数特征。首先对源代码进行值依赖分析,计算常量值并去除不可达路径,从而将代码进一步归一化,按照值依赖的依赖关系(即依赖图中的指向关系),构建各依赖子图上的特征向量VDGFm,存入数据库。
根据本发明的一个实施例, 类是一个汇总特征,对于类c,其文本摘要的构建由其中包含的函数来生成。如类c1,1包含两个函数f1,1,1,f1,1,2。则该类的MD5摘要(MD5c1,1)为其两个函数的MD5指纹值MD5f1,1,1和MD5f1,1,2拼接而成的字符串的指纹值。
根据本发明的一个实施例, 对于每一个文件f,如果其是非代码文件,直接生成其模糊哈希指纹值SHf(Simhashf),若其是代码文件,则分别生成其MD5指纹值(MD5f)和模糊哈希指纹值(Simhashf)。
根据本发明的一个实施例, 包是一个汇总特征,其文本摘要的构建由其中包含的文件的MD5指纹值来生成,生成方法类似于类级别的文本摘要的获取。
根据本发明的一个实施例, 项目也是一个汇总特征,其文本摘要的构建由其中包含的包的MD5指纹值来生成,生成方法类似于包级别的文本摘要的获取。
根据本发明的一个实施例, 如图3所示,已有构建好的特征库以及待测工程s,识别匹配的过程则是将工程s从上至下多层次的多种特征的与现有特征库进行比对,从而检测待测工程中不同层次上包含哪些与代码库中相似的组件。
根据本发明的一个实施例, 首先获取s1在文件、包、以及项目级别的文本摘要,即MD5指纹值。分别为MD5f, MD5p以及MD5s,从上至下依次与库中对应层次的文本摘要进行匹配,如果指纹完全一致则认为匹配成功。如果包级别摘要MD5p匹配成功,则该目录得到匹配,则直接加入包级别的检测结果序列中。不用再对下层的文件MD5f进行依次匹配。如果项目级别MD5s得到匹配,则项目找到对应的匹配,程序结束。如果需要进行模糊分析,则将对应文件的模糊哈希指纹值Simhashf与代码文件级特征库中的模糊哈希值进行比较,若两者的海明距离小于特定的阈值θ此阈值θ≤3,则视作匹配成功,加入文件级别的检测结果序列中。
根据本发明的一个实施例, 对于从项目、包和文件级别都没有匹配到对应指纹的文件,进行进一步的分析。首先对其进行类、函数的识别和提取,对所有类的MD5指纹值MD5c与类级特征值库进行比对,若相同,则加入类级别检测结果序列中。若没有匹配成功,则对所有函数的指纹值MD5 m进行匹配,若相同,则加入类级别检测结果序列中。
根据本发明的一个实施例, 若上述层次都没有匹配到对应的指纹结果,则对函数进行更加深入的特征匹配,依次进行词法、语法、语义级别的检测和检索,若任意一个步骤中的特征匹配成功,则认为当前函数匹配成功,将函数放入函数级检测结果序列中,不再进行后面的步骤。
根据本发明的一个实施例, 对于词法分析生成的标识袋特征,匹配算法可以利用其部分索引快速定位相似的函数,若匹配成功,将其放入函数级检测结果序列中,获取当前函数的AST以及其特征向量ASTFm,与库中的特征向量进行比较,当距离小于3时,认为匹配成功,将其放入函数级检测结果序列中,对于语义分析,获取当前函数的各个值依赖子图特征VDGFm,与库中的特征向量进行比较,当距离小于2时,认为该子图匹配成功。当匹配成功的子图数量大于函数包含的总子图数量时,将其放入函数级检测结果序列中。
根据本发明的一个实施例, 在从上至下的分析进行完成后,对结果进行从下至上的汇总和补充,类级检测结果通过当前函数级检测结果序列推导得出,计算匹配到的函数占类中所有函数的比例,推导出新增的相似类与之前已经匹配到的类一起构成最终的类级别同源检测结果,文件级别的检测结果同样通过类和函数级别的检测结果推导而出。计算匹配到的类和函数占文件中所有类与函数的比例,得到推导结果。推导出新增的相似文件与之前已经匹配到的文件一起构成最终的文件级别同源检测结果,包级别和项目级的汇总推导方法与类和文件级别类似,最终,可以得到待测工程s在函数级、类级、文件级、包级和项目级五个级别的同源检测结果。
不仅如此,为实现上述发明目的,本发明还提供一种分级多特征的代码同源分析系统,图4示意性表示根据本发明的一种分级多特征的代码同源分析系统的流程图,如图4所示,根据本发明的一种分级多特征的代码同源分析系统,包括:
特征值库建立模块:通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
文件判断模块:判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
代码预处理模块:对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
第一次判断模块:计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
第二次判断模块:提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
根据本发明的一个实施方式,分别提取不同级的文本摘要并建立与级对应的特征值库的方法为:
根据特征值库建立模块,将代码展开为项目级,提取项目级的文本摘要,建立项目级特征值库,将项目级展开为包级,提取包级的文本摘要,建立包级特征值库,将包级展开为文件级,提取文件级的文本摘要,建立文件级特征值库。
根据本发明的一个实施方式,函数级和文件级提取的文本摘要为函数级和文件级本身的MD5指纹值,类级、包级和项目级提取的文本摘要则是由类级、包级和项目级下层指纹构成的字符串生成的MD5指纹值。
根据本发明的一个实施方式,判断文件级是否为代码文件的方法为:
根据文件判断模块,判断文件级是否为代码文件,若是,则提取代码文件的文本摘要并通过哈希计算建立代码文件级特征库,若不是,则通过哈希值计算,建立非代码文件哈希值库。
根据本发明的一个实施方式,建立函数级特征值库的方法为:
对函数级进行变换,得到中间表示,对代码通过词法层、语法层和语义层对代码进行分析并提取特征值,建立函数级特征值库。
根据本发明的一个实施方式,得到中间表示的方法为:
在词法层上,代码的中间表示为符号或序列或袋,在语法层上,代码的中间表示为抽象语法树,在语义层上,代码的中间表示为值依赖图。
根据本发明的一个实施方式,对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式的方法为:
根据代码预处理模块,对被测试代码使用反混淆技术进行处理,按照项目级、包级和文件级的格式进行划分。
根据本发明的一个实施方式,判断被测试代码的文本摘要是否与不同级的特征值库匹配的方法为:
根据第一次判断模块,计算被测试代码的项目级、包级和文件级的文本摘要,判断被测试代码的项目级的文本摘要与项目级特征值库是否匹配,若匹配,则结束,若不匹配,则判断被测试代码的包级的文本摘要与包级特征值库是否匹配,若匹配,则结束,若不匹配,则判断被测试代码的文件级的文本摘要与文件级特征值库是否匹配,若匹配,则结束。
根据本发明的一个实施方式,判断标识集合是否与不同级的特征值库匹配的方法为:
根据第二次判断模块,判断标识特征、语法特征和语义特征与类级特征值库是否匹配,若匹配,则根据标识集合建立类级多特征模型和文件级多特征模型,汇总得到包级多特征模型,根据包级多特征模型计算被测试代码与不同级特征值库的相似性,得到检测结果,若不匹配,则继续与下一级特征值库进行匹配,直到匹配成功。
根据本发明的一个实施方式,判断被测试代码的文本摘要是否与不同级特征值库的匹配的方法为精确匹配,判断标识集合是否与不同级特征值库的匹配的方法为相似匹配,精确匹配比较被测试代码的文本摘要和不同级特征值库是否一样,相似匹配比较被测试代码的特征值是否小于与函数级特征值库的预设阈值。
根据本发明的一个实施例, 如图2所示,基于建立的分布式存储代码资源库,代码特征库生成技术从函数、类、文件、包、项目五个方面提取相应级别的特征,提取的特征具有很好的区分性,称为代码指纹。首先对待分析项目从下至上依次进行特征提取。设有待分析项目s,共包含两个包p1,p2,其中p1和p2分别包含两个文件f1,1,f1,2,f2,1,f2,2,每个文件包含一个类c1,1,c1,2,c2,1,c2,2,每个类包含两个函数m1,1,1,m1,1,2,… ,以此类推。
根据本发明的一个实施例, 对于函数集合F中的每一个函数m,首先获得其文本摘要,即当前函数的MD5值(MD5m)用于精确匹配,也是该函数的文本层次的特征。接着通过对当前函数词法、语法、语义分析获取当前函数的符号序列(Tokens m)、抽象语法树(AST m)和值依赖图(VDG m),作为该函数在不同分析力度上的不同特征。
根据本发明的一个实施例, 对于函数f在不同层次的特征构建方法如下:词法级别的函数特征构建。词法级别的函数特征是在整个代码库的基础上完成的,需要将源代码仓库中的代码片段解析为<符号,频数>的集合并存储。每个代码片段有全局唯一的ID,通过统计所有的符号,生成全局符号频数表,接着利用子块重叠过滤的思想,建立部分索引。
根据本发明的一个实施例, 设相似度为θ,为平衡精确度和召回率,θ可取70%;查询全局符号频数表,将代码片段中的符号按全局频数升序排列;设代码片段中总符号数为N,选取前N-θN+1个符号,建立符号-代码片段的反向索引,语法级别的函数特征构建。通过构建源代码函数级别的抽象语法树来构建语法级别的特征向量ASTF m,并将其存入数据库。抽象语法树上的特征分为树的节点个数、深度以及树的前向遍历顺序等类别,最后通过语义计算函数特征。首先对源代码进行值依赖分析,计算常量值并去除不可达路径,从而将代码进一步归一化,按照值依赖的依赖关系(即依赖图中的指向关系),构建各依赖子图上的特征向量VDGFm,存入数据库。
根据本发明的一个实施例, 类是一个汇总特征,对于类c,其文本摘要的构建由其中包含的函数来生成。如类c1,1包含两个函数f1,1,1,f1,1,2。则该类的MD5摘要(MD5c1,1)为其两个函数的MD5指纹值MD5f1,1,1和MD5f1,1,2拼接而成的字符串的指纹值。
根据本发明的一个实施例, 对于每一个文件f,如果其是非代码文件,直接生成其模糊哈希指纹值SHf(Simhashf),若其是代码文件,则分别生成其MD5指纹值(MD5f)和模糊哈希指纹值(Simhashf)。
根据本发明的一个实施例, 包是一个汇总特征,其文本摘要的构建由其中包含的文件的MD5指纹值来生成,生成方法类似于类级别的文本摘要的获取。
根据本发明的一个实施例, 项目也是一个汇总特征,其文本摘要的构建由其中包含的包的MD5指纹值来生成,生成方法类似于包级别的文本摘要的获取。
根据本发明的一个实施例, 如图3所示,已有构建好的特征库以及待测工程s,识别匹配的过程则是将工程s从上至下多层次的多种特征的与现有特征库进行比对,从而检测待测工程中不同层次上包含哪些与代码库中相似的组件。
根据本发明的一个实施例, 首先获取s1在文件、包、以及项目级别的文本摘要,即MD5指纹值。分别为MD5f, MD5p以及MD5s,从上至下依次与库中对应层次的文本摘要进行匹配,如果指纹完全一致则认为匹配成功。如果包级别摘要MD5p匹配成功,则该目录得到匹配,则直接加入包级别的检测结果序列中。不用再对下层的文件MD5f进行依次匹配。如果项目级别MD5s得到匹配,则项目找到对应的匹配,程序结束。如果需要进行模糊分析,则将对应文件的模糊哈希指纹值Simhashf与代码文件级特征库中的模糊哈希值进行比较,若两者的海明距离小于特定的阈值θ此阈值θ≤3,则视作匹配成功,加入文件级别的检测结果序列中。
根据本发明的一个实施例, 对于从项目、包和文件级别都没有匹配到对应指纹的文件,进行进一步的分析。首先对其进行类、函数的识别和提取,对所有类的MD5指纹值MD5c与类级特征值库进行比对,若相同,则加入类级别检测结果序列中。若没有匹配成功,则对所有函数的指纹值MD5 m进行匹配,若相同,则加入类级别检测结果序列中。
根据本发明的一个实施例, 若上述层次都没有匹配到对应的指纹结果,则对函数进行更加深入的特征匹配,依次进行词法、语法、语义级别的检测和检索,若任意一个步骤中的特征匹配成功,则认为当前函数匹配成功,将函数放入函数级检测结果序列中,不再进行后面的步骤。
根据本发明的一个实施例, 对于词法分析生成的标识袋特征,匹配算法可以利用其部分索引快速定位相似的函数,若匹配成功,将其放入函数级检测结果序列中,获取当前函数的AST以及其特征向量ASTFm,与库中的特征向量进行比较,当距离小于3时,认为匹配成功,将其放入函数级检测结果序列中,对于语义分析,获取当前函数的各个值依赖子图特征VDGFm,与库中的特征向量进行比较,当距离小于2时,认为该子图匹配成功。当匹配成功的子图数量大于函数包含的总子图数量时,将其放入函数级检测结果序列中。
根据本发明的一个实施例, 在从上至下的分析进行完成后,对结果进行从下至上的汇总和补充,类级检测结果通过当前函数级检测结果序列推导得出,计算匹配到的函数占类中所有函数的比例,推导出新增的相似类与之前已经匹配到的类一起构成最终的类级别同源检测结果,文件级别的检测结果同样通过类和函数级别的检测结果推导而出。计算匹配到的类和函数占文件中所有类与函数的比例,得到推导结果。推导出新增的相似文件与之前已经匹配到的文件一起构成最终的文件级别同源检测结果,包级别和项目级的汇总推导方法与类和文件级别类似,最终,可以得到待测工程s在函数级、类级、文件级、包级和项目级五个级别的同源检测结果。
为实现上述发明目的,本发明还提供一种电子设备,该电子设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,计算机程序被处理器执行时实现上述一种分级多特征的代码同源分析方法。
为实现上述发明目的,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述一种分级多特征的代码同源分析方法。
由此可知,本发明所提供的一种分级多特征的代码同源分析方法,使用值依赖分析技术,脱离了特征提取对于结构的依赖,能够更准确地发现代码中的不可达路径、并更精确地计算变量常量值和变量之间的依赖关系;更加全面、准确构建代码在控制流和数据流上的归一化模型,提高了特征提取和反混淆的准确度;通过这种流水线的方式有机组合不同粒度和不同分析层次,充分利用不同分析方法的优点;加速代码匹配过程,提高匹配速度,能够高精度匹配经过修改的文件,提高匹配精度。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。
另外,在本发明实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例节能信号发送/接收的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
应理解,本发明的发明内容及实施例中各步骤的序号的大小并不绝对意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

Claims (13)

1.分级多特征的代码同源分析方法,其特征在于,包括:
通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
2.根据权利要求1所述的分级多特征的代码同源分析方法,其特征在于,所述分别提取不同级的文本摘要并建立与之对应的特征值库的方法为:
将所述代码展开为所述项目级,提取所述项目级的文本摘要,建立项目级特征值库,将所述项目级展开为所述包级,提取所述包级的文本摘要,建立包级特征值库,将所述包级展开为所述文件级,提取所述文件级的文本摘要,建立文件级特征值库。
3.根据权利要求2所述的分级多特征的代码同源分析方法,其特征在于,所述函数级和所述文件级提取的文本摘要分别为所述函数级和所述文件级本身的MD5指纹值,所述类级、所述包级和所述项目级提取的文本摘要分别由所述类级、所述包级和所述项目级下层指纹构成的字符串生成的所述MD5指纹值。
4.根据权利要求3所述的分级多特征的代码同源分析方法,其特征在于,所述判断所述文件级的属性是否为代码文件的方法为:
判断所述文件级的属性是否为所述代码文件,若是,则提取所述代码文件的文本摘要并通过哈希计算建立代码文件级特征库,若不是,则通过哈希值计算,建立非代码文件哈希值库。
5.根据权利要求4所述的分级多特征的代码同源分析方法,其特征在于,所述建立函数级特征值库的方法为:
对所述函数级进行变换,得到中间表示,对所述代码通过词法层、语法层和语义层对所述代码进行分析并提取特征值,建立所述函数级特征值库。
6.根据权利要求5所述的分级多特征的代码同源分析方法,其特征在于,所述得到中间表示的方法为:
在所述词法层上,所述代码的中间表示为符号或序列或袋,在所述语法层上,所述代码的中间表示为抽象语法树,在所述语义层上,所述代码的中间表示为值依赖图。
7.根据权利要求6所述的分级多特征的代码同源分析方法,其特征在于,所述对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式的方法为:
对所述被测试代码使用反混淆技术进行处理,按照所述项目级、所述包级和所述文件级的格式进行划分。
8.根据权利要求7所述的分级多特征的代码同源分析方法,其特征在于,所述判断所述被测试代码的文本摘要是否与不同级的特征值库匹配的方法为:
计算所述项目级、所述包级和所述文件级的所述被测试代码的文本摘要,判断所述被测试代码的所述项目级的文本摘要与所述项目级特征值库是否匹配,若匹配,则结束,若不匹配,则判断所述被测试代码的所述包级的文本摘要与所述包级特征值库是否匹配,若匹配,则结束,若不匹配,则判断所述被测试代码的所述文件级的文本摘要与所述文件级特征值库是否匹配,若匹配,则结束。
9.根据权利要求8所述的分级多特征的代码同源分析方法,其特征在于,所述判断所述标识集合是否与不同级的特征值库匹配的方法为:
判断所述标识特征、所述语法特征和所述语义特征与所述类级特征值库是否匹配,若匹配,则根据所述标识集合建立类级多特征模型和文件级多特征模型,汇总得到包级多特征模型,根据所述包级多特征模型计算所述被测试代码与不同级特征值库的相似性,得到检测结果,若不匹配,则继续与下一级特征值库进行匹配,直到匹配成功。
10.根据权利要求9所述的分级多特征的代码同源分析方法,其特征在于,所述判断所述被测试代码的文本摘要是否与不同级特征值库的匹配的方法为精确匹配,所述判断所述标识集合是否与不同级特征值库的匹配的方法为相似匹配,所述精确匹配比较所述被测试代码的文本摘要和不同级特征值库是否一样,所述相似匹配比较所述被测试代码的所述特征值是否小于与所述函数级特征值库的预设阈值。
11.分级多特征的代码同源分析系统,其特征在于,包括:
特征值库建立模块:通过代码库提取代码,将所述代码展开为项目级、包级和文件级,分别提取不同级的文本摘要并建立与之对应的特征值库;
文件判断模块:判断所述文件级的属性是否为代码文件,若是,则判断所述代码文件是否为面向对象语言,若是,则将所述文件级展开为类级并提取所述类级的文本摘要,建立类级特征值库,若不是,则将所述文件级展开为函数级并提取所述函数级的文本摘要,建立函数级特征值库;
代码预处理模块:对被测试代码进行预处理并将所述被测试代码划分为所述项目级、所述包级和所述文件级的格式;
第一次判断模块:计算所述被测试代码的文本摘要,判断所述被测试代码的文本摘要是否与不同级的特征值库匹配,若不匹配,则汇总并分析不匹配内容,得到所述函数级的标识集合;
第二次判断模块:提取所述标识集合的标识特征、语法特征和语义特征,判断所述标识集合是否与不同级的特征值库匹配,若匹配,则建立多特征模型,得到检测结果。
12.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至10中任一项所述的分级多特征的代码同源分析方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至10中任一项所述的分级多特征的代码同源分析方法。
CN202210913259.XA 2022-08-01 2022-08-01 分级多特征的代码同源分析方法及系统 Active CN114968351B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210913259.XA CN114968351B (zh) 2022-08-01 2022-08-01 分级多特征的代码同源分析方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210913259.XA CN114968351B (zh) 2022-08-01 2022-08-01 分级多特征的代码同源分析方法及系统

Publications (2)

Publication Number Publication Date
CN114968351A CN114968351A (zh) 2022-08-30
CN114968351B true CN114968351B (zh) 2022-10-21

Family

ID=82968805

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210913259.XA Active CN114968351B (zh) 2022-08-01 2022-08-01 分级多特征的代码同源分析方法及系统

Country Status (1)

Country Link
CN (1) CN114968351B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016135729A1 (en) * 2015-02-26 2016-09-01 Israel Zimmerman A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
CN106250769A (zh) * 2016-07-30 2016-12-21 北京明朝万达科技股份有限公司 一种多级过滤的源代码数据检测方法及装置
CN109344230A (zh) * 2018-10-31 2019-02-15 任志颖 代码库文件生成、代码搜索、联结、优化以及移植方法
CN111045670A (zh) * 2019-12-13 2020-04-21 中国科学院信息工程研究所 一种二进制代码与源代码间复用关系的识别方法与装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016135729A1 (en) * 2015-02-26 2016-09-01 Israel Zimmerman A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
CN106250769A (zh) * 2016-07-30 2016-12-21 北京明朝万达科技股份有限公司 一种多级过滤的源代码数据检测方法及装置
CN109344230A (zh) * 2018-10-31 2019-02-15 任志颖 代码库文件生成、代码搜索、联结、优化以及移植方法
CN111045670A (zh) * 2019-12-13 2020-04-21 中国科学院信息工程研究所 一种二进制代码与源代码间复用关系的识别方法与装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
静态代码属性与软件模块缺陷数的偏相关分析;林开标等;《厦门理工学院学报》;20141030;第22卷(第05期);第62-66页 *

Also Published As

Publication number Publication date
CN114968351A (zh) 2022-08-30

Similar Documents

Publication Publication Date Title
CN110245496B (zh) 一种源代码漏洞检测方法及检测器和其训练方法及系统
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN108268777A (zh) 一种利用补丁信息进行未知漏洞发现的相似性检测方法
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
CN106202206B (zh) 一种基于软件聚类的源码功能搜索方法
CN110222008A (zh) 一种数据格式的转换方法、系统、介质及电子设备
US20220279045A1 (en) Global iterative clustering algorithm to model entities&#39; behaviors and detect anomalies
CN113297580B (zh) 基于代码语义分析的电力信息系统安全防护方法及装置
CN112733156A (zh) 基于代码属性图的软件脆弱性智能检测方法、系统及介质
CN116340185B (zh) 一种软件开源代码成分分析方法、装置及设备
CN114491529A (zh) 基于多模态神经网络的安卓恶意应用程序识别方法
CN115658080A (zh) 一种软件开源代码成分的识别方法及系统
CN113032584A (zh) 一种实体关联方法、装置、电子设备及存储介质
CN113868650B (zh) 基于代码异质中间图表示的漏洞检测方法与装置
CN105468972B (zh) 一种移动终端文件检测方法
JP5780036B2 (ja) 抽出プログラム、抽出方法及び抽出装置
Zhang et al. Beqain: An effective and efficient identifier normalization approach with bert and the question answering system
CN114968351B (zh) 分级多特征的代码同源分析方法及系统
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
CN115373982A (zh) 基于人工智能的测试报告分析方法、装置、设备及介质
CN113111645A (zh) 一种媒体文本相似性检测方法
CN118051442B (zh) 一种基于谱聚类的测试用例复用方法及系统
KR102286451B1 (ko) 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치
Multi-Identity et al. Check for Link Prediction-Based Multi-Identity Recognition of Darknet Vendors Futai Zou (), Yuelin Hu, Wenliang Xu, and Yue Wu School of Electronic Information and Electrical Engineering
Cheong et al. GNN-based Ethereum Smart Contract Multi-Label Vulnerability Detection

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
OL01 Intention to license declared
OL01 Intention to license declared