CN110083534B - 一种基于约减最短路径胎记的软件抄袭检测方法 - Google Patents
一种基于约减最短路径胎记的软件抄袭检测方法 Download PDFInfo
- Publication number
- CN110083534B CN110083534B CN201910318246.6A CN201910318246A CN110083534B CN 110083534 B CN110083534 B CN 110083534B CN 201910318246 A CN201910318246 A CN 201910318246A CN 110083534 B CN110083534 B CN 110083534B
- Authority
- CN
- China
- Prior art keywords
- function
- shortest path
- analyzed
- similarity
- path
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于约减最短路径胎记的软件抄袭检测方法,包括:1)静态反汇编待分析程序,生成待分析函数表;2)对于每个函数,搜索其控制流图入口节点到其余各节点的最短路径集,进行路径约减和抽象,构建约减最短路径胎记;3)利用模糊哈希计算约减路径胎记间的相似性,作为函数间相似性的度量;4)对函数进行分组,并通过最大带权二分图匹配,生成函数映射表;5)计算原告和被告程序的相似性并进行抄袭判定,输出检测结果。本发明通过路径搜索和抽象,提升方法对抗代码混淆的能力;通过模糊哈希和分组匹配,保证方法应用于现实大型二进制程序的可伸缩性。
Description
技术领域
本发明属于程序特征挖掘及软件抄袭检测技术领域,特别涉及一种基于约减最短路径胎记的软件抄袭检测方法。
背景技术
开源软件社区如GitHub、SourceForge以及社交编程网站如CodeShare等的蓬勃发展,带来了软件工业的繁荣;伴随而来的软件抄袭问题亦日趋严重,滥用他人代码的情况屡见不鲜。一方面,不乏经济利益驱使的有预谋抄袭。2015年,柚子科技的产品APICloud涉嫌抄袭数字天堂DCloud的大量代码陷入侵权案中,司法鉴定报告证实其不仅直接挪用了DCloud的dll文件,还抄袭了DCloud的真机运行、边改边看等功能的大量源码;近期的“红芯风波”更是闹得沸沸扬扬,宣称自主研发国产内核的红芯浏览器被爆仅仅是换壳谷歌Chrome;另一方面,是无意的抄袭。许多下游的大型软件公司往往会将其软件产品的部分模块外包出去,上游公司交付的代码是否涉嫌抄袭则难以审查。2009年,Version被开源软件基金会指控在其FIOS无线路由器中滥用了Busybox的代码,而这款产品实际是其交由Actiontec Electronics开发的。在不计代价和开销的情况下,抄袭者可利用任何当下可行的手段、技术和资源达到抄袭的目的,使得研究实用的软件抄袭检测方法非常具有挑战性。
软件胎记是从软件代码或执行过程中抽取出的一些不易改变且可唯一地对软件身份进行标识的特征;胎记技术通过衡量胎记的相似性判定软件间可能存在的抄袭。根据胎记生成方式,可以分为静态和动态两种。前者静态分析程序的代码,基于程序的词法、语法或结构特性等生成胎记;后者则具体地执行软件,利用捕获的执行轨迹信息,或分析轨迹中各要素间的控制和数据依赖关系等构建胎记。尽管现有基于软件胎记的检测方法在一定程度上解决了抄袭检测的问题,但还存在局限性;例如:
1、很多方法只能应用于源码存在的情形,包括目前专业鉴定机构采取的主要是源代码比对手段,而很多情况下程序源码是无法获取的,特别是商业软件,为躲避检测通常以可执行文件的形式发布。除非司法机关介入,被告往往不会轻易交出其源码,而且在法律诉讼中,被告可以以举证责任在原告为由拖延或拒不交出源码,故实际应用较难。
2、为增加检测难度,抄袭者往往会借助当下众多的代码混淆/迷乱技术和工具,如DashO、ZelixKlassmaster等,在保证程序语义不变的前提下,通过改变程序控制结构、调整代码布局等混淆方式,生成与原程序看起来非常不一样的代码。大部分现有方法在构建胎记时由于对程序语义和行为考虑不足,难以对抗不同编译器和优化选项带来的干扰。
3、现有抄袭检测方法的伸缩性(scalability)不佳,往往难以处理现实中的大型程序。特别是基于严格语义分析的胎记技术,尽管可更有效地对抗代码混淆,但由于对程序行为的建模过度复杂,时间和空间开销会非常庞大,导致难以应用;此外,动态胎记技术因需具体的执行程序,检测过程中往往只能覆盖到极小部分的程序行为,且开销较高,分析现实大型软件的实用性也难以保证。
4、被告软件(抄袭方)对原告软件(被抄袭方)的抄袭可简单归纳为两种形式,一是将原告的所有或者绝大部分代码挪为己用,即整体抄袭;二是仅挪用原告的部分代码,即局部抄袭,如APICloud侵权案中,被告只挪用了DCloud的代码提示、真机运行、边改边看等功能模块。现有大部分胎记技术主要解决的是整体抄袭问题,由于代码间的耦合性和关联性,涉嫌抄袭的代码往往难以单独封装成块独立运行,极大地限制了检测能力更强的动态胎记技术在局部抄袭检测方面的应用。此外,现有检测方法普遍简单输出原被告程序的整体相似性及判定结果,但对于局部抄袭检测而言,相比给出整体相似度,更重要的是要给出涉嫌抄袭部分在原被告软件中的对应关系。
针对上述技术问题,亟需研究一种更具实用性的新的软件抄袭检测方法。
发明内容
本发明的目的在于提供一种基于约减最短路径胎记的软件抄袭检测方法,以解决上述存在的一个或多个技术问题。本发明的检测方法,能够直接作用于二进制目标程序,可对抗当下主流的自动化代码混淆技术,可有效支持软件局部抄袭的检测,且一定程度上具备分析现实大型软件的能力。
为达到上述目的,本发明采用以下技术方案:
一种基于约减最短路径胎记的软件抄袭检测方法,包括以下步骤:
S1,利用静态反汇编技术,分别提取原告程序和被告程序中的所有函数,对应生成原告程序待分析函数表和被告程序待分析函数表;提取函数时,每个函数的关键要素包括:函数ID、汇编指令集BODY、以及控制流图CFG;
S2,构建步骤S1获得的两个待分析函数表中每个函数的约减最短路径胎记,将获得的约减最短路径胎记作为每个函数行为和语义的表征;构建过程包括:首先,根据函数的控制流图,提取从控制流图入口节点到其他各节点的所有最短路径,构成最短路径集SP;然后,对最短路径集SP进行约减和抽象,获得函数的约减最短路径胎记;
S3,迭代比较原告待分析函数表与被告待分析函数表中的每对函数,并计算获得其约减最短路径胎记的相似性,最终生成函数相似性矩阵;
S4,基于步骤S3生成的函数相似性矩阵,利用最大带权二分图匹配,生成原告程序到被告程序的函数映射表;
S5,基于步骤S4获得的函数映射表中各匹配对间相似性及函数规模大小,计算获得原告程序和被告程序的相似性,并按照预设判定标准做出判定;所述检测方法的输出包括:原告程序和被告程序的相似性、判定结果以及函数映射表。
本发明的进一步改进在于,步骤S3中,约减最短路径胎记的相似性采用模糊哈希算法计算。
本发明的进一步改进在于,步骤S1中具体还包括:移除琐碎函数;所述移除琐碎函数的步骤包括:分析每个函数的BODY中的指令数量,仅当指令数量高于预设阈值时,将该函数以<ID,CFG>的形式,加入到原告程序待分析函数表或被告程序待分析函数表中。
本发明的进一步改进在于,步骤S2中,函数的约减最短路径胎记构建方法具体包括:
首先,对函数的控制流图CFG应用最短路径算法,提取出从控制流图CFG的入口节点到其他各节点的最短路径,构成最短路径集SP;
然后,分析最短路径集SP中路径间的包含关系,对于最短路径集SP中的每条路径p∈SP,如果最短路径集SP中不存在完整包含路径p的其他路径,则将路径p添加到新的路径集RSP中,从而得到约减最短路径集RSP;
最后,对获得的约减最短路径集RSP中的每条路径进行抽象,将抽象后生成的路径集RSPB,记作该函数的约减最短路径胎记。
本发明的进一步改进在于,步骤S2中,路径的抽象方式具体包括:令路径p=<ins1,ins2,…,insn>为RSP中的一条路径,insi∈p表示路径上的汇编指令;按照处理规则依次处理路径p上的每条汇编指令实现对该路径的抽象;
所述处理规则为:指令的操作符保持不变,操作数抽象为其类型标识。
本发明的进一步改进在于,步骤S3中,约减最短路径胎记间相似性计算方法为:
将原告待分析函数表中的某函数f的约减最短路径胎记记为RSPB(f),将被告待分析函数表中的某函数g的约减最短路径胎记记为RSPB(g);
首先,利用模糊哈希算法,计算两约减最短路径胎记的所有路径之间的相似性;
然后,将RSPB(f)中的每条路径,对应于RSPB(g)中与之相似性最高的路径,计算获得这些最高相似值的均值,将所述均值作为两约减最短路径胎记的相似性;
函数相似性矩阵的生成方法具体包括:任意两函数的相似性,通过衡量它们的约减最短路径胎记的相似性得到,即sim(f,g)=sim(RSPB(f),RSPB(g));迭代比较原告待分析函数表中每个函数与被告待分析函数表中每个函数,生成函数相似性矩阵。
本发明的进一步改进在于,步骤S4中,还包括:依据相似性对原告程序待分析函数表和被告程序待分析函数表中的函数进行分组;
函数分组方法具体包括:
首先,基于生成的函数相似性矩阵,为原告待分析函数表中的每个函数,从被告待分析函数表中选择与之最相似的前k个函数,作为其可疑匹配对象集;
然后,迭代执行以下过程实现函数分组,具体包括:
1)选取原告待分析函数表中的任一函数f构成分组G={f},更新分组G的可疑匹配对象集为sus(G)=sus(f),其中sus(f)表示f的可疑匹配对象集;
2)判断原告待分析函数表中是否存在其他函数与G的可疑匹配对象集存在交集;将存在交集的函数并入分组G,并更新此时分组G的可疑匹配对象集;直到不存在函数与分组G的可疑匹配对象集存在交集,形成一个有效分组;
3)将步骤2)获得的有效分组中的函数从原告待分析函数表中移除,从被告待分析函数表中移除所有出现在有效分组的可疑匹配对象集中的函数;
4)重复步骤1)至步骤3),迭代处理至分组完成,获得若干个有效分组。
本发明的进一步改进在于,步骤S4中,生成函数映射表的步骤包括:将划分得到的有效分组及其可疑匹配对象集中的函数视作二分图中的节点,有效分组及其可疑匹配对象集中函数之间的相似性视作二分图中边的权重,应用最大带权二分图匹配算法求得匹配方案;基于所述匹配方案下节点间的对应关系以及预设可调节阈值,生成该有效分组的函数映射表;
按照上述方法对每个有效分组进行处理,获得每个有效分组的函数映射表;汇总全部有效分组的函数映射表,生成原告程序到被告程序的函数映射表。
本发明的进一步改进在于,步骤S5中,原告程序和被告程序的相似性的计算表达式为:
其中,KSet返回函数映射表的所有键,count返回指定函数的指令数量,P原告程序,Q被告程序,MTable(P)为原告程序P到被告程序Q的函数映射表,f为原告程序中的函数,g为被告程序中的函数。
本发明的进一步改进在于,步骤S5中,判定标准为:
其中,ε为预设阈值,P为原告程序,Q为被告程序。
与现有技术相比,本发明具有以下有益效果:
本发明提供一种更具实用性和伸缩性的检测软件抄袭的方法,能够直接作用于二进制目标程序,可对抗当下主流的自动化代码混淆技术,特别是可以有效支持软件局部抄袭的检测,且具备分析现实大型软件的能力。具体体现在:(1)本发明的软件抄袭检测方法,应用静态反汇编技术,能够直接作用于待检测对象的二进制目标代码,在程序源码不可获取的情景下依然可用,适用范围更广,可操作性更强,具有较大的实用价值。(2)本发明的检测方法,将函数作为构建胎记的基本单元,即通过构建函数级胎记,能够实现对局部抄袭进行检测,绝大多数现有胎记技术仅可用于整体抄袭的检测。(3)本发明的检测方法中,搜索函数CFG中所有的最短路径,可实现该函数行为更全面的覆盖;通过路径约减和抽象,可提升对抗深度混淆的能力,保证方法具有一定的可伸缩性,可用于分析现实较大型软件。(4)本发明的检测方法,除输出判定结果及整体相似性外,还输出函数映射表,给出原被告程序中可疑函数间的对应关系,更具现实意义。
进一步地,本发明的检测方法,利用模糊哈希实现胎记间相似性的快速计算,设计分组匹配机制实现原被告可疑函数的高效匹配,能够减少比较次数,提高单次比较速度,可极大减小内存开销和提升分析速度,进一步保证检测方法的可伸缩性,能够更好地支持现实大型软件的分析。
附图说明
图1是本发明实施例的一种基于约减最短路径胎记的软件抄袭检测方法的整体流程示意框图;
图2是本发明实施例的检测方法中函数分组生成方法的流程示意框图;
图3是本发明实施例的检测方法中基于最大带权二分图匹配的函数映射表生成方法的流程示意框图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
请参阅图1,其为基于约减最短路径胎记的软件抄袭检测方法的处理流程,其中原告程序指的是程序所有者开发的原始程序,被告程序指涉嫌抄袭了原始程序部分或全部代码的可疑程序,二者均为二进制目标程序,不包含源代码。
本发明实施例的一种基于约减最短路径胎记的软件抄袭检测方法,包括以下步骤:
步骤S101:利用静态反汇编工具IDA Pro,解析原告程序,从中提取所有的函数及其关键要素,关键要素包括函数地址ID、汇编指令集BODY、以及控制流图CFG;为避免琐碎的函数对分析带来的干扰,依次分析每个函数的BODY中的指令数量,仅当其指令数量高于某阈值π时,将该函数以<ID,CFG>的形式,加入到原告程序的待分析函数表中,阈值π一般取值为10。按照相同方式处理被告程序,生成被告程序的待分析函数表。
步骤S102:迭代处理原告和被告待分析函数表中每个函数,构建每个函数的约减最短路径胎记。具体地,每个函数的约减最短路径胎记构建过程描述如下:
(1)对函数的控制流图CFG,利用Dijkstra或Floyd最短路径算法,提取出从CFG的入口节点到其他各节点的所有最短路径,构成最短路径集SP;
(2)分析SP中路径间的包含关系,即对于SP中的每条路径p∈SP,如果SP中不存在完整包含p的其他路径,则将路径p添加到新的路径集RSP中,从而得到约减的最短路径集RSP;
(3)对RSP中的每条路径进行抽象以提升对抗代码混淆的能力,并将抽象后生成的路径集RSPB,记作该函数的约减最短路径胎记。具体地,每条路径的抽象方式为:令p=<ins1,ins2,…,insn>为RSP中的一条路径,insi∈p表示该路径上的第i条汇编指令;按照以下规则依次处理路径上的每条汇编指令完成对该路径的抽象,即指令的操作符保持不变,操作数抽象为其类型标识,即寄存器统一抽象成R,内存地址统一抽象为M,立即数统一抽象为I。例如,路径“mov[0x613c334],0x4;mov[0x613c33c],eax;sub esp,0x35;add eax,ebx”将被抽象为“mov M,I;mov M,R;sub R,I;add R,R”。
步骤S103:迭代比较原告待分析函数表中每个函数与被告待分析函数表中每个函数的相似性,生成函数相似性矩阵;任意两函数间的相似性,则通过衡量它们的约减最短路径胎记的相似性得到,即有:
sim(f,g)=sim(RSPB(f),RSPB(g)),
其中,RSPB(f)={p1,p2,…,pm}和RSPB(g)={q1,q2,…,qn}分别为原告待分析函数表中某函数f和被告待分析函数表中某函数g的约减最短路径胎记。
具体地,对于约减最短路径胎记RSPB(f)和RSPB(g),二者相似性计算方法描述如下:
首先,利用模糊哈希算法ssdeep,计算两约减最短路径胎记的所有路径之间的相似性;即计算一个m×n阶的相似性矩阵PSMatrix,其中对于该矩阵中的每一个元素,有PSMatrix[i,j]=ssdeep(pi,qj),0≤i<m,0≤j<n;
然后,将RSPB(f)中的每条路径,对应于RSPB(g)中与之相似性最高的路径,并取这些最大相似值的均值,作为两约减最短路径胎记的相似性,即有:
其中,max(PSMatrix[i,j]|0≤j<n)表示取矩阵PSMatrix的第i行中的最大值。
步骤S104:基于函数相似性矩阵,对原告和被告程序待分析函数表中的函数进行分组,并利用最大带权二分图匹配,生成函数映射表。
函数分组方法为:首先,基于生成的函数相似性矩阵,为原告待分析函数表中的每个函数,从被告待分析函数表中选择与之最相似的前k个函数(k的取值一般为3或4),作为其可疑匹配对象集;然后,迭代执行以下过程实现函数分组:a)选取原告待分析函数表中的任一函数f构成一新的分组G={f},更新分组G的可疑匹配对sus(G)=sus(f),其中sus(f)表示f的可疑匹配对象集;b)判断原告待分析函数表中是否存在其他函数f',其与G的可疑匹配对象集存在交集,如存在则将其并入分组G,并更新G的可疑匹配对象集,即G={f,f'},sus(G)=sus(f)∪suf(f');c)重复过程b),直到不存在函数与G的可疑匹配对象集存在交集,此时G形成一个有效分组;d)将G中函数从原告待分析函数表中移除,并从被告的待分析函数表中移除所有出现在G的可疑匹配对象集中的函数,继续下一轮的迭代。
请参阅图2,本发明的一个具体实施例,对函数进行分组的过程描述如下:首先,基于步骤S103生成的函数相似性矩阵,为原告待分析函数表中的每个函数,从被告待分析函数表中选择与之最相似的前k个函数,k的取值一般为3或4,作为其可疑匹配对象集;然后,按照图2所示流程,迭代地生成函数分组,具体包括:
步骤S201:初始化一键值对集合GS,用于记录划分生成的每个分组及该分组的可疑匹配对象集;
步骤S202:判断原告待分析函数表pFuns是否还有未被分组的函数,是则转入步骤S203,否则转入步骤S2014;
步骤S203:从pFuns中任取一函数f,并将其从pFuns中去除;
步骤S204:创建一新的分组G={f},并更新分组G的可疑匹配对象集为sus(G)=sus(f),其中sus(f)表示f的可疑匹配对象集;
步骤S205:定义两个变量cur和last,用于记录此轮迭代结束后和上一轮迭代结束后分组G中元素的个数,以便判断是否继续迭代;两个变量的初始值分别为1和-1;
步骤S206:判断pFuns中是否还存在元素,是则转入步骤S207,否则转入步骤S2013;
步骤S207:从pFuns中任取一未被访问过的函数f',并将其标记为已访问;
步骤S208:判断函数f'与G的可疑匹配对象集是否存在交集,是则转入步骤S209,否则转入步骤S2010;
步骤S209:更新当前分组G及其可疑匹配对象集,即G=G∪{f'},sus(G)=sus(G)∪suf(f');
步骤S2010:判断pFuns中是否还存在尚未被访问过的元素,是则转入步骤S207,否则转入步骤S2011;
步骤S2011:从pFuns中移除所有在分组G中出现过的元素,重置pFuns中其余元素的标记为未访问,并更新cur和last的值,有last=cur,cur=|G|,其中|G|表示分组G中元素的个数;
步骤S2012:判断cur是否等于last,是则表明,继续迭代不会再向G中划入新的元素,即G已形成一个有效分组,转入步骤S2013,否则表明可以继续迭代,转入步骤S206;
步骤S2013:将分组G及其可疑匹配对象集sus(G)构成的键值对<G,sus(G)>,添加到GS中,转入步骤S202;
步骤S2014:输出键值对集合GS,结束整个迭代过程。
函数映射表的生成方法为:对于划分得到的每个函数分组G及其可疑匹配对象集sus(G),通过将G和sus(G)中的函数视作二分图中的节点,G和sus(G)中函数之间的相似性视作二分图中边的权重,应用最大带权二分图匹配算法可求得一匹配方案MaxMatch(G,sus(G))={<f,g>|f∈G∧g∈sus(G)};然后,基于该匹配方案下节点间的对应关系以及可调节阈值δ(取值范围为0.6-0.75),生成该分组的函数映射表MTable(G)={<<f,g>,sim(f,g)>|<f,g>∈MaxMatch(G,sus(G))∧sim(f,g)≥δ};依次处理每个分组,并汇总所有分组的函数映射表,生成原告程序P到被告程序Q的函数映射表MTable(P)。
请参阅图3,本发明的一个具体实施例,生成函数映射表的过程具体包括:
步骤S301:判断GS中是否还存在尚未为分析的元素,是则转入步骤S302,否则转入步骤S308;
步骤S302:从GS中任取一元素<G,sus(G)>作为分析对象,跳转至S303;
步骤S303:利用最大带权二分图匹配算法,如Kuhn-Munkres算法,计算一最大匹配MaxMatch(G,sus(G))={<f,g>|f∈G∧g∈sus(G)};
步骤S304:判断MaxMatch中是否存在待分析的元素,是则转入步骤S305,否则转入步骤S301;
步骤S305:从MaxMatch中任取一原被告函数的对应关系<f,g>,并将其从MaxMatch中移除;
步骤S306:判断函数f和g的相似性是否高于给定的阈值δ,是则转入步骤S307,否则转入步骤S304;
步骤S307:将<f,g>及二者的相似性,构成键值对<<f,g>,sim(f,g)>添加到MTable中,转入步骤S304;
步骤S308:输出键值对集合MTable,即原告程序到被告程序的函数映射表。
步骤S105:基于函数映射表,计算原告和被告程序的相似性并做出判定,输出相似性、判定结果、以及函数映射表。
具体地,原被告程序的相似性采用如下公式进行计算:
其中,KSet返回函数映射表的所有键,count返回指定函数的指令数量。
同时,采用如下判定标准给出判定结果:
其中,ε为一可控阈值,取值范围为0.2-0.3
综上,本发明提出了一种基于约减最短路径胎记的软件抄袭检测方法,包括:1)静态反汇编待分析程序,生成待分析函数表;2)对于每个函数,搜索其控制流图入口节点到其余各节点的最短路径集,进行路径约减和抽象,构建约减最短路径胎记;3)利用模糊哈希计算约减路径胎记间的相似性,作为函数间相似性的度量;4)对函数进行分组,并通过最大带权二分图匹配,生成函数映射表;5)计算原告和被告程序的相似性并进行抄袭判定,输出检测结果。本发明通过路径搜索和抽象,提升方法对抗代码混淆的能力;通过模糊哈希和分组匹配,保证方法应用于现实大型二进制程序的可伸缩性。
以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。
Claims (8)
1.一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,包括以下步骤:
S1,利用静态反汇编技术,分别提取原告程序和被告程序中的所有函数,对应生成原告程序待分析函数表和被告程序待分析函数表;提取函数时,每个函数的关键要素包括:函数ID、汇编指令集BODY、以及控制流图CFG;
S2,构建步骤S1获得的两个待分析函数表中每个函数的约减最短路径胎记,将获得的约减最短路径胎记作为每个函数行为和语义的表征;构建过程包括:首先,根据函数的控制流图,提取从控制流图入口节点到其他各节点的所有最短路径,构成最短路径集SP;然后,对最短路径集SP进行约减和抽象,获得函数的约减最短路径胎记;
S3,迭代比较原告待分析函数表与被告待分析函数表中的每对函数,并计算获得其约减最短路径胎记的相似性,最终生成函数相似性矩阵;
S4,基于步骤S3生成的函数相似性矩阵,利用最大带权二分图匹配,生成原告程序到被告程序的函数映射表;
S5,基于步骤S4获得的函数映射表中各匹配对间相似性及函数规模大小,计算获得原告程序和被告程序的相似性,并按照预设判定标准做出判定;所述检测方法的输出包括:原告程序和被告程序的相似性、判定结果以及函数映射表;
步骤S2中,函数的约减最短路径胎记构建方法具体包括:
首先,对函数的控制流图CFG应用最短路径算法,提取出从控制流图CFG的入口节点到其他各节点的最短路径,构成最短路径集SP;
然后,分析最短路径集SP中路径间的包含关系,对于最短路径集SP中的每条路径p∈SP,如果最短路径集SP中不存在完整包含路径p的其他路径,则将路径p添加到新的路径集RSP中,从而得到约减最短路径集RSP;
最后,对获得的约减最短路径集RSP中的每条路径进行抽象,将抽象后生成的路径集RSPB,记作该函数的约减最短路径胎记;
步骤S2中,路径的抽象方式具体包括:令路径p=<ins1,ins2,…,insn>为RSP中的一条路径,insi∈p表示路径上的汇编指令;按照处理规则依次处理路径p上的每条汇编指令实现对该路径的抽象;
所述处理规则为:指令的操作符保持不变,操作数抽象为其类型标识。
2.根据权利要求1所述的一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,步骤S3中,约减最短路径胎记的相似性采用模糊哈希算法计算。
3.根据权利要求1所述的一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,步骤S1中具体还包括:移除琐碎函数;
所述移除琐碎函数的步骤包括:分析每个函数的BODY中的指令数量,仅当指令数量高于预设阈值时,将该函数以<ID,CFG>的形式,加入到原告程序待分析函数表或被告程序待分析函数表中。
4.根据权利要求1所述的一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,步骤S3中,约减最短路径胎记间相似性计算方法为:
将原告待分析函数表中的某函数f的约减最短路径胎记记为RSPB(f),将被告待分析函数表中的某函数g的约减最短路径胎记记为RSPB(g);
首先,利用模糊哈希算法,计算两约减最短路径胎记的所有路径之间的相似性;
然后,将RSPB(f)中的每条路径,对应于RSPB(g)中与之相似性最高的路径,计算获得这些最高相似值的均值,将所述均值作为两约减最短路径胎记的相似性;
函数相似性矩阵的生成方法具体包括:任意两函数的相似性,通过衡量它们的约减最短路径胎记的相似性得到,即sim(f,g)=sim(RSPB(f),RSPB(g));迭代比较原告待分析函数表中每个函数与被告待分析函数表中每个函数,生成函数相似性矩阵。
5.根据权利要求1所述的一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,步骤S4中,还包括:依据相似性对原告程序待分析函数表和被告程序待分析函数表中的函数进行分组;
函数分组方法具体包括:
首先,基于生成的函数相似性矩阵,为原告待分析函数表中的每个函数,从被告待分析函数表中选择与之最相似的前k个函数,作为其可疑匹配对象集;
然后,迭代执行以下过程实现函数分组,具体包括:
1)选取原告待分析函数表中的任一函数f构成分组G={f},更新分组G的可疑匹配对象集为sus(G)=sus(f),其中sus(f)表示f的可疑匹配对象集;
2)判断原告待分析函数表中是否存在其他函数与G的可疑匹配对象集存在交集;将存在交集的函数并入分组G,并更新此时分组G的可疑匹配对象集;直到不存在函数与分组G的可疑匹配对象集存在交集,形成一个有效分组;
3)将步骤2)获得的有效分组中的函数从原告待分析函数表中移除,从被告待分析函数表中移除所有出现在有效分组的可疑匹配对象集中的函数;
4)重复步骤1)至步骤3),迭代处理至分组完成,获得若干个有效分组。
6.根据权利要求5所述的一种基于约减最短路径胎记的软件抄袭检测方法,其特征在于,步骤S4中,生成函数映射表的步骤包括:
将划分得到的有效分组及其可疑匹配对象集中的函数视作二分图中的节点,有效分组及其可疑匹配对象集中函数之间的相似性视作二分图中边的权重,应用最大带权二分图匹配算法求得匹配方案;基于所述匹配方案下节点间的对应关系以及预设可调节阈值,生成该有效分组的函数映射表;
按照上述方法对每个有效分组进行处理,获得每个有效分组的函数映射表;汇总全部有效分组的函数映射表,生成原告程序到被告程序的函数映射表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910318246.6A CN110083534B (zh) | 2019-04-19 | 2019-04-19 | 一种基于约减最短路径胎记的软件抄袭检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910318246.6A CN110083534B (zh) | 2019-04-19 | 2019-04-19 | 一种基于约减最短路径胎记的软件抄袭检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110083534A CN110083534A (zh) | 2019-08-02 |
CN110083534B true CN110083534B (zh) | 2023-03-31 |
Family
ID=67415623
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910318246.6A Active CN110083534B (zh) | 2019-04-19 | 2019-04-19 | 一种基于约减最短路径胎记的软件抄袭检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110083534B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113901457A (zh) * | 2020-06-22 | 2022-01-07 | 深信服科技股份有限公司 | 一种恶意软件识别的方法、系统、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870721A (zh) * | 2014-03-04 | 2014-06-18 | 西安交通大学 | 基于线程切片胎记的多线程软件抄袭检测方法 |
CN105868108A (zh) * | 2016-03-28 | 2016-08-17 | 中国科学院信息工程研究所 | 基于神经网络的指令集无关的二进制代码相似性检测方法 |
CN108399321A (zh) * | 2017-11-03 | 2018-08-14 | 西安邮电大学 | 基于动态指令依赖图胎记的软件局部抄袭检测方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170068816A1 (en) * | 2015-09-04 | 2017-03-09 | University Of Delaware | Malware analysis and detection using graph-based characterization and machine learning |
CN107229563B (zh) * | 2016-03-25 | 2020-07-10 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
CN107967152B (zh) * | 2017-12-12 | 2020-06-19 | 西安交通大学 | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 |
CN109241706B (zh) * | 2018-01-16 | 2021-04-30 | 西安邮电大学 | 基于静态胎记的软件抄袭检测方法 |
-
2019
- 2019-04-19 CN CN201910318246.6A patent/CN110083534B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870721A (zh) * | 2014-03-04 | 2014-06-18 | 西安交通大学 | 基于线程切片胎记的多线程软件抄袭检测方法 |
CN105868108A (zh) * | 2016-03-28 | 2016-08-17 | 中国科学院信息工程研究所 | 基于神经网络的指令集无关的二进制代码相似性检测方法 |
CN108399321A (zh) * | 2017-11-03 | 2018-08-14 | 西安邮电大学 | 基于动态指令依赖图胎记的软件局部抄袭检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110083534A (zh) | 2019-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10303874B2 (en) | Malicious code detection method based on community structure analysis | |
US10558805B2 (en) | Method for detecting malware within a linux platform | |
CN111639337B (zh) | 一种面向海量Windows软件的未知恶意代码检测方法及系统 | |
CN107967152B (zh) | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 | |
CN106384050B (zh) | 一种基于最大频繁子图挖掘的动态污点分析方法 | |
CN110135157A (zh) | 恶意软件同源性分析方法、系统、电子设备及存储介质 | |
CN109543410B (zh) | 一种基于语义映射关联的恶意代码检测方法 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN106803039A (zh) | 一种恶意文件的同源判定方法及装置 | |
CN103679034B (zh) | 一种基于本体的计算机病毒分析系统及其特征提取方法 | |
CN108399321B (zh) | 基于动态指令依赖图胎记的软件局部抄袭检测方法 | |
Liu et al. | Functions-based CFG embedding for malware homology analysis | |
CN110968564A (zh) | 一种数据处理方法及数据状态预测模型的训练方法 | |
CN110083534B (zh) | 一种基于约减最短路径胎记的软件抄袭检测方法 | |
CN106844736B (zh) | 基于时空网络的时空同现模式挖掘方法 | |
CN103279414A (zh) | 一种适用于Xen虚拟化平台的隐蔽通道检测方法 | |
CN113536308B (zh) | 软件基因视角下多粒度信息融合的二进制代码溯源方法 | |
CN111090859B (zh) | 一种基于图编辑距离的恶意软件检测方法 | |
CN116015939A (zh) | 一种基于原子技术模板的高级持续威胁解释方法 | |
Zhu et al. | A firmware code gene extraction technology for IoT terminal | |
CN111562943B (zh) | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 | |
Lagerström et al. | Automatic design of secure enterprise architecture: Work in progress paper | |
Wijitrisnanto et al. | Efficient machine learning model for hardware Trojan detection on register transfer level | |
Shuai et al. | Software vulnerability detection based on code coverage and test cost | |
Harman et al. | GI4GI: Improving genetic improvement fitness functions |
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 |