CN108830049B - 一种基于动态控制流图权重序列胎记的软件相似性检测方法 - Google Patents
一种基于动态控制流图权重序列胎记的软件相似性检测方法 Download PDFInfo
- Publication number
- CN108830049B CN108830049B CN201810438268.1A CN201810438268A CN108830049B CN 108830049 B CN108830049 B CN 108830049B CN 201810438268 A CN201810438268 A CN 201810438268A CN 108830049 B CN108830049 B CN 108830049B
- Authority
- CN
- China
- Prior art keywords
- software
- similarity
- dynamic
- control flow
- basic block
- 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 24
- 238000001514 detection method Methods 0.000 title claims abstract description 17
- 238000000034 method Methods 0.000 claims abstract description 19
- 238000004458 analytical method Methods 0.000 claims abstract description 7
- 238000010586 diagram Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000009825 accumulation Methods 0.000 claims description 3
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000009191 jumping Effects 0.000 abstract description 2
- 230000003068 static effect Effects 0.000 description 4
- 238000000605 extraction Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001605 fetal effect Effects 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/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于动态控制流图权重序列胎记的软件相似性检测方法,先在动态插装平台DynamoRIO下,编写插件程序记录程序执行过程中基本块的首地址和基本块结束时的分支跳转地址;然后分析日志文件,构建程序动态控制流图,并赋予权重;建立权重序列胎记集合WSB,并将WSB长度之比作为参数,计算每对程序的相似度。本发明采用动态插装分析,提取软件运行时特征,可以避免软件抄袭检测中缺乏源码、逆向反汇编困难的问题;在动态插装分析中,仅记录基本块首地址和分支跳转情况,与其他基于动态数据流追踪等技术的胎记相比,开销更小;且能够对抗动态运行时无关干扰信息的影响,即使在软件使用加密壳加密,也能检测出程序相似。
Description
技术领域
本发明涉及软件安全和软件知识产权的技术领域,具体为一种基于动态控制流图权重序列胎记的软件相似性检测方法。
背景技术
软件盗版,是指对未经授权的软件进行非法复制、传播和使用。据2016年BSA(商业软件联盟)全球软件调查,在个人电脑上装载的软件有39%未经授权,其商业价值为522亿美元。而根据revulytics 2017年软件盗版统计,中国的软件盗版和滥用软件许可证案例位居全球首位。软件盗版已然成为软件产业和软件知识产权的一个严重问题,急需有效的软件相似性检测方法来保护软件知识产权并减少经济损失。
目前,研究人员提出的软件相似性检测方法可以分为三类:基于源码的、基于软件水印的和基于软件胎记的。源码检测方法分析源代码的组成成分和结构,但源代码通常使用混淆技术加以保护,因此源码检测的抗混淆能力较弱。当软件仅以二进制形式发布而不公开源码时,源码检测方法就难以使用。软件水印是一种著名的软件产权保护方法,它在软件发布时嵌入一个特殊的标记即软件水印,软件水印难以移除但容易验证,因此水印可以作为软件相似性检测的重要依据。但Collberg已证实一个足够耐心的攻击者将最终破解任何水印。软件胎记方法,首先从软件中提出特定的特征,然后计算其相似度来判定相似。因为软件胎记是从软件中直接提取的而不依赖于软件源代码和其他数据,所以该方法优于前两种方法。
根据特征提取方法,软件胎记可以分为静态软件胎记和动态软件胎记。静态胎记是从汇编代码或源码中提取的,而动态胎记是从软件运行时信息中提取的。当二进制软件因混淆技术而改变了其汇编代码的结构和内容时,静态胎记也难以处理,而且当软件反汇编失败时,静态胎记方法就失效了。动态胎记方法可以避开反汇编的问题并且具有很好的抗混淆能力。但是,当软件加壳时,原始程序中混入了解壳程序。当提取动态胎记时,混入的解壳程序特征如指令、API和系统调用等难以祛除。现有的大多数动态软件胎记都忽视了如何过滤这些不相关特征的问题。DKISB(动态关键指令序列胎记)使用了动态数据流追踪技术来消除与输入无关的信息,但其开销太大。当软件使用加密壳如MidgetPack时,DKISB需密码或密钥解密,同样会引入无关信息。
发明内容
针对上述问题,本发明的目的在于提供一种能够解决软件相似性检测缺乏源码、逆向反汇编困难、提取动态胎记开销大和祛除无关特征难的问题的基于动态控制流图权重序列胎记的软件相似性检测方法。技术方案如下:
一种基于动态控制流图权重序列胎记的软件相似性检测方法,包括以下步骤:
步骤1:在动态插装平台DynamoRIO下,编写插件程序,记录程序执行过程中基本块的首地址和基本块结束时的分支跳转地址,并输出到日志文件中;
步骤2:逐行分析日志文件,提取每个基本块的首地址,将基本块作为节点并以首地址标注;分析每个分支跳转,将分支跳转作为边,并统计跳转重复次数作为对应边的权重;对多线程程序,将日志文件逐个分析之后,将所得的节点、边合并,并对权重进行累计,得到一个综合的带权动态控制流图;最后将日志分析结果以邻接图的形式存到XML文本中;
步骤3:使用深度优先算法遍历所述带权动态控制流图,遍历的轨迹看成边的序列,而每条边以权重表示,因此遍历轨迹也是一个权重序列;然后使用n-gram方法处理权重序列得到一个权重序列n-gram集合,将集合中相似的项合并,得到权重序列胎记集合WSB;
步骤4:根据余弦计算公式,并将WSB长度之比作为参数,定义拓展的余弦相似度,计算每对程序的相似度;
步骤5:改变输入,对每对程序重复步骤1-4,得到其平均相似度,并与相似度阈值ε对比;当平均相似度大于或等于1-ε时,判定程序相似;当平均相似度小于或等于ε时,判定程序不相似;当平均相似度大于ε且小于1-ε时,对相似性不做判定。
进一步的,所述步骤2中,软件的带权动态控制流图为基于动态基本块粒度的软件结构图,表示为一个3元有向图:
WDCFG=(N,E,W)
其中,N表示节点集合,n∈N表示一个动态基本块;E表示节点集合,e(n0→n1)∈E表示基本块n1在n0执行后立即执行;W表示权重集合,w∈W与某条边相关联,表示这条边在程序执行过程中的重复次数。
WSB为基于软件带权动态控制流图权重序列特征的动态软件胎记,表示为集合<K,V>={<k0,v0>,<k1,v1>,…,<kn,vn>},其中V表示具有相同K值的n-gram项的频数累计,K是权重序列n-gram项的极坐标表示。
更进一步的,所述步骤4中:WSB相似性算法描述如下:对两个WSB A={<k0,v0>,<k1,v1>,…,<kn,vn>},B={<k‘0,v‘0>,<k‘1,v‘1>,…,<k‘m,v‘m>},
集合S=KeySet(A)∪KeySet(B);
其中,0≤i≤r,vi表示A中si对应的值,si∈S;
计算结果即表示两个WSB的相似度。
本发明的有益效果是:
本发明采用动态插装分析,提取软件运行时特征,可以避免软件相似性检测中缺乏源码、逆向反汇编困难的问题;
本发明在动态插装分析中,仅记录基本块首地址和分支跳转情况,与其他基于动态数据流追踪等技术的胎记相比,本发明中提出的胎记特征提取方法,开销更小;
本发明中提出的基于动态控制流图权重序列胎记,能够对抗动态运行时无关干扰信息的影响,即使在软件使用加密壳加密,也能检测出相似。与DKISB胎记相比,WSB对独立开发的软件也有较好的区分性。
附图说明
图1为本发明所述基于WSB的软件相似性检测框架。
图2为本发明所述带权DCFG示意图。
图3为本发明所述带权DCFG构建流程图。
图4为本发明所述N-gram项提取过程示意图。
具体实施方式
下面结合附图和具体实施例对本发明做进一步详细说明。如图1所示,一种基于动态控制流图权重序列胎记的软件相似性检测方法,包括下述步骤:
步骤1:在动态插装平台DynamoRIO下,编写插件程序记录程序执行过程中基本块的首地址和基本块结束时的分支跳转地址。指定测试程序的输入,在DynamoRIO平台中执行测试程序,插件程序将测试程序执行过程中的基本块首地址和分支跳转记录下来,并输出到日志文件中。每一个线程,都有一个专门的日志文件记录对应的测试程序运行时信息。
步骤2:构建程序动态控制流图,并赋予权重,图2是一个程序动态控制流图示意图。如图3分析日志文件,对每个日志文件逐行分析,提取每个基本块的首地址,将基本块作为节点并以首地址标注;分析每个分支跳转,将分支跳转作为边,并统计跳转重复次数作为对应边的权重。对多线程程序,将日志文件逐个分析之后,将所得的节点、边合并,并对权重进行累计,得到一个综合的带权动态控制流图。最后,将日志分析结果以邻接图的形式存到XML文本中。软件带权动态控制流图的定义如下:
软件带权动态控制流图是一种基于动态基本块粒度的软件结构图,可以表示成一个3元有向图WDCFG=(N,E,W),其中N,E,W定义如下:
N表示节点集合,n∈N表示一个动态基本块;
E表示节点集合,e(n0→n1)∈E表示基本块n1在n0执行后立即执行;
W表示权重集合,w∈W与某条边相关联,表示这条边在程序执行过程中的重复次数。
步骤3:如图4使用深度优先算法遍历步骤2所得的带权动态控制流图,遍历的轨迹可以看成是边的序列,而每条边以权重表示,因此遍历轨迹也是一个权重序列。然后使用n-gram方法处理权重序列得到一个权重序列n-gram集合,权重序列n-gram集合可以表示为其中表示权重序列,V表示具有相同值n-gram项的频数累计。为简化表示,可以根据极坐标公式转换为K=(r,α):
将集合中相似的项合并,所得集合即WSB(权重序列胎记)。WSB定义如下:
WSB是一种基于步骤2定义的软件带权动态控制流图权重序列特征的动态软件胎记。它可以表示为一个集合<K,V>={<k0,v0>,<k1,v1>,…,<kn,vn>},其中V表示具有相同K值的n-gram项的频数累计,K是权重序列n-gram项的极坐标表示。
步骤4:根据余弦计算公式,并将WSB长度之比作为参数,定义拓展的余弦相似度,计算每对程序的相似度。WSB相似算法描述:
对两个WSB:A={<k0,v0>,<k1,v1>,…,<kn,vn>},B={<k‘0,υ‘0>,<k‘1,υ‘1>,…,<k‘m,υ‘m>},集合S=KeySet(A)∪KeySet(B)。根据以下规则构建A对应的向量
计算结果即表示两个WSB的相似度。
步骤5:改变输入,对每对程序重复步骤1-4,得到其平均相似度,并与相似度阈值ε对比。当平均相似度大于或等于1-ε时,判定程序相似;当平均相似度小于或等于ε时,判定程序不相似;当平均相似度大于ε且小于1-ε时,对相似性不做判定。相似性判定可以归纳为以下公式:
表1 WSB和DKISB对加壳软件抗性对比试验结果
表1为WSB和DKISB对加壳软件抗性对比试验结果,可以看出,与DKISB胎记相比,WSB对独立开发的软件有更好的区分性。
Claims (3)
1.一种基于动态控制流图权重序列胎记的软件相似性检测方法,其特征在于,包括以下步骤:
步骤1:在动态插装平台DynamoRIO下,编写插件程序,记录程序执行过程中基本块的首地址和基本块结束时的分支跳转地址,并输出到日志文件中;
步骤2:逐行分析日志文件,提取每个基本块的首地址,将基本块作为节点并以首地址标注;分析每个分支跳转,将分支跳转作为边,并统计跳转重复次数作为对应边的权重;对多线程程序,将日志文件逐个分析之后,将所得的节点、边合并,并对权重进行累计,得到一个综合的带权动态控制流图;最后将日志分析结果以邻接图的形式存到XML文本中;
步骤3:使用深度优先算法遍历所述带权动态控制流图,遍历的轨迹看成边的序列,而每条边以权重表示,因此遍历轨迹也是一个权重序列;然后使用n-gram方法处理权重序列得到一个权重序列n-gram集合,将集合中相似的项合并,得到权重序列胎记集合WSB;
步骤4:根据余弦计算公式,并将WSB长度之比作为参数,定义拓展的余弦相似度,计算每对程序的相似度;
WSB相似性算法描述如下:对两个WSB A={<k0,v0>,<k1,v1>,…,<kn,vn>},B={<k‘0,v‘0>,<k‘1,v‘1>,…,<k‘m,v‘m>},
集合S=KeySet(A)∪KeySet(B);
其中,0≤i≤r,vi表示A中si对应的值,si∈S;
计算结果即表示两个WSB的相似度;
步骤5:改变输入,对每对程序重复步骤1-4,得到其平均相似度,并与相似度阈值ε对比;当平均相似度大于或等于1-ε时,判定程序相似;当平均相似度小于或等于ε时,判定程序不相似;当平均相似度大于ε且小于1-ε时,对相似性不做判定。
2.根据权利要求1所述基于动态控制流图权重序列胎记的软件相似性检测方法,其特征在于,所述步骤2中,软件的带权动态控制流图为基于动态基本块粒度的软件结构图,表示为一个3元有向图:
WDCFG=(N,E,W)
其中,N表示节点集合,n∈N表示一个动态基本块;E表示边集合,e(n0→n1)∈E表示基本块n1在n0执行后立即执行;W表示权重集合,w∈W与某条边相关联,表示这条边在程序执行过程中的重复次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810438268.1A CN108830049B (zh) | 2018-05-09 | 2018-05-09 | 一种基于动态控制流图权重序列胎记的软件相似性检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810438268.1A CN108830049B (zh) | 2018-05-09 | 2018-05-09 | 一种基于动态控制流图权重序列胎记的软件相似性检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108830049A CN108830049A (zh) | 2018-11-16 |
CN108830049B true CN108830049B (zh) | 2021-07-20 |
Family
ID=64147623
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810438268.1A Active CN108830049B (zh) | 2018-05-09 | 2018-05-09 | 一种基于动态控制流图权重序列胎记的软件相似性检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108830049B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109815699B (zh) * | 2018-12-24 | 2023-06-20 | 南京大学 | 一种基于界面图标特征的安卓软件重打包检测方法 |
CN110764992B (zh) * | 2019-08-26 | 2023-06-16 | 北京丁牛科技有限公司 | 测试方法及装置 |
CN110532739B (zh) * | 2019-08-30 | 2021-04-30 | 西安邮电大学 | 一种基于频繁模式挖掘的多线程程序抄袭检测方法 |
CN111984311B (zh) * | 2020-07-03 | 2022-04-22 | 华南理工大学 | 一种基于运行日志的软件结构复现的方法 |
CN116561017A (zh) * | 2023-07-12 | 2023-08-08 | 北京太极信息系统技术有限公司 | 一种信创应用成熟度测评方法及信创应用开放平台 |
CN117251171B (zh) * | 2023-11-20 | 2024-04-12 | 常熟理工学院 | 一种控制流图中谓词基本块检测方法及设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727391A (zh) * | 2009-12-14 | 2010-06-09 | 北京理工大学 | 一种软件漏洞特征操作序列的提取方法 |
CN103577323A (zh) * | 2013-09-27 | 2014-02-12 | 西安交通大学 | 基于动态关键指令序列胎记的软件抄袭检测方法 |
CN103870721A (zh) * | 2014-03-04 | 2014-06-18 | 西安交通大学 | 基于线程切片胎记的多线程软件抄袭检测方法 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN107506622A (zh) * | 2017-08-25 | 2017-12-22 | 武汉大学 | 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法 |
CN107967152A (zh) * | 2017-12-12 | 2018-04-27 | 西安交通大学 | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7421586B2 (en) * | 1999-05-12 | 2008-09-02 | Fraunhofer Gesselschaft | Protecting mobile code against malicious hosts |
US20070239993A1 (en) * | 2006-03-17 | 2007-10-11 | The Trustees Of The University Of Pennsylvania | System and method for comparing similarity of computer programs |
-
2018
- 2018-05-09 CN CN201810438268.1A patent/CN108830049B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727391A (zh) * | 2009-12-14 | 2010-06-09 | 北京理工大学 | 一种软件漏洞特征操作序列的提取方法 |
CN103577323A (zh) * | 2013-09-27 | 2014-02-12 | 西安交通大学 | 基于动态关键指令序列胎记的软件抄袭检测方法 |
CN103870721A (zh) * | 2014-03-04 | 2014-06-18 | 西安交通大学 | 基于线程切片胎记的多线程软件抄袭检测方法 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN107506622A (zh) * | 2017-08-25 | 2017-12-22 | 武汉大学 | 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法 |
CN107967152A (zh) * | 2017-12-12 | 2018-04-27 | 西安交通大学 | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 |
Non-Patent Citations (2)
Title |
---|
A Static Java Birthmark Based on Control Flow Edges;Hyun-il Lim 等;《2009 33rd Annual IEEE International Computer Software and Applications Conference》;20090724;第413-420页 * |
基于k_gram的动态软件胎记研究;拜亚萌;《中国优秀硕士学位论文全文数据库 信息科技辑》;20081215(第12期);第I138-95页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108830049A (zh) | 2018-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108830049B (zh) | 一种基于动态控制流图权重序列胎记的软件相似性检测方法 | |
Nagra et al. | Threading software watermarks | |
Myles et al. | Software watermarking via opaque predicates: Implementation, analysis, and attacks | |
US20110214188A1 (en) | Software watermarking techniques | |
US20050262490A1 (en) | Method of introducing digital signature into software | |
Wang et al. | Exception handling-based dynamic software watermarking | |
Chang et al. | Reversible fragile database watermarking technology using difference expansion based on SVR prediction | |
JP2009512051A (ja) | 効率的な透かし検出 | |
CN102855423A (zh) | 一种文字作品的追踪方法和装置 | |
KR101373176B1 (ko) | 복제 동영상정보 검출방법 및 장치, 저장매체 | |
CN111241576B (zh) | 一种用于数据库分发保护的零水印方法 | |
Chan et al. | Jsbirth: Dynamic javascript birthmark based on the run-time heap | |
CN109241706B (zh) | 基于静态胎记的软件抄袭检测方法 | |
Bento et al. | Towards a provably resilient scheme for graph-based watermarking | |
Chai et al. | A robust and reversible watermarking technique for relational dataset based on clustering | |
CN103377458A (zh) | 一种基于字节流的地理空间数据水印方法 | |
KR102301295B1 (ko) | 모델 추출 공격에 대한 인공신경망 워터마킹의 안전성 평가 방법 | |
Yuan et al. | A new software birthmark based on weight sequences of dynamic control flow graph for plagiarism detection | |
Olliaro et al. | Empirical analysis of the impact of queries on watermarked relational databases | |
Kumar et al. | A comparative analysis of static java bytecode software watermarking algorithms | |
Lim | A performance comparison on characteristics of static and dynamic software watermarking methods | |
KR101554393B1 (ko) | 프로그램의 유사도 비교를 위한 데이터 처리 방법, 장치 및 컴퓨터 프로그램 제품 | |
US20130191348A1 (en) | Method and device for "tracing multimedia file copies" | |
Kumar et al. | A Comparative analysis of static and dynamic Java Bytecode watermarking algorithms | |
Harun et al. | Video structure extraction using shot boundary detection for authentication detection |
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 |