CN109241706B - 基于静态胎记的软件抄袭检测方法 - Google Patents
基于静态胎记的软件抄袭检测方法 Download PDFInfo
- Publication number
- CN109241706B CN109241706B CN201811092227.8A CN201811092227A CN109241706B CN 109241706 B CN109241706 B CN 109241706B CN 201811092227 A CN201811092227 A CN 201811092227A CN 109241706 B CN109241706 B CN 109241706B
- Authority
- CN
- China
- Prior art keywords
- class
- similarity
- lcs
- seq
- instruction
- 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
- 206010004950 Birth mark Diseases 0.000 title claims abstract description 23
- 238000001514 detection method Methods 0.000 title claims abstract description 15
- 230000003068 static effect Effects 0.000 title claims abstract description 15
- 238000000034 method Methods 0.000 claims abstract description 65
- 239000011159 matrix material Substances 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 claims description 4
- 238000004422 calculation algorithm Methods 0.000 abstract description 3
- 238000005516 engineering process Methods 0.000 description 6
- 238000000605 extraction Methods 0.000 description 6
- 238000002474 experimental method Methods 0.000 description 3
- 230000001343 mnemonic effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/16—Program or content traceability, e.g. by watermarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
基于静态胎记的软件抄袭检测方法,针对原来抄袭检测方法抗迷惑性和可信性较低而提出的,首先选定源程序和可疑程序,并确定迭代深度;对源程序和可疑程序进行分析得到元数据,从元数据中提取API调用信息和方法的指令执行序列,以API调用信息和方法的指令序列作为输入产生静态程序胎记,通过对两个程序的程序胎记对比,得到两个程序胎记之间的相似度,通过对比相似度最终给出是否抄袭的结论。本发明在指令序列的对比上没有采用传统的k‑gram算法,而是采用LCS算法,并且在软件胎记的生成上综合了API调用和指令序列两个方面的因素。最终得到的软件胎记在保证可信性的前提下抗迷惑性有显著提高。
Description
技术领域
本发明涉及程序特征发现以及软件版权保护领域,对两个不同开发者发布的程序通过提取其静态胎记进行对比计算其发布程序之间相似度大小,以判断两程序之间是否存在抄袭现象,是一种软件抄袭检测的方法;
背景技术
伴随着计算机技术以及计算机网络的迅猛发展,软件已经成为我们日常生活中不可或缺的一部分,并且为人们的生活带来了极大的便利以及数以亿万记的经济效益;然而软件作为一种数字产品在有着传输便利性的同时也为其版权保护带来了相当的难度,许多别有用心的人可以轻易地在网络上获得目标软件并且通过一些技术手段来将其破解并且以低廉的价格再发行出去,为软件的开发者带来重大损失;
在这种现状之下,许多相关学者以及工作人员已经在做有关软件保护的研究,思路大致可以说从软件和硬件两方面来对程序进行加密和保护;若从硬件方面来进行保护,主流有三种手段,一是将程序写入可携带设备,如光盘或加密狗等等,由人对硬件进行保管;二是将程序绑定于CPU之上,一个CPU唯一对应于一个程序,这种方法对于CPU的制造有一定的要求;三是在CPU中增加一个解密单元,对于要执行的程序预先进行加密,只有在执行到程序时再由解密单元进行解密来运行;基于硬件的程序保护大多需要购买专门的硬件,将程序与硬件配合才可以正确执行;若从软件方面进行保护,主流大致有代码加壳,代码混淆,软件水印,软件胎记等技术;
而静态软件胎记提取技术与其他技术相比较之下主要有以下两点优势,第一,其技术主要是对源码或中间码进行分析而无需额外插入任何代码,减少人为插入代码导致程序被恶意分析的可能性;第二,与同类的动态提取软件胎记技术相比较之下,这种方法可以更全面的覆盖软件的全部执行过程,而动态执行通常只能覆盖软件的一部分执行路径,增强了胎记的可信度,并且若软件需要频繁交互,提取动态胎记所花费的时间与用户体验代价要比静态胎记大得多;这两方面优势保证了静态软件胎记技术在盗版检测,代码抄袭等方面的实用性;
但目前来说静态软件胎记的提取主要有以下难点,第一,大部分的静态软件胎记在面对代码迷惑时表现的非常一般,有的甚至不具备抗迷惑能力;第二,在可以程序的获取上,基本只能拿到其二进制代码或中间代码而无法拿到源代码,这样许多依赖源代码才能够使用的胎记提取,如基于关键词的胎记提取,就无法使用;
针对以上情况,需要找到一种更好的软件胎记提取方法,这种方法生成的胎记在具有可信性的同时应兼具有一定的抗迷惑性,不限制于某特定平台或语言,且可以处理多种形式的文件;
发明内容
本发明要解决的问题是:提出一种新的静态软件胎记提取办法,以克服现有软件胎记的抗迷惑性弱,检测结果不准确的缺陷;
本发明的目的通过以下技术手段实现:
基于静态胎记的软件抄袭检测方法,包括以下步骤:
步骤一、由用户指定源工程PA和PA中的源类A以及可疑工程PB和PB中的可疑类B,再选定迭代深度d{d≥0};
步骤二、静态分析A,B编译后得到的中间文件classA和classB,将A中所记录的nA个方法的信息结构化的存储在中,同时将A中所有API调用的字面量存储在中;将B中所记录的nB个方法的信息结构化的存储在中,同时将B中所有API调用的字面量存储在中;分别比较和和得到类在API调用方面的相似度simAPI和类在指令序列比较方面的相似度simins;
步骤三、计算源类A与可疑类B的相似度,相似度计算公式为其中f(x)为sigmod函数,f(x)作用为将输入映射到[0,1]区间内,α为相似度在API调用方面的权重,β为相似度在指令序列方面的权重,而bais为偏置,bais的作用为调整f(x)的净输入;
步骤四、最终根据步骤三中得到的源类A与可疑类B的相似度,判断两个类是否存在抄袭关系,若simA,B∈[0,ε],则判定两类之间存在抄袭;若simA,B∈[1-ε,1],则判定两类之间不存在抄袭;否则simA,B∈(ε,1-ε),则无法判定,其中ε为一个小于0.5的检测阈值;
本发明的进一步改进之处在于所述步骤二中类在API调用方面的相似度simAPI的比较步骤如下:
本发明的进一步改进之处在于所述步骤二中类在指令序列比较方面的相似度simins的比较步骤如下:
①.对方法M剥离操作数并记录;
②.建立矩阵Matrix[nA][nB],其中Matrix[i][j]所存储的值为源类A中第i个方法与可疑类 B中第j个方法的相似度;
本发明的进一步改进之处在于所述步骤二中类在指令序列比较方面的相似度simins的比较步骤①剥离操作数具体实施步骤如下:
Ⅰ.遍历M中包含m个有序指令ins1,ins2,...insm,记正在遍历的指令为insj,若insj是一个调用其他方法的指令,且调用的方法是类所在工程P中存在的方法,则用该方法的指令序列替代insj;当ins1,ins2,...insm遍历完毕后d=d-1;
Ⅱ.重复Ⅰ,直到d=0或M中任意一项的指令序列中都不包含指向工程P中存在的方法的指令时,停止;
Ⅲ.将M中每一个指令剥离操作数,生成M在迭代深度为d时的指令序列seq并记录;
本发明的进一步改进之处在于所述步骤二中类在指令序列比较方面的相似度simins的比较步骤②比较两个方法的剥离操作数后指令序列具体实施步骤如下:
Ⅰ.记方法M1在迭代深度为d时剥离了操作数的指令序列为seq1,其长度为len1;记方法M2在迭代深度为d时剥离了操作数的指令序列为seq2,其长度为len2;用户指定该次检测的碎片阈值为threshold;
Ⅱ.构建LCS比较矩阵LCS[len1][len2],其中LCSi,j记录了seq1在i位置上的指令与seq2在j位置上的指令的比较情况;若seqi≠seqj,则令LCSi,j=0;若seqi=seqj且 i=0||j=0,则令LCSi,j=1;若seqi=seqj且i≠0&j≠0,则令LCSi,j=LCSi-1,j-1+1;
Ⅲ.定义trace为LCSr,s,...,LCSi-1,j-1,LCSi,j,LCSi+1,j+1,...,LCSp,q,其中LCSr,s=1,并且LCSp+1,q+1=0||p=len1||q=len2;找出LCS比较矩阵中所有的trace,遍历所有trace,若该trace中最大元素值大于threshold,则将该最大元素值添加到集合pieces中;
附图说明
图1为本发明的流程图
图2为本发明所用示例对比程序对的源程序与可疑程序的源码与中间码对比图
图3为本发明所用示例对比程序对的源程序与可疑程序的LCS比较矩阵
图4为本发明阐述方法与传统k-gram方法在比对Junit4.0-BaseTestRunner与Junit4.X-BaseTestRunner的相似度的对比图
图5为本发明阐述方法与传统k-gram方法在比对soot-2.5.0-soot.Main与Junit4.X-BaseTestRunner时相似度的对比图
图6为本发明与传统k-gram方法在面对同一经过迷惑的程序对时其给出的相似度对比图
具体实施方式
如图1,本发明实施的具体步骤如下:
(1)选择源jar包与可疑jar包,进行解压,由用户设置起始源类;起始可疑类;迭代深度,阈值;
(2)根据迭代深度建立方法迭代栈,迭代深度不得超过迭代深度,并且根据解压后的文件夹建立文件映射系统,从起始方法开始解析class文件并记录其中指令序列信息,对每一个方法按照方法调用顺序形成栈帧,模拟方法执行过程,将其中的指令按执行顺序记录为 Listinstruction;
(3)在模拟执行过程中将class文件的常量池信息中所有的CONSTANT_Class信息记录为 Setimport;
(4)根据步骤(2)中得到的信息,使用LCS算法进行指令相似度对比,得到指令序列特征的相似度,记为siminstruction;
(5)根据步骤(3)中得到的信息,以及API调用方面的相似度计算公式,得到API特征的相似度,记为simAPI;
(6)根据步骤(4),(5)中的相似度使用sigmod函数输出最终的相似度;
(7)根据步骤(6)中得到的相似度判断源类与可疑类是否存在抄袭关系,即:
下面将通过具体的实施例来说明本发明的实施;
例如,在迭代深度为3时,对以下Java程序进行API特征提取
在迭代深度为3时,最终得到类A中function方法的指令序列特征为:
其中,粗体部分将会被记录,最终得到的seqA如下:
{new,dup,invokespecial,aload_0,invokespecial,return,iload_1,invokevirtual,lconst _1,new,dup,invokespecial,aload_0,invokespecial,return,iload_1,invokevirtual,icon st_2,iload_1,imul,i2l,lreturn,new,dup,invokespecial,aload_0,invokespecial,return, iload_1,invokevirtual,iconst_3,iload_1,isub,i2l,lreturn,ldiv,ladd,l2d,dreturn,po p2,return}
在迭代深度为3时,对以下Java程序进行API特征提取
在迭代深度为3时,对以下Java程序进行API特征提取
在迭代深度为3时,最终得到类中fun方法的指令序列如下:
其中,粗体部分将会被记录,最终得到的seqFakeA如下:
{new,dup,invokespecial,aload_0,invokespecial,return,iload_1,invokevirtual,lconst _1,new,dup,invokespecial,aload_0,invokespecial,return,iload_1,invokevirtual,icon st_2,iload_1,imul,i2l,lreturn,new,dup,invokespecial,aload_0,invokespecial,return, iload_1,invokevirtual,iconst_3,iload_1,isub,i2l,lreturn,ldiv,ladd,l2d,dreturn,po p2,return}
为1;
通过实验来验证本方法的抗迷惑性和可信性;为了说明本发明的可信性,分析一个程序的不同小版本和两个不同程序来说明本方法的有效性;
(1)实验对象
在选择实验对象时,测试程序选用Junit4.0-4.5版本和soot-2.5.0来作为实验的对象,Junit是单元测试的常用工具,而soot是对程序进行静态分析时常用的工具,两者都很常见且具有代表性;是两个完全不同用途的程序;
(2)评估准测
本发明的目标是希望对提取到程序的可信健壮胎记并进行对比,设置检测阈值γ1为0.8,γ2为0.5;当实验结果大于γ1,就认为两程序之间存在很大可能是拷贝关系,当实验结果小于γ2,就认为两程序之间是独立开发;否则将认定为无法判定;
(3)实验实施及结果分析
程序1 | 程序2 | 相似度 |
Junit4.0-Assert | Junit4.1-Assert | 0.9992177 |
Junit4.0-ActiveTestSuit | Junit4.1-ActiveTestSuit | 0.9782422 |
Junit4.1-ComparisonCompactor | Junit4.2-ComparisonCompactor | 0.9994042 |
Junit4.2-BaseTestRunner | Junit4.3-BaseTestRunner | 0.9996096 |
Junit4.3-ResultPrinter | Junit4.4-ResultPrinter | 0.9996223 |
Junit4.4-TestSetup | Junit4.5-TestSetup | 0.9989239 |
Junit4.4-TestSetup | Soot2.5.0-Pack | 0.11920292 |
Junit4.2-ResultPrinter | Soot2.5.0-AbstractTrap | 0.13185965 |
Junit各个小版本之间相似度较高,而Junit和soot之间的相似度较低,可以说明方法的有效性;
经过ProGuard进行代码迷惑以后,选取其中同源类,进行相似度对比,由本方法生成的胎记得到的相似度均值为0.84,最终判定为抄袭;而由k-gram胎记得到的相似度其均值为0.52,最终判定为不确定;
实验首先验证了本方法所述胎记的可信性,验证类同程序得到较高的相似度,验证独立开发程序得到较低的相似度,以上两点说明使用本方法所述胎记进行抄袭检测,其结果是可靠的;
随后验证了本方法所述胎记的抗迷惑性,由本方法所述胎记得到源程序C与其迷惑程序 C'的相似度均值为0.84,而由SKB得到C与C'之间相似度均值只有0.52;由这两种胎记得到的检测结果完全不同,由SKB得到的相似度我们只能得出两程序的关系是无法判定,而由本方法所述胎记得到的相似度可以得出两程序之间存在抄袭关系;这说明本方法所述胎记在检测经过迷惑的抄袭程序上表现要优于传统的SKB,即本方法所述胎记的抗迷惑性比SKB要强。
Claims (1)
1.一种基于静态胎记的软件抄袭检测方法,其特征在于包括以下步骤:
(1)由用户指定源工程PA和PA中的源类A以及可疑工程PB和PB中的可疑类B,再选定迭代深度d{d≥0};
(2)静态分析A,B编译后得到的中间文件classA和classB,将A中所记录的nA个方法的信息结构化的存储在中,同时将A中所有API调用的字面量存储在中;将B中所记录的nB个方法的信息结构化的存储在中,同时将B中所有API调用的字面量存储在中;分别比较和 和得到类在API调用方面的相似度simAPI和类在指令序列比较方面的相似度simins,比较步骤如下:
Ⅰ.遍历M中包含m个有序指令ins1,ins2,...insm,记正在遍历的指令为insj,若insj是一个调用其他方法的指令,且调用的方法是类所在工程P中存在的方法,则用该方法的指令序列替代insj; 当ins1,ins2,...insm遍历完毕后d=d-1;
Ⅱ.重复Ⅰ,直到d=0或M中任意一项的指令序列中都不包含指向工程P中存在的方法的指令时,停止;
Ⅲ.将M中每一个指令剥离操作数,生成M在迭代深度为d时的指令序列seq;
③.建立矩阵Matrix[nA][nB],其中Matrix[i][j]所存储的值为源类A中第i个方法与可疑类B中第j个方法的相似度,比较两个方法的相似度如下:
Ⅰ.记方法M1在迭代深度为d时剥离了操作数的指令序列为seq1,其长度为len1;记方法M2在迭代深度为d时剥离了操作数的指令序列为seq2,其长度为len2;用户指定该次检测的碎片阈值为threshold;
Ⅱ.构建LCS比较矩阵LCS[len1][len2],其中LCSi,j记录了seq1在i位置上的指令与seq2在j位置上的指令的比较情况; 若seqi≠seqj,则令LCSi,j=0;若seqi=seqj且i=0||j=0,则令LCSi,j=1;若seqi=seqj且i≠0&j≠0,则令LCSi,j=LCSi-1,j-1+1;
Ⅲ.定义trace为LCSr,s,...,LCSi-1,j-1,LCSi,j,LCSi+1,j+1,...,LCSp,q,其中LCSr,s=1,并且LCSp+1,q+1=0||p=len1||q=len2; 找出LCS比较矩阵中所有的trace,遍历所有trace,若该trace中最大元素值大于threshold,则将该最大元素值添加到集合pieces中;
(3)计算源类A与可疑类B的相似度,相似度计算公式为其中f(x)为sigmod函数,f(x)作用为将输入映射到[0,1]区间内,α为相似度在API调用方面的权重,β为相似度在指令序列方面的权重,而bais为偏置,bais的作用为调整f(x)的净输入;
(4)最终根据步骤(3)中得到的源类A与可疑类B的相似度,判断两个类是否存在抄袭关系,若simA,B∈[0,ε],则判定两类之间存在抄袭;若simA,B∈[1-ε,1],则判定两类之间不存在抄袭;否则simA,B∈(ε,1-ε),则无法判定,其中ε为一个小于0.5的检测阈值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2018100407942 | 2018-01-16 | ||
CN201810040794 | 2018-01-16 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109241706A CN109241706A (zh) | 2019-01-18 |
CN109241706B true CN109241706B (zh) | 2021-04-30 |
Family
ID=65059062
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811092227.8A Active CN109241706B (zh) | 2018-01-16 | 2018-09-19 | 基于静态胎记的软件抄袭检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241706B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459788A (zh) * | 2019-01-18 | 2020-07-28 | 南京大学 | 一种基于支持向量机的测试程序抄袭检测方法 |
CN110083534B (zh) * | 2019-04-19 | 2023-03-31 | 西安邮电大学 | 一种基于约减最短路径胎记的软件抄袭检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577323A (zh) * | 2013-09-27 | 2014-02-12 | 西安交通大学 | 基于动态关键指令序列胎记的软件抄袭检测方法 |
CN107506622A (zh) * | 2017-08-25 | 2017-12-22 | 武汉大学 | 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法 |
-
2018
- 2018-09-19 CN CN201811092227.8A patent/CN109241706B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577323A (zh) * | 2013-09-27 | 2014-02-12 | 西安交通大学 | 基于动态关键指令序列胎记的软件抄袭检测方法 |
CN107506622A (zh) * | 2017-08-25 | 2017-12-22 | 武汉大学 | 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法 |
Non-Patent Citations (2)
Title |
---|
基于k-gram频数的静态软件胎记;陈林等;《计 算 机 工 程》;20110228;第37卷(第4期);第46-48页 * |
软件抄袭检测研究综述;田振洲等;《信 息 安 全 学 报》;20160731;第1卷(第3期);第52-70页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109241706A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yakura et al. | Malware analysis of imaged binary samples by convolutional neural network with attention mechanism | |
Yen et al. | An Android mutation malware detection based on deep learning using visualization of importance from codes | |
Kirat et al. | Malgene: Automatic extraction of malware analysis evasion signature | |
Li et al. | Libd: Scalable and precise third-party library detection in android markets | |
Han et al. | Malware analysis using visualized image matrices | |
Zhang et al. | A first step towards algorithm plagiarism detection | |
CN111639337B (zh) | 一种面向海量Windows软件的未知恶意代码检测方法及系统 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
Myles et al. | Software watermarking through register allocation: Implementation, analysis, and attacks | |
Mercaldo et al. | Hey malware, i can find you! | |
Palahan et al. | Extraction of statistically significant malware behaviors | |
Choi et al. | A static birthmark of binary executables based on API call structure | |
Nguyen et al. | Detecting repackaged android applications using perceptual hashing | |
CN109241706B (zh) | 基于静态胎记的软件抄袭检测方法 | |
Ko et al. | COAT: Code obfuscation tool to evaluate the performance of code plagiarism detection tools | |
Li et al. | Large-scale third-party library detection in android markets | |
CN115658080A (zh) | 一种软件开源代码成分的识别方法及系统 | |
CN106874758A (zh) | 一种识别文档代码的方法和装置 | |
Cheers et al. | Spplagiarise: A tool for generating simulated semantics-preserving plagiarism of java source code | |
CN113935022A (zh) | 一种同源样本捕获方法、装置、电子设备及存储介质 | |
CN110520860B (zh) | 用于防护软件代码的方法 | |
Gonzalez et al. | Measuring code reuse in Android apps | |
Lim et al. | Analyzing stack flows to compare Java programs | |
Niu et al. | Clone analysis and detection in android applications | |
Kanzaki et al. | A software protection method based on instruction camouflage |
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 |