CN103870721B - 基于线程切片胎记的多线程软件抄袭检测方法 - Google Patents

基于线程切片胎记的多线程软件抄袭检测方法 Download PDF

Info

Publication number
CN103870721B
CN103870721B CN201410076931.XA CN201410076931A CN103870721B CN 103870721 B CN103870721 B CN 103870721B CN 201410076931 A CN201410076931 A CN 201410076931A CN 103870721 B CN103870721 B CN 103870721B
Authority
CN
China
Prior art keywords
birthmark
thread
program
similarity
section
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
CN201410076931.XA
Other languages
English (en)
Other versions
CN103870721A (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.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong 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 Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN201410076931.XA priority Critical patent/CN103870721B/zh
Priority to PCT/CN2014/076079 priority patent/WO2015131434A1/zh
Priority to US14/759,642 priority patent/US9652601B2/en
Publication of CN103870721A publication Critical patent/CN103870721A/zh
Application granted granted Critical
Publication of CN103870721B publication Critical patent/CN103870721B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Debugging And Monitoring (AREA)
  • Investigating Or Analysing Biological Materials (AREA)
  • Complex Calculations (AREA)

Abstract

本发明提出了一种基于线程切片胎记的多线程软件抄袭检测方法,包括:1)基于动态插桩技术对待分析的目标程序实施运行时监控,实时地识别系统调用,并记录与之相关的线程ID、系统调用号、返回值等相关信息,然后对其进行预处理得到有效系统调用序列Trace;2)基于线程ID对Trace进行线程切片,生成一系列由线程ID标识的线程切片Slice;3)在此基础之上为待检测的两个软件的所有线程切片分别生成其线程切片胎记Birth;4)基于两个待检测多线程程序的所有线程切片胎记,分别生成其软件胎记PB1和PB2;5)基于最大双边图匹配,计算软件胎记PB1与PB2的最大相似性;6)通过胎记相似性的均值及给定的阈值,做出抄袭与否的决策。该方法直接作用于二进制代码,无需源码存在。

Description

基于线程切片胎记的多线程软件抄袭检测方法
技术领域:
本发明涉及程序特征发现及软件抄袭检测领域,特别涉及一种针对多线程程序的抄袭检测方法。
背景技术:
由于各种物理瓶颈(如高温、功耗、漏电等),CPU时钟速度的提升面临越来越大的挑战,近几年CPU厂商已将重点转向超线程与多核技术以提高CPU性能。随着超线程与多核技术成为当今CPU的标准配置,串行程序已经难以发挥现有CPU的计算能力,作为并行计算最常用的实现方式,多线程程序成为发挥CPU性能、提高系统效率的重要途径。
然而多线程程序的知识产权保护问题随着软件的快速发展而日益严重,例如三星和苹果公司的手机应用抄袭法律纠纷问题,这样的软件侵权事件经常发生,它们在很大程度上对大公司的利益构成了威胁,使多线程程序抄袭成为软件工业健康发展的严重阻碍。
为此人们提出了一系列手段防止及检测软件抄袭,其中基于软件胎记的抄袭检测技术是目前常用的方法。软件胎记是能够反映程序固有属性的可以唯一标识程序的特征,相关的研究都是通过将抄袭检测转换为两个程序的相似性分析问题,并基于胎记的相似性计算来衡量程序的相似性,其关键技术主要涉及到高质量的软件胎记的提取及其相似性计算过程。
然而现有的软件胎记主要针对的是单线程的程序,采用程序执行一次的所获取的关键信息作为软件的胎记,并没有考虑多线程程序在执行过程中线程交织的情况。多线程程序在相同输入条件下,执行过程中存在不同的线程交织,导致程序执行过程中的程序行为,如系统调用序列等,产生一定的差异性,这种情况使得传统基于胎记的抄袭检测方法在分析多线程程序时存在很大的随机性。此外,目前的抄袭检测方法还存在一系列的局限性:1)大部分方法是针对源代码的,而进行抄袭检测时往往无法获得检测对象的源代码,只能获取检测对象的二进制代码;2)现有的软件胎记对特定的操作系统或者编程语言依赖性较强,适用范围较小;3)大部分已有的软件胎记难以应付多种多样和深度的代码混淆技术。
发明内容:
本发明的目的在于提出一种基于线程切片胎记的多线程软件抄袭检测方法,以克服上述当前基于胎记的抄袭检测手段的局限性。本发明方法能够直接针对二进制代码,无需源代码存在,具有更现实的意义;针对多线程程序具有很好的检测能力,能够减小由于线程调度产生的随机性影响,不局限于单线程程序;检测手段不依赖于特定的编程语言,具有更广阔的应用范围;对于语义保留的代码混淆技术具有很好的抵抗力,提高对深度抄袭的检测能力。
本发明的目的通过以下技术方案实现:
基于线程切片胎记的多线程软件抄袭检测方法,包括如下步骤:
1)基于动态插桩技术,对待分析目标程序实施运行时监控,实时地识别待分析目标程序中系统调用函数,并记录与之相关的线程ID、调用地址、系统调用号、函数名、参数、返回值的相关信息,然后对其进行预处理,去除无效的系统调用,得到有效的系统调用序列Trace;
2)基于线程ID对有效的系统调用序列Trace进行线程切片,生成一系列由线程ID标识的线程切片Slice;
3)基于线程切片,通过提取线程切片中的固定子序列并记录其出现次数,分别为待分析的第一程序P1及第二程序P2的所有线程切片生成其动态线程切片胎记Birth,其中第一程序指的是程序所有者开发的原始程序,第二程序指被认为抄袭了原始程序的可疑程序;
4)基于多线程程序所有的线程切片胎记分别为P1和P2生成相应的软件胎记PB1和PB2
5)基于最大双边图匹配,计算软件胎记PB1与PB2的最大相似性,首先针对软件胎记PB1内部的每一个线程切片胎记,计算其与胎记PB2内部每一个线程切片胎记的相似性;然后基于带权双边图匹配算法生成PB1与PB2的最大相似性匹配方案MaxMatch(PB1,PB2);最后基于最大相似性匹配方案,计算PB1与PB2的胎记相似性Sim(PB1,PB2);
6)依据多次输入下生成的胎记相似性的均值,及给定的阈值判断是否抄袭。
本发明进一步的改进在于:所述步骤1)中动态系统调用识别原则为:若当前执行函数名与操作系统系统调用列表中一个系统调用函数名匹配,则将该执行函数识别为系统调用函数。
本发明进一步的改进在于:所述步骤1)中监控实施方法为:针对二进制的待分析程序,使用动态插桩技术,在待分析程序的函数执行之前以及执行之后植入相应的分析代码,以实现运行时监控。
本发明进一步的改进在于:所述步骤1)中系统调用序列生成方法为:通过函数级的运行时监控,捕获每一个待执行的函数,分析该函数的类型,通过匹配当前操作系统的系统调用列表,根据匹配结果判断该函数是否为系统调用函数;同时结合系统调用所在线程ID,对每一个执行的系统调用的所在线程ID进行记录;并且捕获与该系统调用相关的调用参数以及返回值相关信息;最后根据分析结果,对系统调用进行记录并将其加入动态系统调用序列;每条系统调用的记录格式为:线程ID#调用地址#系统调用号#函数名#参数#返回值。
本发明进一步的改进在于:所述步骤1)中对记录的系统调用序列进行预处理,去除无效的系统调用,得到有效的系统调用序列:对抽取的系统调用序列中的每条系统调用项,解析其格式,判断其返回值,若返回值为非零则表示系统调用执行失败,则删除该条系统调用。
令Trace(p,I)=〈e1,e2,...,en〉,表示程序p在输入I下抽取,经预处理得到的一条有效的系统调用序列,其中ei包含一条系统调用的系统调用号以及它所在的线程ID。
本发明进一步的改进在于:所述步骤1)具体包括以下步骤:
步骤S201:判断待分析程序是否还存在待执行的函数,如果有则跳至步骤S202,否则直接转入步骤S208;
步骤S202:对于待分析的函数,解析函数类型,判断其是否为系统调用函数,如果是则转入步骤S203,否则转入步骤S207;
步骤S203:对系统调用函数进行解析,获取其线程ID、调用地址、系统调用号、函数名、参数、返回值的相关信息;
步骤S204:判断函数的返回值是否为-1,若是,则转入步骤S201,否则转入步骤S205;
步骤S205:获取其所在的线程ID信息;
步骤S206:将获取的系统调用函数添加至系统调用序列;
步骤S207:执行该系统调用函数,并转入步骤S201进行下一轮的分析;
步骤S208:输出系统调用序列;
本发明进一步的改进在于:所述步骤2)中线程切片生成方法为:基于有效的运行时系统调用序列,针对序列中每一个系统调用,剥离其线程ID,保留其系统调用号,根据线程ID标识划分成一系列的线程切片。
令Slice(p,I,t)={ej|ej∈Trace(p,I)and getThreadID(ej)=t},j∈{1,2,...,n},1≤t≤m,t∈Ν,Slice(p,I,t)表示线程程序p在输入I下线程t对应的线程切片,表示一条有效的系统调用,m代表程序执行过程中共有m个线程;N为自然数。
本发明进一步的改进在于:所述步骤2)具体包括以下步骤:
步骤S301:判断输入的动态系统调用序列中是否还存在待处理的系统调用,如果存在则转入步骤S302,否则转入步骤S304;
步骤S302:从动态系统调用序列中按次序取出一条系统调用,剥离线程ID和系统调用号;
步骤S303:将该系统调用加入其线程ID对应的线程切片;再转入步骤S301进行下一轮分析;
步骤S304:输出生成的线程切片集合,以进一步生成软件胎记。
本发明进一步的改进在于:其特征在于,所述步骤3)中线程切片胎记生成方法为:对线程切片Slice(p,I,t)应用k-gram算法,得到一个长度为k子序列的集合Set(p,I,t,k)={gj|gj=(ej,ej+1,…,ej+k-1)},j∈{1,2,…,n-k+1};其中n表示有效的系统调用总数,ej表示一条有效的系统调用,gj表示一个长度为k的系统调用序列;然后统计独有的k-gram个数及其频率,最终生成一个键值对集合。令为程序p在输入I下的线程ID标识为t的动态系统调用线程切片胎记,简记为Birth(t),表示为
其中
freq(g'j)表示g'j在集合Set(p,I,t,k)中出现的次数,k=4或5。
本发明进一步的改进在于:所述步骤3)具体包括以下步骤:
步骤S401:判断未处理的线程切片子序列长度是否大于可调参数k的值,如果是则转入步骤S402,否则转入步骤S408;
步骤S402:利用k-gram算法,生成一个长度为k的系统调用号子序列;
步骤S403:顺序依次连接生成的长度为k的系统调用号子序列中的每个元素,生成一个字符串,计算其hash值并将之作为键值查找集合B(初始集合B为空)中是否已存在相应元素;如果存在则转入步骤S406,不存在则转入步骤S404;
步骤S404:创建一新的以该子序列的hash值为键的元素,并设置键值为1;
步骤S405:将新生成的键值对元素加入集合B中,转入步骤S407;
步骤S406:依据hash键值在集合B中查找到该元素,并更新该元素的键值;
步骤S407:删除线程切片的首元素,转入步骤S401开展下一轮的处理;
步骤S408:输出由键值对构成的集合B,即动态系统调用线程切片胎记。
本发明进一步的改进在于:所述步骤4)中软件胎记生成方法为:令它表示一个程序的所有线程切片胎记的集合,其中k表示k-gram算法中参数k,t表示对应的线程标识ID,m表示程序运行过程中线程总数,N表示自然数;然后构建一个SS转换将线程切片胎记集合SB转换成其软件胎记PB,其中SS:SB→PB表示将线程胎记集合中的每一个线程与其相应的线程胎记组成一个二元组,作为软件胎记的元素,得到
本发明进一步的改进在于:所述步骤5)中线程切片胎记相似性计算方法为:
令两个线程切片胎记分别为A={<k1,v1>,<k2,v2>,…,<kn,vn>}和B={<k′1,v′1>,<k′2,v′2>,...,<k′m,v′m>},其中k1表示线程切片胎记A中的元素所对应的键,即基于k-gram算法得到的长度为k的有效系统调用序列;v1表示相应元素对应的值,即在该线程切片中该长度为k的有效系统调用序列出现的频次;其中k1'表示线程切片胎记B中的元素所对应的键,即基于k-gram算法得到的长度为k的有效系统调用序列;v1'表示相应元素对应的值,即在该线程切片中该长度为k的有效系统调用序列出现的频次。
首先分别使用cosine距离、Jaccard、Dice、Containment四种方法计算二者的相似性,具体描述如下:
a)cosine距离衡量A及B的相似性,
b)Jaccard计算A及B的相似性,
c)Dice计算A及B的相似性,
d)Containment计算A及B的相似性,
其中最后取平均值作为两个线程切片胎记的最终相似性,简记为simc(A,B)。
本发明进一步的改进在于:所述步骤5)中为PB1内部的所有线程切片胎记计算其与PB2内部每一个线程切片胎记的相似性:
对于第一程序软件胎记PB1={(t1,Birth(t1)),(t2,Birth(t2)),...,(tm,Birth(tm))},为其中的m个线程切片胎记分别计算其与第二程序软件胎记
PB2={(t1',Birth(t1')),(t'2,Birth(t'2)),...,(t'n,Birth(t'n))}中的n个线程切片胎记的相似性,生成m*n阶的相似性矩阵SimMatrix(PB1,PB2),其中,其中Birth(ti)表示程序在指定输入下线程ID标识为ti的动态系统调用线程切片胎记;
SimMatrix(PB1,PB2)[i][j]=simc(Birth(ti),Birth(t'j))。
本发明进一步的改进在于:所述步骤5)中基于带权双边图匹配算法生成PB1与PB2的最大相似性匹配方案MaxMatch(PB1,PB2):基于相似性矩阵SimMatrix(A,B),利用带权双边图匹配算法为软件胎记PB1和PB2中的所有线程切片胎记计算得到最大相似匹配方案,记为MaxMatch(PB1,PB2),
MaxMatch(PB1,PB2)={(u1,v1),(u2,v2),...,(ul,vl)},l=min(m,n),ui∈keySet(PB1),其中keySet(PB1)={t1,t2,...,tm};vi∈keySet(PB2),其中keySet(PB2)={t′1,t′2,...,t′n},ui≠uj if i≠j,vi≠vj if i≠j,并且在所有的匹配中具有最小值。
本发明进一步的改进在于:所述步骤5)中计算PB1与PB2的胎记相似性:基于软件胎记PB1与PB2的最大相似性匹配方案,计算二者相似性其中count(ti)=|keySet(Birth(ti))|,count(t'j)=|keySet(Birth(t'j))|。
本发明进一步的改进在于:所述步骤6)中抄袭决策模块将多次输入下得到的第一程序及第二程序胎记相似性的值作为输入,计算其均值相似性作为程序的相似性;并依据输入的可调节阈值ε做出抄袭与否的判断,输出检测结果。
本发明进一步的改进在于:所述步骤6)中阈值ε的取值范围为0.2-0.3;
其中,PA和PB分别表示待检测的第一程序和第二程序,sim(PA,PB)为第一程序PA及第二程序PB胎记相似性的均值。
相对于现有技术,本发明具有以下优点:
(1)本发明检测对象无需源码存在,可直接对二进制代码进行分析,更具实用价值:大部分情况下,可疑抄袭程序是以二进制代码形式发布的,在无确凿证据之前,无法获取其源码,传统的基于源码的抄袭检测手段就失效了。本发明基于动态插桩对软件进行监控,分析对象直接为二进制代码,不存在这种局限性。
(2)本发明最底层的分析对象是系统调用函数,不依赖于特定的编程语言,适用范围更广阔。
(3)本发明可以作用于多线程程序,通过在软件胎记生成过程中进行线程切片,能够很好地减小程序执行过程中线程调度产生的随机性影响,有效地提高了检测精度。
(4)本发明基于监控抽取的动态系统调用序列生成软件胎记,属于动态胎记的范畴,对加密、压缩、封装等浅层混淆手段具有天生的抵抗力,因为这类混淆后的程序最终要想执行,必须在运行时先进行解密、解压缩或解封装。
附图说明
图1为本发明基于线程切片胎记的多线程软件抄袭检测方法整体流程图;
图2为基于运行时监控的动态系统调用序列抽取过程流程图;
图3为预处理以及线程切片程流程图;
图4为动态线程切片胎记生成流程图。
图5为软件胎记相似性计算过程流程图。
具体实施方式
以下结合附图详细说明本发明基于线程切片胎记的多线程软件抄袭检测方法的实施方式。
图1为基于动态系统调用序列胎记的软件抄袭检测方法的处理流程。
本发明一种基于动态系统调用序列胎记的软件抄袭检测方法,包括以下步骤:
步骤S101:使用动态插桩工具如Pin、Valgrind等,在待分析程序的每条函数执行之前和执行之后植入分析代码,实现对二进制程序函数级信息的监控。
结合图2,具体而言,在每条函数执行之前和执行之后插入分析代码,实现对二进制程序函数级信息的监控,具体包括以下步骤:
步骤S201:判断待分析程序是否还存在待执行的函数,如果有则跳至步骤S202,否则直接转入步骤S208;
步骤S202:对于待分析的函数,解析函数类型,判断其是否为系统调用函数,如果是则转入步骤S203,否则转入步骤S207;
步骤S203:对系统调用函数进行解析,获取其线程ID、调用地址、系统调用号、函数名、参数、返回值的相关信息;
步骤S204:判断函数的返回值是否为-1,若是,则转入步骤S201分析下一个待执行的函数,否则转入步骤S205;
步骤S205:获取其所在的线程ID信息;
步骤S206:将获取的系统调用函数添加至系统调用序列;
步骤S207:执行该系统调用函数,并转入步骤S201进行下一轮的分析;
步骤S208:输出系统调用序列;
例如程序P1在输入I下获取的系统调用序列为Trace(p1,I)=〈(t1,sc-1),(t1,sc-2),(t1,sc-3),(t1,sc-2),(t2,sc-2),(t2,sc-3),(t1,sc-4),其中sc-i表示一条系统调用的系统调用号。
步骤S102:基于线程ID对有效的系统调用序列进行线程切片,生成一系列由线程ID标识的线程切片。具体流程如图3所示:
步骤S301:判断输入的动态系统调用序列中是否还存在待处理的系统调用,如果存在则转入步骤S302,否则转入步骤S304;
步骤S302:从动态系统调用序列中按次序取出一条系统调用,剥离线程ID和系统调用号;
步骤S303:将该系统调用加入其线程ID对应的线程切片;再转入步骤S301进行下一轮分析;
步骤S304:输出生成的线程切片集合,以进一步生成软件胎记。
针对上一步得到的系统调用序列Trace(p1,I),由于Trace(p1,I)只有两条线程,因此将Trace(p1,I)划分为由线程ID标识的线程切片后可以得到两个线程切片,分别为Slice(t1)=〈(t1,sc-1),(t1,sc-2),(t1,sc-3),(t1,sc-2),(t1,sc-4)〉和Slice(t2)=〈(t2,sc-2),(t2,sc-3)〉。
步骤S103:基于预处理得到的线程切片集合和可调参数k(一般取4或5),应用k-gram算法生成一系列长度为k的子序列,同时统计各个不同的子序列出现的频率,则将子序列及其出现频率构成的键值对集合作为动态线程切片胎记。具体而言,线程切片胎记Birth生成流程如图4所示:
步骤S401:判断未处理的线程切片子序列长度是否大于可调参数k的值,如果是则转入步骤S402,否则转入步骤S408;
步骤S402:利用k-gram算法,生成一个长度为k的系统调用号子序列;
步骤S403:顺序依次连接生成的长度为k的系统调用号子序列中的每个元素,生成一个字符串,计算其hash值并将之作为键值查找集合B(初始集合B为空)中是否已存在相应元素;如果存在则转入步骤S406,不存在则转入步骤S404;
步骤S404:创建一新的以该子序列的hash值为键的元素,并设置键值为1;
步骤S405:将新生成的键值对元素加入集合B中,转入步骤S407;
步骤S406:依据hash键值在集合B中查找到该元素,并更新该元素的键值;
步骤S407:删除线程切片的首元素,转入步骤S401开展下一轮的处理;
步骤S408:输出由键值对构成的集合B,即动态系统调用线程切片胎记。
将上述两个线程切片分别生成其线程切片胎记,取k值为2,对于线程切片Slice(t1)=〈(t1,sc-1),(t1,sc-2),(t1,sc-3),(t1,sc-2),(t1,sc-4)〉,通过k-gram算法得到Set(p1,I,t1)={(sc-1,sc-2),(sc-2,sc-3),(sc-3,sc-2),(sc-2,sc-4)},然后将具有相同键的项进行合并并修改其相应的值,生成其线程切片胎记
同样的对于线程切片Slice(t2)=〈(t2,sc-2),(t2,sc-3)〉则可以得到相应的线程切片胎记
将上述软件作为第一程序,然后对程序P2执行步骤S101得到系统调用序列Trace(p2,I)=〈(t1',sc-1),(t'2,sc-2),(t1',sc-2),(t'2,sc-3),(t1',sc-3),(t1',sc-2),(t1',sc-4),执行S102和S103得到它的线程切片胎记
步骤S104:基于两个待检测多线程程序的所有线程切片胎记分别生成其软件胎记PB1和PB2
具体描述为:令它表示一个程序的所有线程切片胎记的集合,然后构建一个SS:SB→PB转换将线程切片胎记集合SB转换成其软件胎记PB,具体是将线程胎记集合中的每一个线程与其相应的线程胎记组成一个二元组,作为软件胎记的元素,得到
通过上述描述对于程序P1的两个线程切片胎记可以得到其相应的软件胎记同样对于程序P2也可以得到其软件胎记
步骤S105:基于最大双边图匹配,计算PB1与PB2的最大相似性,具体流程如图5所示。
步骤S501:基于软件胎记PB1内部的每一个线程切片胎记计算其与PB2内部每一个线程切片胎记的相似性。具体描述为:对于第一程序软件胎记PB1={(t1,Birth(t1)),(t2,Birth(t2)),...,(tm,Birth(tm))}和第二程序软件胎记PB2={(t1',Birth(t1')),(t'2,Birth(t'2)),...,(t'n,Birth(t'n))},为PB1中的m个线程切片胎记分别计算其与PB2中的n个线程切片胎记的相似性,生成一个m*n阶的相似性矩阵SimMatrix(PB1,PB2),其中SimMatrix(PB1,PB2)[i][j]=simc(Birth(ti),Birth(t'j))。
针对线程切片胎记A={〈k1,v1〉,〈k2,v2〉,…,〈kn,vn〉}与另一个线程切片胎记B={〈k1',v1'〉,〈k'2,v'2>,…,<k'm,v'm〉}的相似性计算,首先分别使用cosine距离、Jaccard、Dice、Containment四种方法计算二者的相似性:
a)cosine距离衡量A及B的相似性,
b)Jaccard计算A及B的相似性,
c)Dice计算A及B的相似性,
d)Containment计算A及B的相似性,
其中最后取平均值作为两个线程切片胎记的最终相似性,简记为simc(A,B)。
例如第一程序的软件胎记PB1中的与第二程序的软件胎记PB2中的的相似性计算过程为:首先计算二者的cosine距离,其值为再依次用Jaccard、Dice、Containment计算它们的相似性,得到相似性分别为 取这四个值的平均值作为该两个线程切片胎记的最终相似性,因此
重复上述步骤为PB1中的两个线程切片胎记分别计算其与PB2中的两个线程切片胎记的相似性,得到PB1与PB2的相似性矩阵
步骤S502:基于带权双边图匹配算法生成PB1与PB2的最大相似匹配方案MaxMatch(PB1,PB2)。
具体描述为:基于相似性矩阵SimMatrix(PB1,PB2),利用带权双边图匹配算法为软件胎记PB1和PB2中的所有线程切片胎记计算得到最大相似匹配方案,记为MaxMatch(PB1,PB2),MaxMatch(PB1,PB2)={(u1,v1),(u2,v2),...,(ul,vl)},l=min(m,n),ui∈kgySet(PB1),其中keySet(PB1)={t1,t2,...,tm};vi∈keySet(PB2),其中keySet(PB2)={t′1,t′2,...,t′n},ui≠uj if i≠j,vi≠vj if i≠j,并且在所有的匹配方案中具有最小值。
在上述例子中存在两个匹配方案,方案一Match1(PB1,PB2)={(t1,t1'),(t2,t'2)}和方案二Match2(PB1,PB2)={(t1,t'2),(t2,t1')},但是经过计算两个方案的相似值可以得到方案一相似值大于方案二,因此方案一作为PB1与PB2的最大相似匹配方案。
步骤S503:基于胎记集合PB1与PB2的最大相似匹配方案计算其相似性,
具体描述为:基于软件胎记PB1与PB2的最大相似性匹配方案,计算二者相似性其中count(ti)=|keySet(Birth(ti))|,count(t'j)=|keySet(Birth(t'j))|。
根据上述公式计算得到Sim(PB1,PB2)=1。
步骤S106:不同输入下生成的胎记可能会不一样,提供多次输入,会计算得到一系列的相似值(S1,S2,…,Sn),取其均值作为最终衡量两个程序相似性的依据,以减小随机因素的影响;并依据输入的可调节阈值ε(取值0.2-0.3)做出抄袭与否的决策,输出检测结果。
具体描述为:对于两个软件PA和PB,为它们提供一系列的输入I1,I2,…,In(第一程序和第二程序每次的输入相同),生成的一系列软件胎记分别为PBA1,PBA2,...,PBAn和PBB1,PBB2,...,PBBn,则然后依据这两个程序的相似性和给定的可调阈值ε来确定抄袭与否,即:

Claims (10)

1.基于线程切片胎记的多线程软件抄袭检测方法,其特征在于,包括如下步骤:
1)基于动态插桩技术,对待分析目标程序实施运行时监控,实时地识别待分析目标程序中系统调用函数,并记录与之相关的线程ID、调用地址、系统调用号、函数名、参数、返回值的相关信息,然后对其进行预处理,去除无效的系统调用,得到有效的系统调用序列Trace;
2)基于线程ID对有效的系统调用序列Trace进行线程切片,生成一系列由线程ID标识的线程切片Slice;
3)基于线程切片,通过提取线程切片中的固定子序列并记录其出现次数,分别为待分析的第一程序P1及第二程序P2的所有线程切片生成其动态线程切片胎记Birth,其中第一程序指的是程序所有者开发的原始程序,第二程序指被认为抄袭了原始程序的可疑程序;
4)基于多线程程序所有的线程切片胎记分别为P1和P2生成相应的软件胎记PB1和PB2
5)基于最大双边图匹配,计算软件胎记PB1与PB2的最大相似性,首先针对软件胎记PB1内部的每一个线程切片胎记,计算其与胎记PB2内部每一个线程切片胎记的相似性;然后基于带权双边图匹配算法生成PB1与PB2的最大相似性匹配方案MaxMatch(PB1,PB2);最后基于最大相似性匹配方案,计算PB1与PB2的胎记相似性Sim(PB1,PB2);
6)依据多次输入下生成的胎记相似性的均值,及给定的阈值判断是否抄袭。
2.根据权利要求1所述的方法,其特征在于,所述步骤1)中动态系统调用识别原则为:若当前执行函数名与操作系统系统调用列表中一个系统调用函数名匹配,则将该执行函数识别为系统调用函数;所述步骤1)中监控实施方法为:针对二进制的待分析程序,使用动态插桩技术,在待分析程序的函数执行之前以及执行之后植入相应的分析代码,以实现运行时监控;所述步骤1)中系统调用序列生成方法为:通过函数级的运行时监控,捕获每一个待执行的函数,分析该函数的类型,通过匹配当前操作系统的系统调用列表,根据匹配结果判断该函数是否为系统调用函数;同时结合系统调用所在线程ID,对每一个执行的系统调用的所在线程ID进行记录;并且捕获与该系统调用相关的调用参数以及返回值相关信息;最后根据分析结果,对系统调用进行记录并将其加入动态系统调用序列;每条系统调用的记录格式为:线程ID#调用地址#系统调用号#函数名#参数#返回值。
3.根据权利要求1所述的方法,其特征在于,所述步骤1)中对记录的系统调用序列进行预处理,去除无效的系统调用,得到有效的系统调用序列:对抽取的系统调用序列中的每条系统调用项,解析其格式,判断其返回值,若返回值为非零则表示系统调用执行失败,则删除该条系统调用;
令Trace(p,I)=<e1,e2,...,en>,表示程序p在输入I下抽取,经预处理得到的一条有效的系统调用序列,其中ei包含一条系统调用的系统调用号以及它所在的线程ID。
4.根据权利要求3所述的方法,其特征在于,所述步骤2)中线程切片生成方法为:基于有效的运行时系统调用序列,针对序列中每一个系统调用,剥离其线程ID,保留其系统调用号,根据线程ID标识划分成一系列的线程切片;
令Slice(p,I,t)={ej|ej∈Trace(p,I)and getThreadID(ej)=t},j∈{1,2,...,n},1≤t≤m,t∈Ν;Slice(p,I,t)表示程序p在输入I下线程t对应的线程切片,表示一条有效的系统调用,m代表程序执行过程中共有m个线程;N为自然数。
5.根据权利要求4所述的方法,其特征在于,所述步骤3)中线程切片胎记生成方法为:对线程切片Slice(p,I,t)应用k-gram算法,得到一个长度为k子序列的集合Set(p,I,t,k)={gj|gj=(ej,ej+1,…,ej+k-1)},j∈{1,2,…,n-k+1};其中n表示有效的系统调用总数,ej表示一条有效的系统调用,gj表示一个长度为k的系统调用序列;然后统计独有的k-gram个数及其频率,最终生成一个键值对集合;令为程序p在输入I下的线程ID标识为t的动态系统调用线程切片胎记,简记为Birth(t),表示为
其中freq(g'j)表示g'j在集合Set(p,I,t,k)中出现的次数,k=4或5。
6.根据权利要求5所示的方法,其特征在于,所述步骤4)中软件胎记生成方法为:令它表示一个程序的所有线程切片胎记的集合,其中k表示k-gram算法中参数k,t表示对应的线程标识ID,m表示程序运行过程中线程总数,N表示自然数;然后构建一个SS:SB→PB转换将线程切片胎记集合SB转换成其软件胎记PB,具体是将线程胎记集合中的每一个线程ID与其相应的线程胎记组成一个二元组,作为软件胎记的元素,得到
PB = { ( t , Birth p I ( k , t ) ) | 1 &le; t &le; m , t &Element; N } .
7.根据权利要求6所示的方法,其特征在于,所述步骤5)中线程切片胎记相似性计算方法为:令两个线程切片胎记A={<k1,v1>,<k2,v2>,…,<kn,vn>}和B={<k′1,v′1>,<k'2,v'2>,…,<k'm,v'm>},其中k1表示线程切片胎记A中的元素所对应的键,即基于k-gram算法得到的长度为k的有效系统调用序列;v1表示相应元素对应的值,即在该线程切片中该长度为k的有效系统调用序列出现的频次;其中k′1表示线程切片胎记B中的元素所对应的键,即基于k-gram算法得到的长度为k的有效系统调用序列;v′1表示相应元素对应的值,即在该线程切片中该长度为k的有效系统调用序列出现的频次;
首先分别使用cosine距离、Jaccard、Dice、Containment四种方法计算二者的相似性,具体描述如下:
a)cosine距离衡量A及B的相似性,
b)Jaccard计算A及B的相似性,
c)Dice计算A及B的相似性,
d)Containment计算A及B的相似性,
其中最后取平均值作为两个线程切片胎记的最终相似性,简记为simc(A,B)。
8.根据权利要求7所示的方法,其特征在于,所述步骤5)中为PB1内部的所有线程切片胎记计算其与PB2内部每一个线程切片胎记的相似性:
对于第一程序软件胎记PB1={(t1,Birth(t1)),(t2,Birth(t2)),...,(tm,Birth(tm))}和第二程序软件胎记PB2={(t′1,Birth(t′1)),(t'2,Birth(t'2)),...,(t'n,Birth(t'n))},其中Birth(ti)表示程序在指定输入下线程ID标识为ti的动态系统调用线程切片胎记;为PB1的m个线程切片胎记分别计算其与PB2中的n个线程切片胎记的相似性,生成m*n阶的相似性矩阵SimMatrix(PB1,PB2),其中
SimMatrix(PB1,PB2)[i][j]=simc(Birth(ti),Birth(t'j));所述步骤5)中基于带权双边图匹配算法生成PB1与PB2的最大相似性匹配方案MaxMatch(PB1,PB2):基于相似性矩阵SimMatrix(A,B),利用带权双边图匹配算法为软件胎记PB1和PB2中的所有线程切片胎记计算得到最大相似匹配方案,记为MaxMatch(PB1,PB2),MaxMatch(PB1,PB2)={(u1,v1),(u2,v2),...,(ul,vl)},l=min(m,n),ui∈keySet(PB1),其中keySet(PB1)={t1,t2,...,tm};vi∈keySet(PB2),其中keySet(PB2)={t′1,t′2,...,t′n},ui≠uj if i≠j,vi≠vj if i≠j,并且在所有的匹配方案中具有最小值;所述步骤5)中计算PB1与PB2的胎记相似性:基于软件胎记PB1与PB2的最大相似性匹配方案,计算二者相似性其中count(ti)=|keySet(Birth(ti))|,count(t'j)=|keySet(Birth(t'j))|。
9.根据权利要求1所示的方法,其特征在于,所述步骤6)中抄袭决策模块将多次输入下得到的第一程序及第二程序胎记相似性的值作为输入,计算其均值相似性作为程序的相似性;并依据输入的可调节阈值ε做出抄袭与否的判断,输出检测结果。
10.根据权利要求9所示的方法,其特征在于,步骤6)中阈值ε的取值范围为0.2-0.3;
其中,PA和PB分别表示待检测的第一程序和第二程序,sim(PA,PB)为第一程序PA及第二程序PB胎记相似性的均值。
CN201410076931.XA 2014-03-04 2014-03-04 基于线程切片胎记的多线程软件抄袭检测方法 Expired - Fee Related CN103870721B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201410076931.XA CN103870721B (zh) 2014-03-04 2014-03-04 基于线程切片胎记的多线程软件抄袭检测方法
PCT/CN2014/076079 WO2015131434A1 (zh) 2014-03-04 2014-04-24 基于线程切片胎记的多线程软件抄袭检测方法
US14/759,642 US9652601B2 (en) 2014-03-04 2014-04-24 Method for plagiarism detection of multithreaded program based on thread slice birthmark

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410076931.XA CN103870721B (zh) 2014-03-04 2014-03-04 基于线程切片胎记的多线程软件抄袭检测方法

Publications (2)

Publication Number Publication Date
CN103870721A CN103870721A (zh) 2014-06-18
CN103870721B true CN103870721B (zh) 2016-12-07

Family

ID=50909246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410076931.XA Expired - Fee Related CN103870721B (zh) 2014-03-04 2014-03-04 基于线程切片胎记的多线程软件抄袭检测方法

Country Status (3)

Country Link
US (1) US9652601B2 (zh)
CN (1) CN103870721B (zh)
WO (1) WO2015131434A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077404B (zh) * 2014-07-07 2015-10-21 西安交通大学 基于变长系统调用序列胎记的报税人身份在线识别方法
CN104091283B (zh) * 2014-07-07 2015-07-08 西安交通大学 基于栈操作胎记的报税人身份动态认证方法
CN107506622B (zh) * 2017-08-25 2020-05-26 武汉大学 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法
CN107622201B (zh) * 2017-09-18 2018-07-24 湖南大学 一种抗加固的Android平台克隆应用程序快速检测方法
CN108399321B (zh) * 2017-11-03 2021-05-18 西安邮电大学 基于动态指令依赖图胎记的软件局部抄袭检测方法
CN109782989B (zh) 2017-11-14 2021-08-03 腾讯科技(深圳)有限公司 安全验证方法及相关装置
CN107967152B (zh) * 2017-12-12 2020-06-19 西安交通大学 基于最小分支路径函数胎记的软件局部抄袭证据生成方法
CN108446540B (zh) * 2018-03-19 2022-02-25 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN108830049B (zh) * 2018-05-09 2021-07-20 四川大学 一种基于动态控制流图权重序列胎记的软件相似性检测方法
CN110083534B (zh) * 2019-04-19 2023-03-31 西安邮电大学 一种基于约减最短路径胎记的软件抄袭检测方法
TWI719537B (zh) * 2019-07-16 2021-02-21 國立清華大學 文字比對方法、系統及其電腦程式產品
CN110532739B (zh) * 2019-08-30 2021-04-30 西安邮电大学 一种基于频繁模式挖掘的多线程程序抄袭检测方法
CN112559978B (zh) * 2020-12-18 2022-09-02 北京邮电大学 基于动态胎记的多线程程序抄袭检测方法及相关设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200935257A (en) * 2008-02-14 2009-08-16 Univ Nat Taiwan Science Tech Method for detecting similarity or plagiarism in computer programs
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法
US8223845B1 (en) * 2005-03-16 2012-07-17 Apple Inc. Multithread processing of video frames
CN103093128A (zh) * 2013-01-06 2013-05-08 福建三元达通讯股份有限公司 一种嵌入式终端软件防复制抄袭的方法
CN103577323A (zh) * 2013-09-27 2014-02-12 西安交通大学 基于动态关键指令序列胎记的软件抄袭检测方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087949A1 (en) * 2000-03-03 2002-07-04 Valery Golender System and method for software diagnostics using a combination of visual and dynamic tracing
US7730452B1 (en) * 2005-11-01 2010-06-01 Hewlett-Packard Development Company, L.P. Testing a component of a distributed system
US7877642B2 (en) * 2008-10-22 2011-01-25 International Business Machines Corporation Automatic software fault diagnosis by exploiting application signatures
CN101976217B (zh) * 2010-10-29 2014-06-04 中兴通讯股份有限公司 网络处理器异常检测方法及系统
CA2777434C (en) * 2012-05-18 2019-09-10 Ibm Canada Limited - Ibm Canada Limitee Verifying application security vulnerabilities
US20140053285A1 (en) * 2012-08-16 2014-02-20 Infosys Limited Methods for detecting plagiarism in software code and devices thereof
US20140337975A1 (en) * 2013-05-08 2014-11-13 Tencent Technology (Shenzhen) Company Limited Method for analyzing spyware and computer system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8223845B1 (en) * 2005-03-16 2012-07-17 Apple Inc. Multithread processing of video frames
TW200935257A (en) * 2008-02-14 2009-08-16 Univ Nat Taiwan Science Tech Method for detecting similarity or plagiarism in computer programs
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法
CN103093128A (zh) * 2013-01-06 2013-05-08 福建三元达通讯股份有限公司 一种嵌入式终端软件防复制抄袭的方法
CN103577323A (zh) * 2013-09-27 2014-02-12 西安交通大学 基于动态关键指令序列胎记的软件抄袭检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于k-gram的动态软件胎记研究;拜亚萌;《中国优秀硕士学位论文全文数据库》;20081215;第1-67页 *

Also Published As

Publication number Publication date
WO2015131434A1 (zh) 2015-09-11
CN103870721A (zh) 2014-06-18
US9652601B2 (en) 2017-05-16
US20160246950A1 (en) 2016-08-25

Similar Documents

Publication Publication Date Title
CN103870721B (zh) 基于线程切片胎记的多线程软件抄袭检测方法
Hu et al. An overview of hardware security and trust: Threats, countermeasures, and design tools
Zhu et al. A stable meaningful image encryption scheme using the newly-designed 2D discrete fractional-order chaotic map and Bayesian compressive sensing
Zhang et al. Deep learning feature exploration for android malware detection
CN103577323B (zh) 基于动态关键指令序列胎记的软件抄袭检测方法
Tian et al. DKISB: Dynamic key instruction sequence birthmark for software plagiarism detection
CN110413652B (zh) 一种基于边缘计算的大数据隐私化检索方法
Hussain et al. BIST-PUF: Online, hardware-based evaluation of physically unclonable circuit identifiers
CN114003910B (zh) 一种基于动态图对比学习的恶意变种实时检测方法
Hu et al. Hardware trojan detection combine with machine learning: an svm-based detection approach
CN114239082A (zh) 集成国密算法的抗攻击物联网安全芯片、方法及装置
Hindistan et al. A hybrid approach with gan and dp for privacy preservation of iiot data
Aljuffri et al. Applying thermal side-channel attacks on asymmetric cryptography
Abaimov et al. A survey on the application of deep learning for code injection detection
Niu et al. GCDroid: android malware detection based on graph compression with reachability relationship extraction for IoT devices
Tang et al. An image layered scrambling encryption algorithm based on a novel discrete chaotic map
Guo et al. Modelshield: A generic and portable framework extension for defending bit-flip based adversarial weight attacks
Ding et al. Backdoor Attack on Deep Learning-Based Medical Image Encryption and Decryption Network
CN106156615B (zh) 基于类可分性判距的旁路区分器方法及系统
Ye et al. Android malware detection technology based on lightweight convolutional neural networks
Thalji et al. AE-Net: Novel Autoencoder-Based Deep Features for SQL Injection Attack Detection
Gangadharan et al. Advancing Bug Detection in Solidity Smart Contracts with the Proficiency of Deep Learning
Chen et al. A novel preprocessing method for solving long sequence problem in android malware detection
Bai et al. Dynamic k-gram based software birthmark
Yulianton et al. Web application vulnerability detection using taint analysis and black-box testing

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161207

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