基于动态指令依赖图胎记的软件局部抄袭检测方法技术

技术编号:18668476 阅读:54 留言:0更新日期:2018-08-14 20:41
本发明专利技术提出了一种基于动态指令依赖图胎记的软件局部抄袭检测方法,包括:1)利用动态插桩,对待分析程序进行指令级监控,捕获每个函数的指令轨迹;2)对记录每个函数的动态指令轨迹,开展数据依赖和控制依赖分析,构建动态指令依赖图胎记;3)计算指令依赖图胎记间的相似性,实现函数间相似性的度量;4)基于给定阈值,为原告程序中的每个函数构建可疑函数表;5)提取程序的静态函数调用图,在调用依赖关系引导下,进行可疑函数精准的一一配对;6)基于调用依赖关系,装配匹配的函数对生成抄袭证据图,度量涉嫌抄袭部分的比例。本发明专利技术通过构建函数级胎记,实现对局部抄袭的检测;本发明专利技术首次提出抄袭证据图的概念,可极大增强证据效力。

Software partial plagiarism detection method based on dynamic instruction dependency graph birthmark

A software local plagiarism detection method based on dynamic instruction dependence graph birthmark is proposed, which includes: 1) using dynamic stake insertion to monitor the analysis program at the instruction level and capture the instruction trajectory of each function; 2) recording the dynamic instruction trajectory of each function, analyzing the data dependency and control dependency, and constructing the software local plagiarism detection method. Dynamic instruction dependency graph birthmark; 3) Computing the similarity between instruction dependency graph birthmarks to measure the similarity between functions; 4) Constructing a suspicious function table for each function in the plaintiff program based on a given threshold; 5) Extracting the static function call graph of the program, guided by the call dependency relationship, to make a precise one of the suspicious functions. Based on the call dependency, the matched function pairs are assembled to generate the plagiarism evidence graph to measure the proportion of the suspected plagiarism parts. The invention realizes the detection of local plagiarism by constructing a functional birthmark, and puts forward the concept of plagiarism evidence map for the first time, which can greatly enhance the effectiveness of evidence.

【技术实现步骤摘要】
基于动态指令依赖图胎记的软件局部抄袭检测方法
本专利技术涉及软件动态行为分析及软件抄袭检测领域,特别涉及一种基于动态指令依赖图胎记的软件局部抄袭检测方法。
技术介绍
从无到有开发一款软件的时间和人力成本十分昂贵,因而项目开发过程中复用既有代码的情况十分常见。开源软件社区如GitHub、SourceForge以及社交编程网站如CodeShare等的蓬勃发展,带来了软件工业的繁荣。然而,伴随而来的软件抄袭问题亦日趋严重,滥用他人代码的情况屡见不鲜,由此导致的软件侵权案件频频发生。如“绿坝”软件被曝抄袭CyberSitter的大量代码,其不良图像过滤文件cximage.dll、CImage.dll和xcore.dll等也均包含大量OpenCV的代码;近期柚子科技的产品APICloud涉嫌抄袭数字天堂DCloud的大量代码陷入侵权案中,司法鉴定报告证实其不仅直接挪用了DCloud的dll文件,还抄袭了DCloud的真机运行、边改边看等功能的大量源码。在不计代价和开销的情况下,抄袭者可利用任何当下可行的手段、技术和资源达到抄袭的目的,使得研究实用的软件抄袭检测方法非常具有挑战性。软件胎记是从软件代码或执行过程中抽取出的一些不易改变且可唯一地对软件身份进行标识的特征;胎记技术通过衡量胎记的相似性判定软件间可能存在的抄袭。依据胎记生成方式,可以分为静态和动态两种。前者静态分析程序的代码,基于程序的词法、语法或结构特性生成胎记;后者则具体地执行软件,利用捕获的执行轨迹信息,或分析轨迹中各要素间的控制和数据依赖关系等构建胎记,能更贴切地刻画软件的行为和语义。尽管现有方法在一定程度上解决了抄袭检测的问题,但还存在一系列的局限性,包括:1)很多方法只能应用于源码存在的情形,很多情况下程序源码是无法获取的,特别是商业软件的抄袭,为躲避检测通常以可执行文件的形式发布。除非司法机关介入,被告往往不会轻易交出其源码,而且在法律诉讼中,被告可以以举证责任在原告为由拖延或拒不交出源码。2)为增加检测难度,抄袭者往往会借助当下众多自动化的代码混淆/迷乱技术和工具,在保证程序语义不变的前提下,通过改变程序控制结构、引入垃圾代码、调整代码布局等混淆方式,轻易地生成与原程序看起来非常不一样的代码。特别地,除非可事先对软件进行脱壳处理,加壳混淆方式会有效地挫败基于静态分析的检测方法。总体而言,现有方法对抗复杂代码混淆的能力依然较弱。3)被告软件(抄袭方)对原告软件(被抄袭方)的抄袭可简单归纳为两种形式,一是将原告的所有代码挪为己用,即整体抄袭;二是仅挪用原告的部分代码,即局部抄袭,如APICloud侵权案中,被告只挪用了DCloud的代码提示、真机运行、边改边看等功能模块。而现有胎记技术主要对程序的整体行为和语义进行建模,仅给出原被告软件的整体相似性或抄袭与否的判定。然而,现实中更普遍的情况是局部抄袭,被告可能是挪用了原告的几个功能模块,也可能是仅仅的几个核心函数。因而,简单输出原被告的相似性意义不大,更重要的是要准确度量出抄袭的比例,找准涉嫌抄袭部分在原被告软件中的对应关系,并向用户提供表达和解释力更强、甚至具备一定证据效力的局部抄袭检测结果的组织和呈现方式。因此针对上述问题,需研究一种更好的检测软件抄袭的方法。它应当能够直接作用于二进制目标程序,可对抗当下主流的自动化代码混淆技术,特别是要有效支持软件局部抄袭的检测。
技术实现思路
本专利技术的目的在于提出一种基于动态指令依赖图胎记的软件局部抄袭检测方法,以克服上述当前基于胎记的抄袭检测手段的局限性。为了实现上述目的,本专利技术采用以下技术方案:基于动态指令依赖图胎记的软件局部抄袭检测方法,包括如下步骤:S101)利用动态插桩,对待分析原告程序和被告程序均进行指令级的运行时监控,实时捕获并记录每个函数的动态指令轨迹;S102)对记录的每个函数的动态指令轨迹,进行数据依赖和控制依赖分析,构建动态指令依赖图胎记,作为该函数行为和语义的表征;S103)通过衡量被告程序的某函数与原告程序的某函数的指令依赖图胎记的相似性,实现函数间相似性的计算;S104)为原告程序中的每个函数,从被告程序中筛选出所有与之存在高度相似性的函数,形成可疑函数表;S105)提取原告和被告程序的静态调用依赖图,在函数调用依赖关系引导下,进行可疑函数精准的一一配对;S106)基于调用依赖关系,装配匹配的函数对生成抄袭证据图,度量涉嫌抄袭部分的比例,将捕捉了涉嫌抄袭部分对应关系的证据图和涉嫌抄袭部分的比例值作为局部抄袭检测的结果输出。本专利技术进一步的改进在于:步骤S101)中每个函数的动态指令轨迹的捕获和记录方式为:利用动态插桩技术,在待监控二进制目标程序的每条指令执行之前植入分析代码,获取每条指令所在函数的ID,实时解析出该指令的汇编表示形式,连同指令地址一并追加到该函数ID标识的指令序列末尾;并以(函数ID,trace)的形式记录每个函数的动态指令轨迹,其中trace=<ins1,ins2,…,insn>代表指令序列,i=1、2、3……n;n为指令序列的长度;insi表示具体的指令,insi.text为指令的汇编表示,insi.location为指令的地址。本专利技术进一步的改进在于:所述步骤S102)中函数的动态指令依赖图胎记生成方法为:令f为待分析程序中的某函数,对其动态指令轨迹开展数据和控制依赖分析,构建有向图IDG(f)={V,E},其中V是节点的集合,E是边的集合;每个节点vi∈V对应指令轨迹中的具体指令,并由指令的汇编形式和指令地址唯一标识,即在指令轨迹中至少存在一条指令insi与之对应,且节点vi由insi.text#insi.location进行标识;每条边ei∈E表示其关联的两指令间存在动态数据依赖或控制依赖关系,边的方向刻画了依赖的方向,边的标签刻画了该依赖出现的次数,即对于轨迹中的两条指令insi和insj如满足如下任一条件,则该两指令间存在动态数据依赖或控制依赖关系:a)insj访问了insi的目的操作数,且insj与insi间不存在其他指令对insi的目的操作数进行写操作,即有insj动态数据依赖于insi;b)insi为某种类型的控制跳转指令,该次执行中insj所在分支被执行,且insj与insi间不存在其他的控制跳转指令,即有insj动态控制依赖于insi,则添加一条insi对应节点到insj对应节点的有向边,或边已存在则更新边的标签值;将依此生成的有向图IDG(f)称作该函数的动态指令依赖图胎记。本专利技术进一步的改进在于:所述步骤S103)中函数间相似性计算方法为:通过计算函数的指令依赖图胎记的相似性,度量函数的相似性;即对于原告程序中某函数f和被告程序中某函数g,二者相似性为sim(f,g)=sim(IDG(f),IDG(g))。本专利技术进一步的改进在于:所述步骤S103)中指令依赖图胎记的相似性计算方法为:将指令依赖图视作一般的复杂网络,借助重启随机游走算法(RandomWalkwithRestart,RWR)将之转换成向量形式,然后计算向量间的cosine距离,作为指令依赖图胎记的相似性。本专利技术进一步的改进在于:所述步骤S104)中为原告程序中函数构建可疑函数表的方法为:本文档来自技高网
...

【技术保护点】
1.基于动态指令依赖图胎记的软件局部抄袭检测方法,其特征在于,包括以下步骤:S101)利用动态插桩,对待分析原告程序和被告程序均进行指令级的运行时监控,实时捕获并记录每个函数的动态指令轨迹;S102)对记录的每个函数的动态指令轨迹,进行数据依赖和控制依赖分析,构建动态指令依赖图胎记,作为该函数行为和语义的表征;S103)通过衡量被告程序的某函数与原告程序的某函数的指令依赖图胎记的相似性,实现函数间相似性的计算;S104)为原告程序中的每个函数,从被告程序中筛选出所有与之存在高度相似性的函数,形成可疑函数表;S105)提取原告和被告程序的静态调用依赖图,在函数调用依赖关系引导下,进行可疑函数精准的一一配对;S106)装配匹配的函数对生成抄袭证据图,度量涉嫌抄袭部分的比例,将捕捉了涉嫌抄袭部分对应关系的证据图和涉嫌抄袭部分的比例值作为局部抄袭检测的结果输出。

【技术特征摘要】
1.基于动态指令依赖图胎记的软件局部抄袭检测方法,其特征在于,包括以下步骤:S101)利用动态插桩,对待分析原告程序和被告程序均进行指令级的运行时监控,实时捕获并记录每个函数的动态指令轨迹;S102)对记录的每个函数的动态指令轨迹,进行数据依赖和控制依赖分析,构建动态指令依赖图胎记,作为该函数行为和语义的表征;S103)通过衡量被告程序的某函数与原告程序的某函数的指令依赖图胎记的相似性,实现函数间相似性的计算;S104)为原告程序中的每个函数,从被告程序中筛选出所有与之存在高度相似性的函数,形成可疑函数表;S105)提取原告和被告程序的静态调用依赖图,在函数调用依赖关系引导下,进行可疑函数精准的一一配对;S106)装配匹配的函数对生成抄袭证据图,度量涉嫌抄袭部分的比例,将捕捉了涉嫌抄袭部分对应关系的证据图和涉嫌抄袭部分的比例值作为局部抄袭检测的结果输出。2.根据权利要求1所述的方法,其特征在于,步骤S101)中每个函数的动态指令轨迹的捕获和记录方式为:利用动态插桩技术,在待监控二进制目标程序的每条指令执行之前植入分析代码,获取每条指令所在函数的ID,实时解析出该指令的汇编表示形式,连同指令地址一并追加到该函数ID标识的指令序列末尾;并以(函数ID,trace)的形式记录每个函数的动态指令轨迹,其中trace=<ins1,ins2,…,insn>代表指令序列,i=1、2、3……n;n为指令序列的长度;insi表示具体的指令,insi.text为指令的汇编表示,insi.location为指令的地址。3.根据权利要求1所述的方法,其特征在于,步骤S102)中函数的动态指令依赖图胎记生成方法为:令f为待分析程序中的某函数,对其动态指令轨迹开展数据和控制依赖分析,构建有向图IDG(f)={V,E},其中V是节点的集合,E是边的集合;每个节点vi∈V对应指令轨迹中的具体指令,并由指令的汇编形式和指令地址唯一标识,即在指令轨迹中至少存在一条指令insi与之对应,且节点vi由insi.text#insi.location进行标识;每条边ei∈E表示其关联的两指令间存在动态数据依赖或控制依赖关系,边的方向刻画了依赖的方向,边的标签刻画了该依赖出现的次数;对于轨迹中的两条指令insi和insj如满足如下任一条件,则该两指令间存在动态数据依赖或控制依赖关系:a)insj访问了insi的目的操作数,且insj与insi间不存在其他指令对insi的目的操作数进行写操作,即有insj动态数据依赖于insi;b)insi为某种类型的控制跳转指令,该次执行中insj所在分支被执行,且insj与insi间不存在其他的控制跳转指令,即有insj动态控制依赖于insi,则添加一条insi对应节点到i...

【专利技术属性】
技术研发人员:田振洲王忠民陈彦萍张恒山夏虹刘烃郑庆华
申请(专利权)人:西安邮电大学
类型:发明
国别省市:陕西,61

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

1