CN102298681B - 一种基于数据流切片的软件识别方法 - Google Patents

一种基于数据流切片的软件识别方法 Download PDF

Info

Publication number
CN102298681B
CN102298681B CN2011101699062A CN201110169906A CN102298681B CN 102298681 B CN102298681 B CN 102298681B CN 2011101699062 A CN2011101699062 A CN 2011101699062A CN 201110169906 A CN201110169906 A CN 201110169906A CN 102298681 B CN102298681 B CN 102298681B
Authority
CN
China
Prior art keywords
data
module
software
similarity
algorithm
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.)
Expired - Fee Related
Application number
CN2011101699062A
Other languages
English (en)
Other versions
CN102298681A (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.)
Northwest University
Original Assignee
Northwest 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 Northwest University filed Critical Northwest University
Priority to CN2011101699062A priority Critical patent/CN102298681B/zh
Publication of CN102298681A publication Critical patent/CN102298681A/zh
Application granted granted Critical
Publication of CN102298681B publication Critical patent/CN102298681B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于数据流切片的软件识别方法,该方法采用计算机系统进行软件的识别和病毒检测,该计算机系统至少包括一个特征提取模块,该特征提取模块内有数据依赖提取模块、数据依赖图切片模块、拓扑排序模块和切片规则模块;其中的数据依赖提取模块和一个数据收集模块连接,所述的数据依赖提取模块和数据收集模块有共同的输入(I),特征提取模块和数据收集模块的输出均与相似度比较模块相连;并给出了基于数据流切片的软件特征提取算法SFDS;实现了针对数据流切片的软件特征评判系统;在评判系统上,对提出的算法进行了鲁棒性和置信度实验和分析。

Description

一种基于数据流切片的软件识别方法
技术领域
本发明属于计算机技术领域,涉及一种软件识别方法,特别是应用于软件安全研究的软件版权保护和病毒特征检测。更确切的说是一种基于数据流切片的软件识别方法。 
背景技术
随着软件应用的普及和计算机技术的飞速发展,在软件的使用带来巨大效益的同时,由于软件自身特征:无形性、抽象性、系统性、范域性、依附性、非损性、复制性和演化性等,也带来了巨大的安全威胁。软件安全威胁主要分成两大类:一类是由软件盗版带来的巨大损失,另一类是由恶意代码造成的巨大损失。 
软件盗版技术和恶意代码攻击技术不断智能化和多样化,软件保护技术也不断专业化和多样化。随着软件技术的发展,怎样准确的识别一个软件成为软件版权保护和恶意代码检测研究所面临的一个普遍问题。 
目前,在软件版权保护和恶意代码检测研究中,针对软件特征所采用的方法主要有:TaNaMM胎记,WPP胎记,动态N-gram软件特征等。其中,TaNaMM胎记提出的是基于静态代码的软件胎记。在软件版权证明中引入了软件静态特征的思想,隐蔽性强、效率高,也通过相似度算法对保持语义的变形攻击表现出一定的抵御能力,但是依然无法从根本上解决针对TaNaMM的指令变换,花指令和指令乱序攻击,因而TaNaMM的鲁棒性依然很差。WPP相似度算法鲁棒性高,有一定的置信度,但对于大型程序零水印算法需要计算整个程序的路径,其性能和效率低。动态n-gram胎记通过输入对程序执行指令进行动态选择,极大提高了攻击者的定位难度。但是对于软件指令不管是汇编指令还是高级语言都可以用相同功能的指令去替换,例如 call指令相当于push和jump。如果攻击者对于程序的所有指令进行等价替换,则动态K-gram的鲁棒性降低。 
发明内容
针对上述现有技术存在的缺陷或不足,本发明的目的在于,提出一种基于数据流切片的软件识别方法,来支持软件版权保护和病毒的检测。 
为了实现上述任务,本发明采取如下的技术解决方案: 
一种基于数据流切片的软件识别方法,其特征在于,该方法使用计算机系统对进行软件识别和病毒特征检测,所述的计算机系统至少包括一个特征提取模块,该特征提取模块内有数据依赖提取模块、数据依赖图切片模块、拓扑排序模块和切片规则模块;其中的数据依赖提取模块和一个数据收集模块连接,所述的数据依赖提取模块和数据收集模块有共同的输入,特征提取模块和数据收集模块的输出均与相似度比较模块相连;其中:
数据依赖提取模块,用以提取原始软件本身的数据流及其依赖关系,并将提取出来的数据流用数据依赖图表示;
数据依赖图切片模块,用以对提取出来的原始软件依赖图由切片规则模块中自定义的规则进行化简;
拓扑排序模块,用以对数据依赖图切片模块化简的数据依赖图进行拓扑排序,最终形成软件特征文档;
切片规则模块,根据数据依赖图产生数据流切片的规则;
数据依赖图切片模块,通过使用切片规则模块中的数据流切片规则对数据依赖图进行化简。
数据收集模块,用拓扑排序算法在被检测软件运行过程中,收集程序中每条指令执行后寄存器和对应的内存中的数据,形成一个数据文档; 
相似度比较模块,把拓扑排序模块与数据收集模块分别得到的软件特征文档和数据文档进行相似度比较,然后进行判别;
步骤一,根据原始软件,数据依赖提取模块根据运算符提取数据流,根据表达式提取数据间的依赖关系;并将提取出来的数据流用数据依赖图表示;
步骤二,数据依赖图切片模块对提取出来的数据流图根据切片规则模块产生的数据流切片规则进行化简;所述数据流切片规则具体如下:
(1)由于算法的输出性质,导致软件至少有一个输出,软件所有的指令对数据的操作都围绕着输出数据的返回值或传出值展开,并将与输出数据无依赖关系的数据去除;
(2)由于算法有可能需要随机数据参与输出数据的运算,随机数据因为数据不确定,及对它有依赖关系的数据也不确定,不能用来表示软件特征,因此将随机数据节点删除,并对随机数可达节点都删除;
(3)由于软件的静态数据的确定性,不随输入数据而变换,而软件攻击的方法可以将静态数据和指令结合,进行相应整体调整,造成获得的数据流之间的差异,所以要去除数据依赖图中的静态数据节点;
步骤三,拓扑排序模块将没有直接或间接数据依赖关系的节点使用集合表示,将有直接或间接数据依赖关系的节点利用向量表示,向量顺序表示节点的先后顺序,形成软件特征,该软件特征以字符串的形式表示;
所述的拓扑排序算法具体描述如下:
1)若拓扑图栈非空且入度为0的节点个数为1,则跳到3);若拓扑图栈非空且入度为0的节点个数大于1,将节点构成集合,跳到2);若拓扑图栈为空,退出算法。
2)输出“{”(集合开始符号),对集合中每个节点分别执行3),最后输出“}”(集合结束符号)。 
3)输出“(”(开始符号)和此节点;若节点有前继节点,将其所有前继节点构成集合,执行2);输出“)”(向量结束符号)。 
步骤四,数据收集模块使用一些通用的工具,加载软件,在被检测软件运行的过程中收集程序中每条指令执行后寄存器以及对应的内存中的数值,形成一个数据文档,以便在相似度比较模块进行字符串相似度匹配时使用; 
步骤五,相似度比较模块把拓扑排序模块与数据收集模块中得到的软件特征文档和数据文档进行相似度比较,并用递归算法计算出软件相似度,然后给出相似度判定标准。
所述的相似度比较是将字符中的有序关系严格按照字符的出现序列进行比较,对于无序的字符只进行字符比较不进行顺序比较,直到字符匹配完成。 
所述的递归算法如下: 
设软件P的数据流软件特征为PSFDS,软件Q运行时收集到的数据字符串为QDS,i为PSFDS的当前元素下标,j为QDS的当前元素下标,Tempj为保存j的临时变量,Success为成功的字符个数,Unsuccess为没找到的字符个数;
1)若i位置字符在PSFDS中处于向量中,则执行2);若i位置字符在PSFDS中处于集合中则,先使用Tempj=j将j的数据保存,然后执行2),调用结束后使用j=Tempj将j的数据复原,继续递归执行1);
2)若j大于Length(QDS),则退出第2)步返回;否则在QDS中j++位,开始查找此元素,若找到则Success++;否则Unsuccess++;最后i++; 
P和Q相似度计算公式为:
Figure 952725DEST_PATH_IMAGE001
相似度表示了软件特征字符串的字符和字符序列的子集,在另一个字符串中出现的比率。
所述的相似度的判别标准是: 
设μ和ξ分别为相似度的最小值和最大值,且0≤μ≤ξ≤1,意义如下:
当Similarity(P,Q)=1时,表示Q完全包含了P;
当Similarity(P,Q)≥ξ时,表示Q包含P的部分算法;
当μ≤Similarity(P,Q)<ξ时,表示不能确定Q是否包含了P的部分算法;
当Similarity(P,Q)≤μ时,表示Q不包含P的部分算法;
对于μ和ξ设定,如果ξ较小时,特征算法判别软件鲁棒性增强,但是置信度降低;如果μ较大时,特征算法鲁棒性减低,但是置信度提高;
根据数据流切片的软件特征算法原理,判断算法是否相同则需要较大ξ,判断软件算法是否包含需要根据具体应用调整μ和ξ;
当程序P的PSFDS较少,而从程序Q运行时收集的数据量QDS大时,给出相似度比较策略:先通过PSFDS和QDS进行相似度比较,若相似度处于μ和ξ之间,则降低P的PSFDS的粒度,只对P的部分算法提取数据流特征P1SFDS,由P1SFDS再次与QDS进行相似度计算,直到Similarity(P,Q)≤μ或Similarity(P,Q)≥ξ为止。
本发明的基于数据流切片的软件识别方法,为解决软件版权保护和病毒检测提供了新方法。主要贡献包括以下几个方面:1、对软件特征理论进行了系统的研究;2、提出了基于数据流切片的软件特征提取算法SFDS;3、实现了针对数据流切片的软件特征评判系统;4、在评判系统上,对提出的算法进行了鲁棒性和置信度实验和分析。 
附图说明
图1是数据流切片的软件特征系统模型; 
图2是数据依赖图;
图3是切片规则举例;
图4是关系拓扑排序举例;
图5是数据收集D模块流程;
图6是相似度比较模块Similarity工作流程;
图7是使用C++语言的实现的QS与BS的核心源码,其中QS使用经典的递归算法实现,BS使用双重循环实现;
图8是将数据按照快速排序交换次数最多的情况来安排输入数据I的具体实例;
以下结合附图对本发明的具体内容作进一步详细说明。
具体实施方式
本发明是一种基于数据流切片的软件识别方法,主要是采用计算机系统对软件识别和病毒检测提供支持。计算机系统模型如图1所示,具体包括以下的模块: 
数据依赖提取模块,用以提取原始软件本身的数据流及其依赖关系,并将提取出来的数据流用数据依赖图表示;
本申请所描述的数据流为软件运行过程中产生的新数据所形成的数据序列,和软件工程中的数据流概念不同,具体定义如下:
数据流(Data Stream简称DS):软件P在输入I的情况下,di为软件表达式计算所产生的新数据,i表示时间的先后顺序,依次将形成一个数据串d1,d2…dn即为数据流,记为DS。
对于提取出来的数据流,首先给出一些相关的定义,把它用数据依赖图表示,这些定义包括数据被引用、数据依赖以及数据依赖图。 
数据被引用(Data Use):如果表达式EXP在计算中使用了已有的d,称数据d在EXP被引用,表示为d=Use(EXP)。数据引用反映了数据与表达式之间的关系。 
数据依赖 (Data Dependency):如果表达式EXP在计算中,有d1=Def(EXP)和d2=Use(EXP),称在EXP处数值d1依赖d2,表示为d1=Dep(Exp,d2)。数据之间的依赖关系表示了数据之间的关系。 
数据依赖关系具有传递性。 
数据依赖图(Data Dependency Graph 简称DDG):DDG可以表示成G(V,E),其中:V={vi ∈V | v为软件数据流中的数据},E={(vi,vj)| vi,vj∈V 并且vi =Dep(Exp,vj)},边的单向箭头由vi指向vj 。举例如图2所示, 
如图2给定的源程序,运行程序并输入x=2,y=3,跟踪程序运行过程,记录数据变化,得到数据流DS={2,3,0,10,1000,12,1,1,14,1,2,16,1,3,5,80,30,110},即为V,其中因为数据的产生过程为12=10+2,1=1+0,14=12+2,2=1+1,16=14+2,3=2+1,80=16*5,30=Random(),110=30+80,所以其中的数据依赖关系依次为12= Dep(sum=sum+x,10),12= Dep(sum=sum+x,2),1= Dep(i++,0),1= Dep(i++,1)…,110= Dep(sum=sum+Random(),80),110= Dep(sum=sum+Random(),30)。将得到的数据依赖关系形成数据对E={(12,10),(12,2),(1,0),(1,1)…(110,30),(110,80)}即为边集合,使用E和V构成图形DDG。
由数据定义的独立性表明,数据不可能被重复定义,则说明数据依赖图为有向无环图。 
切片规则模块,用于根据数据依赖图产生实现数据流切片的规则; 
由于软件的一般特征和数据的等价语义变换导致一部分数据流特征不能代表软件。因而需要对得到的数据依赖关系进行相应数据切片处理。
数据切片(Data Stream Slicing简称DSS):对程序P一定的输入I,根据程序P指令的控制,将获得的程序数据流划分成为一系列的子集,可以用DS(P,I,R)表示。I表示程序P的输入,R表示数据流切片规则。 
数据流切片的规则的精确定义如下: 
规则1:由于算法的输出性质,导致软件至少有一个输出,软件所有的指令对数据的操作都围绕着输出的数据(返回值或传出值)展开,所以将与输出数据无依赖关系的数据去除。在DDG中表现为,将DDG看成无向图,将包含输出数据的最大连通子图留下,其余子图删除。
规则2:由于算法有可能需要随机数据参与输出数据的运算,随机数据因为数据不确定,及对它有依赖关系的数据也不确定,不能用来表示软件特征。在DDG中表现为,将随机数据节点删除,及其对随机数可达节点都删除。 
规则2用到的随机数定义如下: 
随机数:设P输入为I,EXP为表达式,d为数据,且 d=Def(EXP),若在输入I的情况下,软件P在运行n次中,产生的d数据为d1,d2…dn,若di≠dj 则称d为随机数。
规则3:由于程序的静态数据的确定性,不随输入数据而变换,软件攻击方法可以将静态数据和指令结合,进行相应整体调整,造成获得的数据流之间的差异,所以要去除数据依赖图中的静态数据节点。 
数据依赖图切片模块,通过使用切片规则模块中实现的切片规则对数据依赖图进行化简。 
如图3所示,给出了对数据依赖图按照切片规则模块中的规则进行切片的具体的执行过程。 
拓扑排序模块,用拓扑排序算法对数据依赖图切片模块化简的数据依赖图进行拓扑排序,最终形成软件特征文档,该特征以字符串的形式表示出来,并用集合和向量来表示数据间的关系。 
由上个模块得到可知,得到的数据依赖图为AOV网,因此在AOV网传统拓扑排序算法基础之上使用一种新的基于数据依赖关系的拓扑排序算法,称为关系拓扑排序(Relation Topological Sort 简称RTS),用这个排序算法来对数据依赖图进行拓扑排序。 
关于拓扑排序算法思想,利用递归将没有数据依赖关系的节点使用集合表示,将有直接或间接数据依赖关系的节点利用向量表示,向量顺序表示了节点的先后顺序。算法具体描述如下: 
1)若拓扑图栈非空且入度为0的节点个数为1,则跳到步骤3);若拓扑图栈非空且入度为0的节点个数大于1,将节点构成集合,跳到步骤2);若拓扑图栈为空,退出算法。
2)输出集合开始符号(“{”}),对集合中每个节点分别执行步骤3),最后输出集合结束符号(“}”)。 
3)输出开始符号(“(”)和此节点;若节点有前继节点,将其所有前继节点构成集合,执行步骤2);输出向量结束符号(“)”)。 
经过以上三步计算操作,AOV网将形成关系拓扑排序。 
AOV网将形成关系拓扑排序的字符串为:字符串中向量中的元素之间依照出现顺序有元素前后之间的依赖关系,字符串中集合中的元素表示元素之间无序。 
那么对于图3的关系拓扑排序结果为图4。 其中例如80= Dep(mul: =sum*(y+x),5)和80= Dep(mul: =sum*(y+x),16),其中80必须在16和5之前用向量表示;其中5与16没有依赖关系,使用集合表示;16,14和12有相互依赖关系,使用向量表示(16,14,2)。 
数据收集模块,用以在被检测软件运行过程中,收集程序中每条指令执行后寄存器和对应的内存中的数据,形成一个数据文档。具体的思想和流程如下: 
将软件P1在IDA环境中加载运行,开发IDC脚本文件控制IDA使得P1单步调试运行,并记录每条汇编语言执行后,记录EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP、EIP的数值,及其对应的有效的内存地址的值,并将其按顺序排列生成数据字符串DS。数据收集流程如图5所示:
在IDA中加载完IDC文件后,输入程序P和P中需要监控的起始位置start和结束位置end;然后,P运行到start位置开始监控,跳过系统调用,单步运行每一条反汇编语句,并记录数据包括EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP、EIP的数值,及其对应的有效的内存地址的值;最后判断是否运行到end,如果是则结束监控,否则循环到单步运行处继续执行。
相似度比较模块,把拓扑排序模块与数据收集模块分别得到的软件特征文档和数据文档进行相似度比较,然后进行判别。 
软件识别和病毒的特征检测按下列步骤进行: 
步骤一,根据原始软件,数据依赖提取模块根据运算符提取数据流,根据表达式提取数据间的依赖关系;并将提取出来的数据流用数据依赖图表示;
步骤二,数据依赖图切片模块对提取出来的数据流图根据切片规则模块产生的数据流切片规则进行化简;所述数据流切片规则具体如下:
(1)由于算法的输出性质,导致软件至少有一个输出,软件所有的指令对数据的操作都围绕着输出数据的返回值或传出值展开,并将与输出数据无依赖关系的数据去除;
(2)由于算法有可能需要随机数据参与输出数据的运算,随机数据因为数据不确定,及对它有依赖关系的数据也不确定,不能用来表示软件特征,因此将随机数据节点删除,并对随机数可达节点都删除;
(3)由于软件的静态数据的确定性,不随输入数据而变换,而软件攻击的方法可以将静态数据和指令结合,进行相应整体调整,造成获得的数据流之间的差异,所以要去除数据依赖图中的静态数据节点;
步骤三,拓扑排序模块按照拓扑排序算法将没有直接或间接数据依赖关系的节点使用集合表示,将有直接或间接数据依赖关系的节点利用向量表示,向量顺序表示节点的先后顺序,形成软件特征,该软件特征以字符串的形式表示;
步骤四,数据收集模块使用一些通用的工具,加载软件,在被检测软件运行的过程中收集程序中每条指令执行后寄存器以及对应的内存中的数值,形成一个数据文档,以便在相似度比较模块进行字符串相似度匹配时使用;
步骤五,相似度比较模块把拓扑排序模块与数据收集模块中得到的软件特征文档和数据文档进行相似度比较,并用递归算法计算出软件相似度,然后给出相似度判定标准。
相似度比较是将字符中的有序关系严格按照字符的出现序列进行比较,对于无序的字符只进行字符比较不进行顺序比较,直到字符匹配完成。 
递归算法如下: 
设软件P的数据流软件特征为PSFDS,软件Q运行时收集到的数据字符串为QDS,i为PSFDS的当前元素下标,j为QDS的当前元素下标,Tempj为保存j的临时变量,Success为成功的字符个数,Unsuccess为没找到的字符个数;
1)若i位置字符在PSFDS中处于向量中,则执行2);若i位置字符在PSFDS中处于集合中则,先使用Tempj=j将j的数据保存,然后执行2),调用结束后使用j=Tempj将j的数据复原,继续递归执行1);
2)若j大于Length(QDS),则退出第2)步返回;否则在QDS中j++位,开始查找此元素,若找到则Success++;否则Unsuccess++;最后i++; 
P和Q相似度计算公式为:
Figure 932182DEST_PATH_IMAGE001
相似度表示了软件特征字符串的字符和字符序列的子集,在另一个字符串中出现的比率。
所述的相似度的判别标准是: 
设μ和ξ分别为相似度的最小值和最大值,且0≤μ≤ξ≤1,意义如下:
当Similarity(P,Q)=1时,表示Q完全包含了P;
当Similarity(P,Q)≥ξ时,表示Q包含P的部分算法;
当μ≤Similarity(P,Q)<ξ时,表示不能确定Q是否包含了P的部分算法;
当Similarity(P,Q)≤μ时,表示Q不包含P的部分算法;
对于μ和ξ设定,如果ξ较小时,特征算法判别软件鲁棒性增强,但是置信度降低;如果μ较大时,特征算法鲁棒性减低,但是置信度提高;
根据数据流切片的软件特征算法原理,判断算法是否相同则需要较大ξ,判断软件算法是否包含需要根据具体应用调整μ和ξ;
当程序P的PSFDS较少,而从程序Q运行时收集的数据量QDS大时,给出相似度比较策略:先通过PSFDS和QDS进行相似度比较,若相似度处于μ和ξ之间,则降低P的PSFDS的粒度,只对P的部分算法提取数据流特征P1SFDS,由P1SFDS再次与QDS进行相似度计算,直到Similarity(P,Q)≤μ或Similarity(P,Q)≥ξ为止。
最后给出本文的实验步骤、数据、以及结果。 
实验为科学研究的基本方法之一。该模块在基于数据流切片的软件特征评价系统之上,对基于数据流切片的软件特征提取算法进行鲁棒性实验和置信度实验。 
由于基于数据流切片的软件特征提取算法是在数据流基础之上做的软件特征研究,所以本算法对软件有以下两点要求: 
1)软件运行中有数据流产生;
2)数据流的长度要符合一定范围。
实验硬件环境:CPU:酷睿 2 双核;内存:DDR2 800 2GB;硬盘:7200转/分钟; 
实验软件环境:Windows XP系统;IDA 5.5.0.925t;Microsoft Visual Studio 2005。
基于数据流的软件特征提取算法需要源码调试运行,实验选择快速排序(Quick Sort 简称QS)和冒泡排序(Bubble Sort 简称BS)程序作为实验对象,进行算法的鲁棒性实验和置信度实验。关键代码如图7所示。 
图7是使用C++语言的实现的QS与BS的核心源码,其中QS使用经典的递归算法实现,BS使用双重循环实现。 
为了使算法实验更有效并且观测方便,规定QS和BS输入同都为I,I元素有三部分组成1AB:A有两位组成,从01到50,表示数字的百位和千位;B由两位组成,从01到50,表示数字个位与十位;1、A和B共同组成五位数字,并以此按从小到大顺序排列,中间使用空格分开。由于要求特征字符串长度尽可能的长,所以将数据按照快速排序交换次数最多的情况来安排输入数据I,具体例子如图8所示。 
本实验通过将快速排序算法程序调试运行,得到数据流和数据依赖关系,并生成软件数据流特征;再将生成的可执行文件进行二进制代码混淆,然后将其运行,并收集软件运行数据信息;最后将软件特征与收集的数据信息进行相似度比较,给出实验报告, 并给出分析,验证基于数据流软件特征的鲁棒性。 
本实验分别使用QS与BS做了两组实验,每个实验包括两部分。 
QS实验步骤 
1)首先,在C++控制台应用程序编写经典的快速排序算法(Quick Sort 简称QS);其次,在输入的情况下,计算QS的数据流切片的软件特征QSSFDS;再次,通过数据收集模块D收集QS运行数据QSDS;最后,通过QSSFDS与QSDS 计算软件相似度值,即Similarity(QS,QS)。
2)首先,在C++控制台应用程序编写经典的快速排序算法(Quick Sort 简称QS);其次,在输入I情况下,分别计算QS的数据流切片的软件特征QSSFDS;再次,将QS可执行程序经过Code Virtualizer混淆形成QS`,将QS`通过数据收集模块D收集QS`运行数据QS`DS;最后,通过QSSFDS与QS`DS 计算软件相似度值,即Similarity(QS,QS`)。 
3)BS实验步骤,只是将QS实验步骤的对象换成BS,实际操作完全相同。 
  实验报告与分析: 
经过对实验周密的安排,数据严格的操作,得到实验报告与分析如下:包括QSDS、QSDS、BSSFDS、BSDS、Similarity(QS,QS)和Similarity(BS, BS)及其分析。
表1给出了运算符对数据流影响,表2给出了鲁棒性实验,表3是置信度实验。 
由表2的鲁棒性实验中可知Similarity(QS,QS)和Similarity(BS, BS)都同为100%,因为由SFDS算法知,SFDS是在软件调试运行中获得数据及其依赖图简化而来的,而DS为算法整个数据流的集合,所以SFDS为DS的子集,既应该为100%。其中,Similarity(QS, QS`)与Similarity(BS, BS’)都为100%,说明Code Virtualizer对软件进行混淆后软件基于数据流切片的软件特征依然可以完整的提取,实验验证了基于数据流切片的软件特征提取算法具有良好的鲁棒性。 
由表3的置信度实验可知,Similarity(QS,BS)为72.8435%,而Similarity(BS,QS)为3.6382%,两者都不可能达到100%,说明软件的不同。而数值差距大,是由于SFDS与程序输入和算法有关,而QS与BS同为排序算法,并且输入同为I,又由于BS对于数据进行两次循环,相当于数据全排列,所以包含数据I的全部排列情况,因而Similarity(QS,BS)将比较高,但随着SFDS字符串的变长, Similarity(QS,BS)将会一直减小,不会影响到软件识别。 
经数据实验验证,算法就具有良好的鲁棒性和置信度,但相似度与算法的输入关系紧密,变化幅度大,但是随着SFDS字符串的变长,不会影响算法的置信度和鲁棒性。本算法有以下四个优势: 
1)数据流获取范围可以控制,指的是数据流提取可以为一段代码,一个函数,一个算法,一个文件或整个软件。
2)数据依赖关系粒度可控制,指数据依赖关系可以从高级语言,低级语言,机器语言来获取数据依赖关系。 
3)软件数据流特征不需在软件中加入多余指令,所以不会影响原系统的运行效率。 
4)软件数据流特征验证计算在软件正常运行中不参与运算,所以不对软件正常运行效率产生影响。 
表1:运算符对数据流影响 
表2: 鲁棒性实验
Figure 2011101699062100002DEST_PATH_IMAGE003
表3:置信度实验
Figure 2011101699062100002DEST_PATH_IMAGE004

Claims (4)

1.一种基于数据流切片的软件识别方法,其特征在于,该方法使用计算机系统进行软件识别和病毒特征检测,所述的计算机系统至少包括一个特征提取模块,该特征提取模块内有数据依赖提取模块、切片规则模块、数据依赖图切片模块和拓扑排序模块;其中的数据依赖提取模块和一个数据收集模块连接,所述的数据依赖提取模块和数据收集模块有共同的输入,特征提取模块和数据收集模块的输出均与相似度比较模块相连;其中:
数据依赖提取模块,用以提取原始软件本身的数据流及其依赖关系,并将提取出来的数据流用数据依赖图表示;
切片规则模块,用于根据数据依赖图产生数据流切片的规则;
数据依赖图切片模块,通过使用切片规则模块中的数据流切片规则对数据依赖图进行化简;
拓扑排序模块,用拓扑排序算法对数据依赖图切片模块化简的数据依赖图进行拓扑排序,最终形成软件特征文档;
数据收集模块,用以在被检测软件运行过程中,收集程序中每条指令执行后寄存器和对应的内存中的数据,形成一个数据文档;
相似度比较模块,把拓扑排序模块与数据收集模块分别得到的软件特征文档和数据文档进行相似度比较,然后进行判别;
所述的软件识别和病毒特征检测按下列步骤进行:
步骤一,根据原始软件,数据依赖提取模块根据运算符提取数据流,根据表达式提取数据间的依赖关系;并将提取出来的数据流用数据依赖图表示;
步骤二,数据依赖图切片模块对提取出来的数据流图根据切片规则模块产生的数据流切片规则进行化简;所述数据流切片规则具体如下:
(1)由于算法的输出性质,导致软件至少有一个输出,软件所有的指令对数据的操作都围绕着输出数据的返回值或传出值展开,并将与输出数据无依赖关系的数据去除;
(2)由于算法有可能需要随机数据参与输出数据的运算,随机数据因为数据不确定,及对它有依赖关系的数据也不确定,不能用来表示软件特征,因此将随机数据节点删除,并对随机数可达节点都删除;
(3)由于软件的静态数据的确定性,不随输入数据而变换,而软件攻击的方法可以将静态数据和指令结合,进行相应整体调整,造成获得的数据流之间的差异,所以要去除数据依赖图中的静态数据节点;
步骤三,拓扑排序模块按照拓扑排序算法将没有直接或间接数据依赖关系的节点使用集合表示,将有直接或间接数据依赖关系的节点利用向量表示,向量顺序表示节点的先后顺序,形成软件特征,该软件特征以字符串的形式表示;
步骤四,数据收集模块使用一些通用的工具,加载软件,在被检测软件运行的过程中收集程序中每条指令执行后寄存器以及对应的内存中的数值,形成一个数据文档,以便在相似度比较模块进行字符串相似度匹配时使用;
步骤五,相似度比较模块把拓扑排序模块与数据收集模块中得到的软件特征文档和数据文档进行相似度比较,并用递归算法计算出软件相似度,然后给出相似度判定标准。
2.如权利要求1所述的方法,其特征在于,所述的拓扑排序算法如下:
1)若拓扑图栈非空且入度为0的节点个数为1,则跳到步骤3);若拓扑图栈非空且入度为0的节点个数大于1,将节点构成集合,跳到步骤2);若拓扑图栈为空,退出算法;
2)输出集合开始符号(“{”),对集合中每个节点分别执行步骤3),最后输出集合结束符号(“}”);
3)输出开始符号(“(”)和此节点;若节点有前继节点,将其所有前继节点构成集合,执行步骤2);输出向量结束符号(“)”)。
3.如权利要求1所述的方法,其特征在于,所述的相似度比较是将字符中的有序关系严格按照字符的出现序列进行比较,对于无序的字符只进行字符比较不进行顺序比较,直到字符匹配完成。
4.如权利要求1所述的方法,其特征在于,所述的相似度的判别标准是:
设μ和ξ分别为相似度的最小值和最大值,且0≤μ≤ξ≤1,意义如下:
当Similarity(P,Q)=1时,表示Q完全包含了P;
当Similarity(P,Q)≥ξ时,表示Q包含P的部分算法;
当μ≤Similarity(P,Q)<ξ时,表示不能确定Q是否包含了P的部分算法;
当Similarity(P,Q)≤μ时,表示Q不包含P的部分算法;
对于μ和ξ设定,如果ξ较小时,特征算法判别软件鲁棒性增强,但是置信度降低;如果μ较大时,特征算法鲁棒性减低,但是置信度提高;
根据数据流切片的软件特征算法原理,判断算法是否相同则需要较大ξ,判断软件算法是否包含需要根据具体应用调整μ和ξ;
当程序P的PSFDS较少,而从程序Q运行时收集的数据量QDS大时,给出相似度比较策略:先通过PSFDS和QDS进行相似度比较,若相似度处于μ和ξ之间,则降低P的PSFDS的粒度,只对P的部分算法提取数据流特征P1SFDS,由P1SFDS再次与QDS进行相似度计算,直到Similarity(P,Q)≤μ或Similarity(P,Q)≥ξ为止。
CN2011101699062A 2011-06-22 2011-06-22 一种基于数据流切片的软件识别方法 Expired - Fee Related CN102298681B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011101699062A CN102298681B (zh) 2011-06-22 2011-06-22 一种基于数据流切片的软件识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011101699062A CN102298681B (zh) 2011-06-22 2011-06-22 一种基于数据流切片的软件识别方法

Publications (2)

Publication Number Publication Date
CN102298681A CN102298681A (zh) 2011-12-28
CN102298681B true CN102298681B (zh) 2013-07-31

Family

ID=45359091

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011101699062A Expired - Fee Related CN102298681B (zh) 2011-06-22 2011-06-22 一种基于数据流切片的软件识别方法

Country Status (1)

Country Link
CN (1) CN102298681B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990058A (zh) * 2019-11-28 2020-04-10 中国人民解放军战略支援部队信息工程大学 软件相似性度量方法及装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699599B (zh) * 2013-12-10 2018-11-06 上海精密计量测试研究所 基于idUCf五元结构的过程间静态切片提取方法
CN107392029B (zh) * 2017-07-28 2020-07-07 中国人民解放军63928部队 一种基于化学抽象机的脆弱性模型构建方法
CN109327484B (zh) * 2017-07-31 2021-09-28 北京嘀嘀无限科技发展有限公司 特征值集合的获取方法、装置、服务器及存储介质
CN109144695B (zh) * 2018-08-30 2021-08-10 百度在线网络技术(北京)有限公司 一种任务拓扑关系的处理方法、装置、设备和介质
CN113064373B (zh) * 2021-04-07 2022-04-15 四川中鼎智能技术有限公司 基于视频图像识别的工业水电设备逻辑信号控制方法、系统、终端及存储介质
CN117311678A (zh) * 2023-08-04 2023-12-29 四川大学 用于ai系统的程序模块序化组接功能合成的等效嵌入方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5842002A (en) * 1994-06-01 1998-11-24 Quantum Leap Innovations, Inc. Computer virus trap
US5889943A (en) * 1995-09-26 1999-03-30 Trend Micro Incorporated Apparatus and method for electronic mail virus detection and elimination
CN101154257A (zh) * 2007-08-14 2008-04-02 电子科技大学 基于漏洞特征的动态执行补丁方法
CN101359351A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 针对恶意行为的多层语义标注及检测方法
CN101359352A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 分层协同的混淆后api调用行为发现及其恶意性判定方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5842002A (en) * 1994-06-01 1998-11-24 Quantum Leap Innovations, Inc. Computer virus trap
US5889943A (en) * 1995-09-26 1999-03-30 Trend Micro Incorporated Apparatus and method for electronic mail virus detection and elimination
CN101154257A (zh) * 2007-08-14 2008-04-02 电子科技大学 基于漏洞特征的动态执行补丁方法
CN101359351A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 针对恶意行为的多层语义标注及检测方法
CN101359352A (zh) * 2008-09-25 2009-02-04 中国人民解放军信息工程大学 分层协同的混淆后api调用行为发现及其恶意性判定方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《程序切片技术在软件测试中的应用》;孙继荣等;《计算机应用研究》;20070531;第24卷(第5期);第210-213页 *
孙继荣等.《程序切片技术在软件测试中的应用》.《计算机应用研究》.2007,第24卷(第5期),第210-213页.

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990058A (zh) * 2019-11-28 2020-04-10 中国人民解放军战略支援部队信息工程大学 软件相似性度量方法及装置

Also Published As

Publication number Publication date
CN102298681A (zh) 2011-12-28

Similar Documents

Publication Publication Date Title
CN102298681B (zh) 一种基于数据流切片的软件识别方法
CN102346829B (zh) 基于集成分类的病毒检测方法
CN106709345B (zh) 基于深度学习方法推断恶意代码规则的方法、系统及设备
Fournier-Viger et al. VMSP: Efficient vertical mining of maximal sequential patterns
CN102253889B (zh) 一种回归测试中基于分布的测试用例优先级划分方法
CN102779249B (zh) 恶意程序检测方法及扫描引擎
CN101359352B (zh) 分层协同的混淆后api调用行为发现及其恶意性判定方法
CN105224600B (zh) 一种样本相似度的检测方法及装置
CN108268777A (zh) 一种利用补丁信息进行未知漏洞发现的相似性检测方法
CN103729402A (zh) 一种基于图书目录的知识图谱的构建方法
CN110287702A (zh) 一种二进制漏洞克隆检测方法及装置
CN104407872A (zh) 代码克隆的检测方法
Savenko et al. Metamorphic Viruses' Detection Technique Based on the Equivalent Functional Block Search.
CN105138916A (zh) 基于数据挖掘的多轨迹恶意程序特征检测方法
CN108491228A (zh) 一种二进制漏洞代码克隆检测方法及系统
CN103914657A (zh) 一种基于函数特征的恶意程序检测方法
CN105989287A (zh) 一种海量恶意样本同源性判定方法及系统
CN105045715A (zh) 基于编程模式和模式匹配的漏洞聚类方法
CN109871686A (zh) 基于图标表示和软件行为一致性分析的恶意程序识别方法及装置
CN105117430A (zh) 一种基于等价类的重复任务过程发现方法
CN105487983A (zh) 基于智能路径引导的敏感点逼近方法
CN104933365A (zh) 一种基于调用习惯的恶意代码自动化同源判定方法及系统
CN103853771B (zh) 一种搜索结果的推送方法及系统
CN104580254A (zh) 一种钓鱼网站识别系统及方法
CN106326746B (zh) 一种恶意程序行为特征库构建方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Chen Xiaojiang

Inventor after: Wang Huaijun

Inventor after: Gao Baojian

Inventor after: Xing Tianzhang

Inventor after: Li Lei

Inventor after: Tang Zhanyong

Inventor after: Fang Dingyi

Inventor after: Lei Yuanxiao

Inventor after: Guo Jun

Inventor after: He Lu

Inventor after: Gong Xiaoqing

Inventor after: Wang Ni

Inventor before: Fang Dingyi

Inventor before: Wang Huaijun

Inventor before: Gao Baojian

Inventor before: Xing Tianzhang

Inventor before: Li Lei

Inventor before: Tang Zhanyong

Inventor before: Chen Xiaojiang

Inventor before: Lei Yuanxiao

Inventor before: Guo Jun

Inventor before: He Lu

Inventor before: Gong Xiaoqing

Inventor before: Wang Ni

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: FANG DINGYI LI LEI TANG ZHANYONG CHEN XIAOJIANG LEI YUANXIAO GUO JUN HE LU GONG XIAOQING WANG NI WANG HUAIJUN GAO BAOJIAN XING TIANZHANG TO: CHEN XIAOJIANG LI LEI TANG ZHANYONG FANG DINGYI LEI YUANXIAO GUO JUN HE LU GONG XIAOQING WANG NI WANG HUAIJUN GAO BAOJIAN XING TIANZHANG

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130731

Termination date: 20190622

CF01 Termination of patent right due to non-payment of annual fee