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.基于动态指令依赖图胎记的软件局部抄袭检测方法,其特征在于,包括以下步骤: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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。