基于代码指纹的代码同源性检测方法及其装置制造方法及图纸

技术编号:16216822 阅读:53 留言:0更新日期:2017-09-15 23:03
本发明专利技术涉及一种基于代码指纹的代码同源性检测方法及其装置,该方法包含:对输入代码进行依赖关系分析,获取原始程序依赖图PDG;对原始程序依赖图PDG进行结构简化、嵌套移除和着色处理,获取简化程序依赖图sPDG;基于抽象语法树解析代码关键语法信息;抽取代码执行路径的系统调用序列,获取目标代码的全路径参数向量集合,构建代码指纹;计算代码指纹部件间的同源性系数;根据同源性系数计算两份代码S和T的同源性指数,通过该同源性指数判定代码双方存在的同源关系。本发明专利技术能够在相似性的基础上兼顾代码语义与行为,利用轻量级的特征与简化机制提高检测效率,多角度衡量代码间存在的同源关系,能够在保证准确性的同时,提高检测效率。

Method and device for detecting code homology based on code fingerprint

The invention relates to a method and apparatus for homology detection code based on fingerprint code, the method includes: the input code analysis dependencies, obtaining the original program dependence graph of PDG; the original program dependence graph PDG nested structure simplification, removal and coloring, obtain the simplified program dependence graph sPDG; abstract syntax tree parsing code key grammar based on information extraction; code execution path system call sequence, full path parameter vector acquisition target code set, construct code fingerprint; homology coefficient calculation between the components of the fingerprint code; according to the homology index two homology coefficient calculation code S and T, the homology index of both homology code there. The invention can take into account the code and behavior in semantic similarity based on, and a simplified mechanism to improve the efficiency of detection using lightweight characteristics, multi angle measure homologous relationship exists between the code, can guarantee the accuracy at the same time, improve the detection efficiency.

【技术实现步骤摘要】
基于代码指纹的代码同源性检测方法及其装置
本专利技术属于计算机软件应用
,特别涉及一种基于代码指纹的代码同源性检测方法及其装置。
技术介绍
随着各类互联网应用需求的增长与代码迭代速度的增加,对程序员的开发效率与速度提出了更高的需求。在软件开发流水线上,基于模板的二次开发与现有组件的重用是常见现象;同时为了解决新的需求,开发人员通常会借鉴互联网中开源代码仓库中的代码。这就造成了具有同源性的代码通过不同渠道不断增长,代码中隐藏的缺陷与错误也广泛传播。同时随着计算机安全技术的不断发展与病毒检测技术的不断提高,互联网上现有的宏病毒、恶意VBS脚本、恶意JavaScript脚本等恶意代码被检测到的可能性越来越高,攻击者需要在原有代码的基础上通过修改代码内容、变换代码形式等手段绕过检测,提高恶意代码的生存能力。同种恶意代码的各个版本之间有着内生的同源性,是对其进行检测的重要依据。作为计算机程序研究的一个重要方面,现阶段针对软件源代码的同源性检测技术主要分为以下几种类型:基于文本的软件同源性检测、基于结构分析的软件同源性检测与基于语义的软件同源性检测。一)基于文本的软件同源性检测技术,检测的本文档来自技高网...
基于代码指纹的代码同源性检测方法及其装置

【技术保护点】
一种基于代码指纹的代码同源性检测方法,其特征在于,包含如下步骤:步骤1、对两份输入代码S和T进行依赖关系分析,获取原始程序依赖图PDG;并对原始程序依赖图PDG进行结构简化、嵌套移除和着色处理,获取简化程序依赖图sPDG;步骤2、基于抽象语法树解析代码关键语法信息;步骤3、抽取代码执行路径的系统调用序列,获取目标代码的全路径参数向量集合,构建代码指纹;步骤4、计算代码指纹部件间的同源性系数,该同源性系数包含简化程序依赖图sPDG同构系数PS,T、语法信息重合系数CS,T以及系统调用序列相似系数AS,T;步骤5、根据同源性系数计算两份代码S和T的同源性指数,通过该同源性指数判定代码双方存在的同源...

【技术特征摘要】
1.一种基于代码指纹的代码同源性检测方法,其特征在于,包含如下步骤:步骤1、对两份输入代码S和T进行依赖关系分析,获取原始程序依赖图PDG;并对原始程序依赖图PDG进行结构简化、嵌套移除和着色处理,获取简化程序依赖图sPDG;步骤2、基于抽象语法树解析代码关键语法信息;步骤3、抽取代码执行路径的系统调用序列,获取目标代码的全路径参数向量集合,构建代码指纹;步骤4、计算代码指纹部件间的同源性系数,该同源性系数包含简化程序依赖图sPDG同构系数PS,T、语法信息重合系数CS,T以及系统调用序列相似系数AS,T;步骤5、根据同源性系数计算两份代码S和T的同源性指数,通过该同源性指数判定代码双方存在的同源关系。2.根据权利要求1所述的基于代码指纹的代码同源性检测方法,其特征在于,步骤1中的对原始程序依赖图PDG进行结构简化、嵌套移除和着色处理,获取简化程序依赖图sPDG,包含如下内容:步骤11、依据简化原则对原始程序依赖图PDG进行结构简化;步骤12、对于包含嵌套关系的节点,移除其内部所嵌套的输入节点与输出节点,并将其对应依赖关系的边移除到外层函数调用节点上;步骤13、按照语句类型对节点进行分类并着色,获取简化程序依赖图sPDG。3.根据权利要求2所述的基于代码指纹的代码同源性检测方法,其特征在于,步骤11中的简化原则,包含:去除只有一个传出边而没有任何传入边的顶点,去除只有一个传入边而没有任何外向边的顶点;去除只有一个输入和一个输出边的顶点,并引入从其输入顶点指向输出顶点;去除没有任何传入或传出边缘顶点。4.根据权利要求1所述的基于代码指纹的代码同源性检测方法,其特征在于,步骤2中基于抽象语法树解析代码关键语法信息,包含如下内容:步骤21、记录指定代码域中的全局变量、局部变量及其属性,组成四元组,该四元组包含变量的作用域、链接属性、存储类型及名称;步骤22、解析并记录宏定义及其对应内容,组成三元组,该三元组包含宏定义标识、内容类型及名称;步骤23、基于抽象语法树AST解析代码中的关键数据结构,以序列形式记录代码中自定义结构体。5.根据权利要求1所述的基于代码指纹的代码同源性检测方法,其特征在于,步骤3包含如下内容:步骤31、从入口函数开始,生成函数f的调用图和后序支配树,提取出单条执行路径中的系统调用序列k,记录所有可能的执行路径中系统调用序列集合K;步骤32、对于每条系统调用序列k中的函数f,定位其所在函数域d,解析抽象语法树中函数f的所有参数,通过静态污点分析确定f中各个参数的数据来源s,判定参数值的来源,并结合参数的数据类型t构成函数f的参数向量ef=(d,f,t,s);得到系统调用序列k的参数向量集Ek;步骤33、对系统调用序列集合K中每条序列k执行步骤32,获取目标代码的全路径参数向量集合EK;步骤34、根据目标代码的全路径参数向量集合EK,构建代码指纹。6.根据权利要求1所述的基于代码指纹的代码同源性检测方法,其特征在于,步骤4包含如下...

【专利技术属性】
技术研发人员:魏强刘臻曹琰尹中旭彭建山
申请(专利权)人:中国人民解放军信息工程大学上海红神信息技术有限公司
类型:发明
国别省市:河南,41

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

1