基于动态关键指令序列胎记的软件抄袭检测方法

文档序号:6513549阅读:286来源:国知局
基于动态关键指令序列胎记的软件抄袭检测方法
【专利摘要】本发明提出了一种基于动态关键指令序列胎记的软件抄袭检测方法,包括:1)基于动态插桩对待分析的程序进行监控,结合动态污点分析,实时地对关键指令进行识别和记录;2)对记录的关键指令序列进行预处理,剥离操作数,抽取助记符序列;3)在此基础之上为待检测的两个软件分别生成其动态关键指令序列胎记;4)计算胎记的相似性;5)通过胎记相似性的均值及给定的阈值,做出抄袭与否的决策。该方法直接针对二进制代码,无需源码存在,更具有现实意义;检测手段不依赖于特定平台或编程语言,具有更广阔的应用范围;对于语义保留的代码混淆技术具有很好的抵抗力,提高了对深度抄袭的检测能力。
【专利说明】基于动态关键指令序列胎记的软件抄袭检测方法
【技术领域】:
[0001]本发明涉及程序特征发现及软件抄袭检测领域,特别涉及一种基于动态软件胎记的抄袭检测方法。
【背景技术】:
[0002]自由或开源软件项目允许用户在遵守License的情况下使用、修改或者发布软件,比如GPL公共许可作为最广泛使用的自由软件的许可,它允许用户可以自由的修改软件,但要求基于GPL程序的演绎作品也要服从GPL,比如gcc及Linux核心都遵从GPL。这一方面促进了软件工业的大力发展。另一方面一些公司为了自身利益,违背软件的许可而私自的将开源软件的代码集成到自己的商业产品中;当然还存在一些公司,特别是大公司,它们经常接收来自上游公司的一些软件组件以集成到自己项目中,而这些组件通常是以二进制代码的形式提交的,很难保证其中不包含第三方代码。这在很大程度上对大公司的利益构成了威胁,经常看到软件侵权事件的发生。由于很多软件开发人员的代码保护意识不强,行业道德参差不齐,再加上越来越强大的自动化代码混淆工具的出现,使得软件抄袭的现象越来越严重;同时很多情况下特别是商业软件都是以二进制形式发布的,通常无法获取源码的,这使得软件抄袭的检测更加困难,也使得抄袭现象更加猖獗。
[0003]为此人们提出了一系列手段防止及检测软件抄袭。其中软件水印是出现比较早的一种抄袭检测技术,它通过在软件发布之前在其中植入特定的水印标记,这种标记很容易验证但较难被破坏,尽管它不能防止软件抄袭,但在对抄袭软件提起法律诉讼的时候可以作为有力证据,不过Collberg等人认为“一个有决心的攻击者始终能够破坏任何的水印”。因为采用水印的话需要植入额外的代码,所以很多开发人员并不使用水印,而是采用代码混淆技术,使得代码晦涩难懂。然而代码混淆仅仅能防止其他人员难以理解程序的逻辑,无法阻止抄袭人员实现完成的拷贝,而且抄袭人员可以反过来利用混淆技术对代码进行进一步的混淆,以躲避抄袭的嫌疑,毕竟现在自动化源码及二进制代码的混淆工具变得越来越强大。
[0004]最近人们提出基于软件胎记的抄袭检测技术,软件胎记是能够反映程序固有属性的可以唯一标识程序的特征,相关的研究都是通过将抄袭检测转换为两个程序的相似性分析问题,并基于胎记的相似性计算来衡量程序的相似性,关键技术主要涉及到高质量的软件胎记的提取及其相似性计算过程。根据其胎记生成方式,可以分为静态及动态两种。前者主要是基于程序的语法特性而非语义特性,很容易遭受语义保留混淆技术的蒙骗;动态软件胎记则是在程序执行过程中提取出来的,它依赖于程序的运行时行为,反映了程序对输入的处理方式,更多程度上是程序语义的反映。尽管现有研究在一定程度上解决了抄袭检测的问题,但还存在一系列的局限性:1)大部分已有的软件胎记难以应付深度的代码混淆技术;2)很多方法是基于源代码的,而在无确凿证据之前,通常只能获取可疑程序的二进制代码;3)大部分的软件胎记依赖于特定的操作系统或者编程语言,适用范围较小。
[0005]因此针对以上问题,需要找到一种更好的检测软件抄袭的方法。它应当能够直接操作二进制程序,不依赖于特定平台、系统或编程语言,同时对当下流行的各种自动化代码混淆工具具有很高的抵抗能力。

【发明内容】
:
[0006]本发明主要目的在于提出一种基于动态关键指令序列胎记的软件抄袭检测方法,以克服上述当前基于胎记的抄袭检测手段的局限性。
[0007]本发明的目的通过以下技术方案实现:
[0008]基于动态关键指令序列胎记的软件抄袭检测方法,包括如下步骤:
[0009]I)基于动态插桩技术,对待分析程序实施运行时监控;同时结合数据流分析,进行动态关键指令的识别和记录,生成动态关键指令序列;
[0010]2)对抽取的动态关键指令序列进行预处理,剥离操作数,生成助记符序列;
[0011]3)基于助记符序列,利用k-gram算法,分别为待分析的第一程序及第二程序生成动态关键指令序列胎记;
[0012]4)进行第一程序及第二程序胎记相似性的计算;
[0013]5)依据多次输入下生成的胎记相似性的均值,及给定的阈值判断是否抄袭。
[0014]本发明进一步的改进在于:所述步骤I)中动态关键指令定义及识别原则为:令trace (P, I)表示程序p在输入I下的一条执行trace,对于该trace中的任一条汇编指令ins,当满足如下两个条件时,认为ins是程序p在输入I下的一条关键指令,即a) ins属于值更新指令b) ins属于输入关联指令。
[0015]本发明进一步的改进在于:所述步骤I)中监控实施方法为:针对二进制的待分析程序,使用动态插桩技术,在待分析程序的每条指令执行之前植入相应的分析代码,实现运行时监控,捕获指令级执行信息。
[0016]本发明进一步的改进在于:所述步骤I)中关键指令序列生成方法为:通过指令级的运行时监控,捕获每一条待执行的汇编指令,分析该指令的类型,是否为值更新指令;同时结合动态污点分析技术,通过污点源的识别及污点信息的传播扩散,辅助识别输入关联指令;最后根据分析结果,对关键指令进行记录,将其加入动态关键指令序列,否则不进行记录。
[0017]本发明进一步的改进在于:所述步骤I)具体包括以下步骤:
[0018]步骤S201:判断是否还存在待执行的指令,如果有则跳至步骤S202,否则直接转入步骤S208 ;
[0019]步骤S202:对于待分析的指令,解析指令类型,判断其是否为污点传播指令,如果是则转入步骤S203,否则转入步骤S204 ;
[0020]步骤S203:依据预定义的污点传播规则,进行污点数据的扩散传播;
[0021]步骤S204:对指令进行解析,据其操作符判断是否为值更新指令;如果是则转入步骤S205,不是则转入步骤S207 ;
[0022]步骤S205:根据污点的扩散状态,识别该指令是否为输入关联指令;如果为输入关联指令则转入步骤S206,否则转入步骤S207 ;
[0023]步骤S206:识别出该指令为关键指令,并将之加入动态关键指令序列中;
[0024]步骤S207:执行该指令,并转入步骤S201进行下一轮的分析;[0025]步骤S208:输出动态关键指令序列。
[0026]本发明进一步的改进在于:所述步骤2)中指令序列预处理方法为:对抽取的关键指令序列中的每条汇编指令,解析其语法结构,剥离其操作数,保留其助记符,生成相应的助记符序列。
[0027]本发明进一步的改进在于:所述步骤2)具体包括以下步骤:
[0028]步骤S301:判断抽取的动态关键指令序列中是否还存在待处理的指令,如果存在则转入步骤S302,否则转入步骤S305 ;
[0029]步骤S302:从动态关键指令序列中按次序取出一条指令,依据指令格式对其进行解析; [0030]步骤S303:依据解析结果,识别并剥离指令的操作数,保留指令助记符;
[0031]步骤S304:将指令助记符加入助记符序列的末尾;再转入步骤S301进行下一轮分析;
[0032]步骤S305:输出生成的助记符序列,以进一步生成软件胎记。
[0033]本发明进一步的改进在于:所述步骤3)中动态关键指令序列胎记生成方法为:令s (P, I) Mins1, ins2,…,insn为程序p在输入I下抽取得到的一条关键指令序列,t(p,I)=〈ei,e2,…,en>表示与s(p,I)对应的助记符序列,即对于其中每个元素ei;都有efmnemonicOf Qnsi);对t (p, I)应用k-gram算法得到一个长度为k子序列的集合Set (P, D = Igj I gj=(ej, e」,…,e^)}, j e {I, 2,…,η-k+l};然后统计独有的k-gram的个数及其频率,最终生成一个键值对集合
Birth1p(Ic) =gm e Set(p,I) and ^ml式^},其中 freq(g,J 表示 g,π 在集合
set (ρ, I)中出现的次数,则将称为程序P在输入I下的动态关键指令序列胎记;k=4 或 5 ο
[0034]本发明进一步的改进在于:所述步骤3)具体包括以下步骤:
[0035]步骤S401:判断未处理的子序列长度是否大于可调参数k的值,如果是则转入步骤S402,否则转入步骤S408 ;
[0036]步骤S402:利用k-gram算法,生成一个长度为k的助记符子序列;
[0037]步骤S403:顺序依次连接生成的长度为k的助记符子序列中的每个元素,生成一个字符串,计算其hash值并将之作为键值查找集合B (初始集合B为空)中是否已存在相应元素;如果存在则转入步骤S406,不存在则转入步骤S404 ;
[0038]步骤S404:创建一新的以该子序列的hash值为键的元素,并设置键值为I ;
[0039]步骤S405:将新生成的键值对元素加入集合B中,转入步骤S407 ;
[0040]步骤S406:依据hash键值在集合B中查找到该元素,并更新该元素的键值;
[0041]步骤S407:删除助记符序列的首元素,转入步骤S401开展下一轮的处理;
[0042]步骤S408:输出由键值对构成的集合B,即动态关键指令序列胎记。
[0043]本发明进一步的改进在于:所述步骤4)中选用cosine距离衡量第一程序及第二程序胎记的相似性,首先从二者胎记中构造长度相等的两个特征向量,然后计算它们的cosine值作为相似性的值。
[0044]本发明进一步的改进在于:所述步骤5)中抄袭决策模块将多次输入下得到的第一程序及第二程序胎记相似性的值作为输入,计算其均值相似性作为程序的相似性;并依据输入的可调节阈值ε做出抄袭与否的判断,输出检测结果。
[0045]本发明进一步的改进在于:步骤5)中阈值ε的取值范围为0.2-0.3 ;
[0046]
【权利要求】
1.基于动态关键指令序列胎记的软件抄袭检测方法,其特征在于,包括如下步骤: 1)基于动态插桩技术,对待分析程序实施运行时监控;同时结合数据流分析,进行动态关键指令的识别和记录,生成动态关键指令序列; 2)对抽取的动态关键指令序列进行预处理,剥离操作数,生成助记符序列; 3)基于助记符序列,利用k-gram算法,分别为待分析的第一程序及第二程序生成动态关键指令序列胎记; 4)进行第一程序及第二程序胎记相似性的计算; 5)依据多次输入下生成的胎记相似性的均值,及给定的阈值判断是否抄袭。
2.根据权利要求1所述的方法,其特征在于,所述步骤I)中动态关键指令定义及识别原则为:令trace (P, I)表示程序p在输入I下的一条执行trace,对于该trace中的任一条汇编指令ins,当满足如下两个条件时,认为ins是程序P在输入I下的一条关键指令,即a) ins属于值更新指令b) ins属于输入关联指令。
3.根据权利要求1所述的方法,其特征在于,所述步骤I)中监控实施方法为:针对二进制的待分析程序,使用动态插桩技术,在待分析程序的每条指令执行之前植入相应的分析代码,实现运行时监控,捕获指令级执行信息。
4.根据权利要求1所述的方法,其特征在于,所述步骤I)中关键指令序列生成方法为:通过指令级的运行时监控,捕获每一条待执行的汇编指令,分析该指令的类型,是否为值更新指令;同时结合动态污点分析技术,通过污点源的识别及污点信息的传播扩散,辅助识别输入关联指令;最后根据分析结果,对关键指令进行记录,将其加入动态关键指令序列,否则不进行记录。`
5.根据权利要求1所述的方法,其特征在于,所述步骤I)具体包括以下步骤: 步骤S201:判断是否还存在待执行的指令,如果有则跳至步骤S202,否则直接转入步骤 S208 ; 步骤S202:对于待分析的指令,解析指令类型,判断其是否为污点传播指令,如果是则转入步骤S203,否则转入步骤S204 ; 步骤S203:依据预定义的污点传播规则,进行污点数据的扩散传播; 步骤S204:对指令进行解析,据其操作符判断是否为值更新指令;如果是则转入步骤S205,不是则转入步骤S207 ; 步骤S205:根据污点的扩散状态,识别该指令是否为输入关联指令;如果为输入关联指令则转入步骤S206,否则转入步骤S207 ; 步骤S206:识别出该指令为关键指令,并将之加入动态关键指令序列中; 步骤S207:执行该指令,并转入步骤S201进行下一轮的分析; 步骤S208:输出动态关键指令序列。
6.根据权利要求1所述的方法,其特征在于,所述步骤2)中指令序列预处理方法为:对抽取的关键指令序列中的每条汇编指令,解析其语法结构,剥离其操作数,保留其助记符,生成相应的助记符序列。
7.根据权利要求1所述的方法,其特征在于,所述步骤3)中动态关键指令序列胎记生成方法为:令s (P, I) Mins1, ins2,…,insn>为程序p在输入I下抽取得到的一条关键指令序列,t (P, I) ^e1, e2,…,en>表示与s (p, I)对应的助记符序列,即对于其中每个元素ei;都有efmnemonicOf Qnsi);对t (p, I)应用k-gram算法得到一个长度为k子序列的集合Set (P, I) = {gj I gj= (e」,e」,…,e^)},j e {I, 2,…,n-k+1};然后统计独有的k-gram的个数及其频率,最终生成一个键值对集合
8.根据权利要求1所示的方法,其特征在于,所述步骤4)中选用cosine距离衡量第一程序及第二程序胎记的相似性,首先从二者胎记中构造长度相等的两个特征向量,然后计算它们的cosine值作为相似性的值。
9.根据权利要求1所示的方法,其特征在于,所述步骤5)中抄袭决策模块将多次输入下得到的第一程序及第二程序胎记相似性的值作为输入,计算其均值相似性作为程序的相似性;并依据输入的可调节阈值ε做出抄袭与否的判断,输出检测结果。
10.根据权利要求9所示的方法,其特征在于,步骤5)中阈值ε的取值范围为0.2—0.3 ;


【文档编号】G06F11/36GK103577323SQ201310449858
【公开日】2014年2月12日 申请日期:2013年9月27日 优先权日:2013年9月27日
【发明者】郑庆华, 田振洲, 刘烃, 范铭 申请人:西安交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1