CN112257068A - 一种程序相似性检测方法、装置、电子设备和存储介质 - Google Patents
一种程序相似性检测方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112257068A CN112257068A CN202011285076.5A CN202011285076A CN112257068A CN 112257068 A CN112257068 A CN 112257068A CN 202011285076 A CN202011285076 A CN 202011285076A CN 112257068 A CN112257068 A CN 112257068A
- Authority
- CN
- China
- Prior art keywords
- function
- program
- similarity
- source
- target
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 30
- 230000006870 function Effects 0.000 claims abstract description 284
- 238000012216 screening Methods 0.000 claims abstract description 44
- 238000000034 method Methods 0.000 claims description 36
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 12
- 238000000605 extraction Methods 0.000 claims description 10
- 238000001914 filtration Methods 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 abstract description 9
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 238000012098 association analyses Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010219 correlation analysis Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000006467 substitution reaction 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种程序相似性检测方法、装置、电子设备和存储介质,包括:从预设源程序中提取源函数,以及对应的函数基本信息,生成反汇编指令文本;基于函数基本信息和反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定目标源函数;将目标源函数拆解为多个源程序片段;将潜在相似函数拆解为多个目标程序片段;分别计算任意源程序片段与目标程序片段之间的相似性,得到相似性分数;确定相似性分数达到第一预设阈值的相似目标程序片段个数;将相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;根据相似函数的个数,判断源程序和目标程序是否存在关联关系。解决了现有技术分析速度慢,分析准确性不高的技术问题。
Description
技术领域
本发明涉及程序检测技术领域,尤其涉及一种程序相似性检测方法、装置、电子设备和存储介质。
背景技术
现如今,以勒索病毒为首的各类恶意代码肆虐网络,对于如何基于已有所获取恶意代码样本,开展进一步关联性挖掘,进而为事件应急处置提供支撑,是技术难点。编写程序代码通常不会从零开始,而是在已有代码基础上或者复用已有部分功能代码来实现编码。基于此,对于分析人员来说,可以基于所获取程序代码,开展复用函数代码检测,进而为恶意攻击代码关联分析或漏洞代码检测追踪提供支持要实现上述关联或追踪分析目标,需对代码之间复用的功能块或函数进行快速有效发现,有以下两个关键问题需要解决:
(1)分析速度问题;通常,恶意样本数量非常多,如何有效对大批量样本进行处理非常关键;
(2)分析准确性问题;不同样本,相同功能代码,其具体形式会有差异,这主要是因为不同代码作者或不同编译环境与编译优化选项都会导致二进制程序发生变化,使得要想有效地找出代码之间的复用函数难度大大提高。
发明内容
本发明提供了一种程序相似性检测方法、装置、电子设备和存储介质,用于解决现有的复用函数代码检测方法分析速度慢,分析准确性不高的技术问题。
本发明提供的一种程序相似性检测方法,包括:
从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
将所述目标源函数拆解为多个源程序片段;
将所述潜在相似函数拆解为多个目标程序片段;
分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
可选地,所述从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本的步骤,包括:
对所述源程序执行脱壳操作,得到原始编译程序;
从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本。
可选地,所述基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数的步骤,包括:
判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数。
可选地,所述分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数的步骤,包括:
对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性分数。
本发明还提供了一种程序相似性检测装置,包括:
提取模块,用于从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
潜在相似函数筛选模块,用于基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
源程序片段拆解模块,用于将所述目标源函数拆解为多个源程序片段;
目标程序片段拆解模块,用于将所述潜在相似函数拆解为多个目标程序片段;
相似性分数计算模块,用于分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
相似目标程序片段个数确定模块,用于确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
相似函数确定模块,用于将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
关联关系判断模块,用于根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
可选地,所述提取模块,包括:
脱壳子模块,用于对所述源程序执行脱壳操作,得到原始编译程序;
提取子模块,用于从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本。
可选地,所述潜在相似函数筛选模块,包括:
判断子模块,用于判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
潜在相似函数筛选子模块,用于若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数。
可选地,所述相似性分数计算模块,包括:
标准化处理子模块,用于对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
相似性分数计算子模块,用于基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性分数。
本发明还提供了一种电子设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行如上任一项所述的程序相似性检测方法。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行如上任一项所述的程序相似性检测方法。
从以上技术方案可以看出,本发明具有以下优点:本发明公开了一种程序相似性检测方法,包括:从预设源程序中提取源函数,以及源函数对应的函数基本信息,并生成反汇编指令文本;基于函数基本信息和反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与潜在相似函数对应的目标源函数;将目标源函数拆解为多个源程序片段;将潜在相似函数拆解为多个目标程序片段;分别计算任意源程序片段与目标程序片段之间的相似性,得到相似性分数;确定相似性分数达到第一预设阈值的相似目标程序片段个数;将相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;根据相似函数的个数,判断源程序和目标程序是否存在关联关系。本发明结合了函数基本信息和反汇编指令文本SimHash来对潜在相似函数进行筛选,可实现对潜在相似函数函数的快速筛选。此外,通过程序片段比对的方式进行相似函数的筛选,相比于现有技术,具有更高的准确性。从而可以快速准确地找出程序之间复用的代码段或函数,进而判断两个程序之间是否存在关联关系,以便于对恶意程序进行溯源。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种程序相似性检测方法的步骤流程图;
图2为本发明另一实施例提供的一种程序相似性检测方法的步骤流程图;
图3为两个程序分别编译相同功能函数的基本块示意图;
图4为本发明实施例提供的一种程序相似性检测方法的系统架构图;
图5为本发明实施例提供的一种程序相似性检测方法的流程图;
图6为本发明实施例提供的一种程序相似性检测装置的结构框图。
具体实施方式
本发明实施例提供了一种程序相似性检测方法、装置、电子设备和存储介质,用于解决现有的复用函数代码检测方法分析速度慢,分析准确性不高的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种程序相似性检测方法的步骤流程图。
本发明提供的一种程序相似性检测方法,具体可以包括以下步骤:
步骤101,从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
反汇编指令文本(SimHash)是一种局部敏感hash,假定两个字符串具有一定的相似性,在hash之后,仍然能保持这种相似性,就称之为局部敏感hash,其是一种用来处理海量文本去重的算法。
在本发明实施例中,可以对程序或恶意代码库进行样本聚类和分类处理,以任意一个恶意程序样本为预设源程序,并从中提取源函数和源函数对应的函数基本信息,并生成反汇编指令文本,以基于源程序的函数基本信息和反汇编代码,对作为目标程序的恶意程序进行快速筛选。
其中,函数基本信息可以包括函数入度/出度信息、CFG基本块数、调用函数与被调用函数等。
步骤102,基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
在获取到源程序的函数基本信息和反汇编指令文本后,可以采用该函数基本信息和该反汇编指令文本,对目标程序进行筛选,得到潜在相似函数。
具体地,采用函数基本信息对目标程序进行筛选的过程,可以为通过对比函数入度/出度信息、CFG基本块数、调用函数与被调用函数,在上述比对过程满足相应的相似度判定条件时,表征所比对的目标程序的函数为源函数的潜在相似函数。
采用反汇编指令文本对目标函数进行潜在相似函数筛选的过程,可以为通过对源程序和目标程序汇编指令文本串的海明距离的判断得到。
步骤103,将所述目标源函数拆解为多个源程序片段;
步骤104,将所述潜在相似函数拆解为多个目标程序片段;
步骤105,分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
在完成对潜在相似函数的筛选后,还需要对潜在相似函数进行进一步地比对,以确认相似函数。具体地,可以对两者间的程序片段进行比对,得到相似性分数。以根据相似性分数判断是否满足相似性判定条件。
步骤106,确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
步骤107,将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
步骤108,根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
在本发明实施例中,将相似性分数达到第一预设阈值的潜在相似片段确定为相似目标程序片段,统计个数以确认相似目标程序片段占目标程序所有程序片段的比例,当比例达到一定阈值时,即可认为两个程序之间存在关联关系。从另一个方面来讲,在已知目标程序的程序片段的总数以及判定比例阈值的情况下,也可以直接通过统计相似目标函数片段的个数来确定两个程序之间是否存在关联关系。
在本发明实施例中,本发明结合了函数基本信息和反汇编指令文本SimHash来对潜在相似函数进行筛选,可实现对潜在相似函数函数的快速筛选。此外,通过程序片段比对的方式进行相似函数的筛选,相比于现有技术,具有更高的准确性。从而可以快速准确地找出程序之间复用的代码段或函数,进而判断两个程序之间是否存在关联关系,以便于对恶意程序进行溯源。
请参阅图2,图2为本发明另一实施例提供的一种程序相似性检测方法的步骤流程图。
步骤201,对所述源程序执行脱壳操作,得到原始编译程序;
步骤202,从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
在本发明实施例中,可以对作为源程序的恶意程序样本进行脱壳操作,得到原始编译程序。
需要说明的是,原始编译程序为了防止查杀和破解,一般都会进行加壳,未脱壳的程序使用IDA反编译无法得到正确的函数信息。因此,在本发明实施例中,需要对加壳的原始源程序进行脱壳操作,得到原始编译程序。再使用IDA反编译可以得到函数基本信息。
步骤203,判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
步骤204,若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数;
在本发明实施例中,当获取到函数基本信息后,为减少库函数和编译器插入函数的影响,可以基于IDA自带库对库函数与编译器插入函数进行过滤;然后基于函数基本信息对源程序和目标程序进行潜在相似函数筛选,得到潜在相似函数。
步骤205,将所述目标源函数拆解为多个源程序片段;
步骤206,将所述潜在相似函数拆解为多个目标程序片段;
由于基于函数基本信息进行潜在相似函数筛选的局限性,为了对潜在相似函数进行进一步比对,本发明提出了基于程序片段的复用函数检测方法。
如图3所示,图3为两个程序分别编译相同功能函数的基本块示意图;在图3中,程序a(openssl-1.0.1q O2)和程序b(openssl-1.1.0 O3)分别编译相同功能函数save_index,其中,a中的3、4、5、6、9、10、12与b中的3’、4’、5’、6’、9’、10’、12’为经手工确认对应相等的基本块,而a中的1、2、7、8、11和b中的1’、7’、8’是经手工确认找不到对应相等部分的基本块。
程序片段是指基于函数CFG图,由一个或数个连续基本块指令所组成的指令序列;通常一个基本块所包含的指令数比较少,不具有区分性,所以实际分析中以3到4个基本块为单位来提取程序片段。以图3为例,a中提取的程序片段有:(1,2,3),(1,11,12),(2,3,6),(2,4,5),(4,5,6),(4,7,8),(7,8,9),(7,8,10),(4,7,12),(8,9,12)和(8,10,12)等共11个。b中提取的程序片段有:(1’,4’,7’),(1’,4’,5’),(1’,3’,6’),(4’,5’,6’),(4’,7’,8’),(4’,7’,12’),(7’,8’,9’),(7’,8’,10’),(8’,9’,12’)和(8’,10’,12’)等共10个。
基于函数CFG图提取程序片段的算法过程如表1所示,以CFG图的每一个基本块作为顶点,采用广度优先搜索的方法提取所有基本块个数为k的程序片段,并把提取的指令序列存放在一个列表供后续使用。
表1
步骤207,对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
在本发明实施例中,程序片段标准化处理,主要对寄存器、内存地址、立即数以及函数等进行标准化处理。
步骤208,基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性得分;
在本发明实施例中,程序片段的相似性计算,可以采用最长公共子序列算法来进行。
最长公共子序列问题(Longest Common Subsequence Problem,LCS)是指给定两个序列X=<x1,x2,...,xm>和Y=<y1,y2,...,ym>,要求求解X和Y长度最长的公共子序列。LCS问题具有最优子结构性质,定义如下:令X=<x1,x2,...,xm>和Y=<y1,y2,...,yn>为两个序列,Z=<z1,z2,...,zk>为X和Y的任意LCS,则有:(1)如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS;(2)如果xm≠yn,那么zk≠xm意味着Z是Xm-1和Y的一个LCS。(3)如果xm≠yn,那么zk≠yn意味着Z是X和yn-1的一个LCS。这意味着,在求解和的一个LCS时,需要求解一个或者两个子问题:如果xm=yn,应该求解Xm-1和Yn-1的一个LCS,将xm=yn加到这个LCS的末尾,就得到X和Y的一个LCS。如果xm≠yn,则必须求解两个子问题:求Xm-1和Y的一个LCS与X和Yn-1的一个LCS。两个LCS较长者即为X和Y的一个LCS。设计LCS问题的递归算法首先要建立最优的递归式,定义c[i,j]表示X和Yj的LCS长度,如果i=0或j=0,即一个序列长度为0,那么LCS的长度为0。根据LCS问题的最优子结构性质,可得如下公式,即:
通过上述公式可以计算得出两个序列LCS长度的算法,过程如下:算法接受两个序列X=<x1,x2,...,xm>和Y=<y1,y2,...,yn>为输入,将c[i,j]的值保存在表c[0...m,0...n]中,并按行主次序计算表项,即首先由左至右计算c的第一行,然后计算第二行,依此类推;同时,算法还维护一个表用于记录对应计算的子问题最优解。具体过程如表2所示。
表2
表2计算过程说明:算法的输入为两个要进行相似性比较的程序片段指令序列列表,列表元素为经过标准化处理的反汇编指令,输出为两程序片段相似得分,最终,标准化的程序片段相似性得分计算公式如下:
其中,STrace表示源程序片段,TTrace为目标程序片段,SimScore是单条指令相似度得分,NsimScore为源程序片段与目标程序片段相似性得分。关于程序片段相似阈值的选择,这里选择80%。
步骤209,确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
步骤210,将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
步骤211,根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
计算完函数程序片段相似性以后,根据相似程序片段数量确定被比较函数相似情况,计算公式为:
其中,simTracelet为源程序能找到相似程序片段的程序片段个数,srcTracelets表示源程序中程序片段个数;tarTracelets表示目标程序中程序片段个数;len()表示片段的长度。通过对大量程序CFG分析,确定函数相似阈值为0.3,即funcSimScore值大于0.3即认为两个函数相似。
在完成源目标程序函数相似性计算之后,根据相似函数个数确定两个程序是否存在关联性,如果源目标程序存在复用函数,则认为它们之间存在关联关系,进而可以认为背后攻击团队存在一定关联关系。
在本发明实施例中,本发明结合了函数基本信息和反汇编指令文本SimHash来对潜在相似函数进行筛选,可实现对潜在相似函数函数的快速筛选。此外,通过程序片段比对的方式进行相似函数的筛选,相比于现有技术,具有更高的准确性。从而可以快速准确地找出程序之间复用的代码段或函数,进而判断两个程序之间是否存在关联关系,以便于对恶意程序进行溯源。
为便于理解,请参阅图4,图4为本发明实施例提供的一种程序相似性检测方法的系统架构图。该架构由两个部分组成,即基于函数基本信息的潜在相似函数筛选和基于程序片段相似性比对。
基于函数信息的筛选,主要基于函数基本信息以及反汇编指令序列simhash,对目标程序潜在相似函数进行快速筛选。在此之前需要对程序或者恶意代码库进行样本聚类和分类处理。
基于程序片段的相似性比对,提取函数CFG指令序列片段,计算片段相似性;然后,通过计算相似片段比例进一步确定函数相似性。并最终根据相似性进行函数关联分析。
在一个示例中,参见图5,图5为本发明实施例提供的一种程序相似性检测方法的流程图。
在图5中,基于函数信息的快速筛选过程包括:
对待溯源恶意样本程序进行样本脱壳/函数提取/标准化/函数基本信息提取和SimHash生成操作;
库函数与编译器插入函数过滤:为减少库函数和编译器插入函数的影响,基于IDA自带库对库函数与编译器插入函数进行过滤;
基于函数信息对源程序和目标程序潜在相似函数进行筛选;函数基本信息包括函数入度/出度信息、CFG基本块数、调用函数与被调用函数等;
基于函数反汇编指令文本simhash对潜在相似函数进行筛选。
需要说明的是,当没有在目标程序中找到潜在相似函数时,可以把所有目标程序函数作为潜在相似函数。
基于程序片段的相似性比对可以包括:
1、程序片段提取;具体过程不再赘述;
2、程序片段相似性计算;包括:1)、程序片段标准化处理;主要对寄存器、内存地址、立即数以及函数调用等进行标准化处理;2)、对源函数片段和目标函数程序片段,基于LCS方法进行两两相似性计算,得到标准化后的相似性得分,并把超过设定阈值的程序片段认为是能找到相似片段的程序片段;3)、基于函数所有程序片段相似性比较结果对函数进行相似计算,输出两函数相似结果;
3函数相似性计算。
代码关联:
在完成源程序函数和目标程序函数相似性计算之后,根据相似函数个数确定两个程序是否存在关联性,如果源程序和目标程序存在复用函数,则认为它们之间存在关联关系,进而可以认为背后攻击团队存在一定关联关系。
在本发明实施例中,本发明结合了函数基本信息和反汇编指令文本SimHash来对潜在相似函数进行筛选,可实现对潜在相似函数函数的快速筛选。此外,通过程序片段比对的方式进行相似函数的筛选,相比于现有技术,具有更高的准确性。从而可以快速准确地找出程序之间复用的代码段或函数,进而判断两个程序之间是否存在关联关系,以便于对恶意程序进行溯源。
请参阅图6,图6为本发明实施例提供的一种程序相似性检测装置的结构框图。
本发明实施例提供了一种程序相似性检测装置,包括:
提取模块601,用于从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
潜在相似函数筛选模块602,用于基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
源程序片段拆解模块603,用于将所述目标源函数拆解为多个源程序片段;
目标程序片段拆解模块604,用于将所述潜在相似函数拆解为多个目标程序片段;
相似性分数计算模块605,用于分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
相似目标程序片段个数确定模块606,用于确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
相似函数确定模块607,用于将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
关联关系判断模块608,用于根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
在本发明实施例中,所述提取模块601,包括:
脱壳子模块,用于对所述源程序执行脱壳操作,得到原始编译程序;
提取子模块,用于从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本。
在本发明实施例中,所述潜在相似函数筛选模块602,包括:
判断子模块,用于判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
潜在相似函数筛选子模块,用于若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数。
在本发明实施例中,所述相似性分数计算模块605,包括:
标准化处理子模块,用于对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
相似性分数计算子模块,用于基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性分数。
本发明还提供了一种电子设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行本发明实施例所述的程序相似性检测方法。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行本发明实施例所述的程序相似性检测方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来达到实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种程序相似性检测方法,其特征在于,包括:
从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
将所述目标源函数拆解为多个源程序片段;
将所述潜在相似函数拆解为多个目标程序片段;
分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
2.根据权利要求1所述的方法,其特征在于,所述从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本的步骤,包括:
对所述源程序执行脱壳操作,得到原始编译程序;
从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本。
3.根据权利要求2所述的方法,其特征在于,所述基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数的步骤,包括:
判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数。
4.根据权利要求1所述的方法,其特征在于,所述分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数的步骤,包括:
对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性分数。
5.一种程序相似性检测装置,其特征在于,包括:
提取模块,用于从预设源程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本;
潜在相似函数筛选模块,用于基于所述函数基本信息和所述反汇编指令文本对预设目标程序进行筛选,得到潜在相似函数,并确定与所述潜在相似函数对应的目标源函数;
源程序片段拆解模块,用于将所述目标源函数拆解为多个源程序片段;
目标程序片段拆解模块,用于将所述潜在相似函数拆解为多个目标程序片段;
相似性分数计算模块,用于分别计算任意所述源程序片段与所述目标程序片段之间的相似性,得到相似性分数;
相似目标程序片段个数确定模块,用于确定所述相似性分数达到第一预设阈值的相似目标程序片段个数;
相似函数确定模块,用于将所述相似目标程序片段个数达到第二预设阈值的潜在相似函数确定为相似函数;
关联关系判断模块,用于根据所述相似函数的个数,判断所述源程序和所述目标程序是否存在关联关系。
6.根据权利要求5所述的装置,其特征在于,所述提取模块,包括:
脱壳子模块,用于对所述源程序执行脱壳操作,得到原始编译程序;
提取子模块,用于从所述原始编译程序中提取源函数,以及所述源函数对应的函数基本信息,并生成反汇编指令文本。
7.根据权利要求6所述的装置,其特征在于,所述潜在相似函数筛选模块,包括:
判断子模块,用于判断所述原始编译程序是否为预设库函数或预设编译器插入函数;
潜在相似函数筛选子模块,用于若否,采用所述函数基本信息对所述预设目标程序进行筛选,以及采用所述反汇编指令文本对所述预设目标程序进行筛选,得到潜在相似函数。
8.根据权利要求5所述的装置,其特征在于,所述相似性分数计算模块,包括:
标准化处理子模块,用于对所述源程序片段与所述目标程序片段进行标准化处理,得到标准化源程序片段和标准化目标程序片段;
相似性分数计算子模块,用于基于最长公共子序列算法,对所述标准化源程序片段和所述标准化目标程序片段进行相似性计算,得到相似性分数。
9.一种电子设备,其特征在于,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1-4任一项所述的程序相似性检测方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行权利要求1-4任一项所述的程序相似性检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011285076.5A CN112257068A (zh) | 2020-11-17 | 2020-11-17 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011285076.5A CN112257068A (zh) | 2020-11-17 | 2020-11-17 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112257068A true CN112257068A (zh) | 2021-01-22 |
Family
ID=74265985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011285076.5A Pending CN112257068A (zh) | 2020-11-17 | 2020-11-17 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112257068A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
CN115016843A (zh) * | 2022-05-23 | 2022-09-06 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
CN116166321A (zh) * | 2023-04-26 | 2023-05-26 | 浙江鹏信信息科技股份有限公司 | 代码克隆检测方法、系统及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819856B1 (en) * | 2012-08-06 | 2014-08-26 | Google Inc. | Detecting and preventing noncompliant use of source code |
CN106126235A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学院信息工程研究所 | 一种复用代码库构建方法、复用代码快速溯源方法及系统 |
CN107357566A (zh) * | 2017-06-06 | 2017-11-17 | 上海交通大学 | 多架构二进制相似代码检测系统及方法 |
CN108875317A (zh) * | 2017-05-08 | 2018-11-23 | 中国移动通信有限公司研究院 | 软件克隆检测方法及装置、检测设备及存储介质 |
CN109445834A (zh) * | 2018-10-30 | 2019-03-08 | 北京计算机技术及应用研究所 | 基于抽象语法树的程序代码相似性快速比较方法 |
-
2020
- 2020-11-17 CN CN202011285076.5A patent/CN112257068A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819856B1 (en) * | 2012-08-06 | 2014-08-26 | Google Inc. | Detecting and preventing noncompliant use of source code |
CN106126235A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学院信息工程研究所 | 一种复用代码库构建方法、复用代码快速溯源方法及系统 |
CN108875317A (zh) * | 2017-05-08 | 2018-11-23 | 中国移动通信有限公司研究院 | 软件克隆检测方法及装置、检测设备及存储介质 |
CN107357566A (zh) * | 2017-06-06 | 2017-11-17 | 上海交通大学 | 多架构二进制相似代码检测系统及方法 |
CN109445834A (zh) * | 2018-10-30 | 2019-03-08 | 北京计算机技术及应用研究所 | 基于抽象语法树的程序代码相似性快速比较方法 |
Non-Patent Citations (2)
Title |
---|
乔延臣等: "基于simhash与倒排索引的复用代码快速溯源方法", 《通信学报》 * |
朱利龙: "相似度算法在源程序比较中的应用", 《电脑知识与技术》, pages 214 - 218 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
CN112579155B (zh) * | 2021-02-23 | 2021-05-18 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
CN115016843A (zh) * | 2022-05-23 | 2022-09-06 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
CN115016843B (zh) * | 2022-05-23 | 2024-03-26 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
CN116166321A (zh) * | 2023-04-26 | 2023-05-26 | 浙江鹏信信息科技股份有限公司 | 代码克隆检测方法、系统及计算机可读存储介质 |
CN116166321B (zh) * | 2023-04-26 | 2023-06-27 | 浙江鹏信信息科技股份有限公司 | 代码克隆检测方法、系统及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kim et al. | Improvement of malware detection and classification using API call sequence alignment and visualization | |
CN112257068A (zh) | 一种程序相似性检测方法、装置、电子设备和存储介质 | |
Alrabaee et al. | Fossil: a resilient and efficient system for identifying foss functions in malware binaries | |
US9621571B2 (en) | Apparatus and method for searching for similar malicious code based on malicious code feature information | |
AU2009302657B2 (en) | Detection of confidential information | |
Zhou et al. | Spi: Automated identification of security patches via commits | |
US9436463B2 (en) | System and method for checking open source usage | |
US7854002B2 (en) | Pattern matching for spyware detection | |
Zhu et al. | Android malware detection based on multi-head squeeze-and-excitation residual network | |
Farhadi et al. | Scalable code clone search for malware analysis | |
CN111930610B (zh) | 软件同源性检测方法、装置、设备及存储介质 | |
WO2021167483A1 (ru) | Способ и система выявления вредоносных файлов в неизолированной среде | |
CN111651768B (zh) | 计算机二进制程序的链接库函数名识别方法及装置 | |
JP6777612B2 (ja) | コンピュータシステムにおけるデータ損失を防止するためのシステム及び方法 | |
Massarelli et al. | Function representations for binary similarity | |
Srinivasan | Tp-detect: trigram-pixel based vulnerability detection for ethereum smart contracts | |
US20240095289A1 (en) | Data enrichment systems and methods for abbreviated domain name classification | |
Rodriguez-Bazan et al. | Android Ransomware Analysis Using Convolutional Neural Network and Fuzzy Hashing Features | |
Alipour et al. | An advanced profile hidden Markov model for malware detection | |
Wang et al. | [Retracted] Hierarchical Attention Graph Embedding Networks for Binary Code Similarity against Compilation Diversity | |
JP2019537177A (ja) | バーコード識別のための方法および装置 | |
Molloy et al. | JARV1S: Phenotype Clone Search for Rapid Zero-Day Malware Triage and Functional Decomposition for Cyber Threat Intelligence | |
CN111832310A (zh) | 一种文本处理方法及装置 | |
Sun et al. | Padetective: A systematic approach to automate detection of promotional attackers in mobile app store | |
Ghanaei et al. | A statistical approach for discovering critical malicious patterns in malware families |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210122 |