一种基于模糊聚类的软件保护虚拟机攻击方法与流程

文档序号:12123316阅读:214来源:国知局

本发明涉及计算机技术,尤其涉及一种基于模糊聚类的软件保护虚拟机攻击方法。



背景技术:

软件保护虚拟机是目前保护强度最高的软件保护方案。在对软件保护虚拟机保护的程序进行分析的时候,通常有如下两种方案。第一种是完全人工还原,也就是采用传统的静态看流程,动态看数据的逆向思路,将程序放入IDA和OllyDbg中执行,单步执行,一条条指令反复分析,最终破解程序。这种思路的不足之处在于费时费力,尤其是对于软件保护虚拟机这种保护强度很高的保护方案来说,并不具有实际上的可操作性。第二种思路是思路主要是逆向虚拟机结构,化简被混淆指令,将虚拟指令转换为对应的x86指令的方法来保护被还原的代码。这种思路的不足之处在于,对虚拟机的结构有较高的要求,不具有通用性。



技术实现要素:

本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种基于模糊聚类的软件保护虚拟机攻击方法,该方法结合FCM算法和N-Perm算法,提取软件保护虚拟机中的Handler(虚拟机句柄),从而提高软件保护虚拟机的攻击逆向效率。

本发明解决其技术问题所采用的技术方案是:一种基于模糊聚类的软件保护虚拟机攻击方法,包括以下步骤:

1)选取被软件保护虚拟机保护的程序段,采用准确度较高的反汇编引擎ODDisassm对程序进行反汇编处理;

2)提取程序执行流,将程序放入OllyDbg中执行到程序结束位置,用OllyScript记录被保护程序执行的所有指令和执行该指令后的寄存器的状态,将记录的内容作为数据流文件,以<指令,操作数1,操作数2,通用寄存器,标志位寄存器>的格式按行存储在本地文件中;

3)分析步骤2)产生的数据流文件,提取Handler,具体如下采用递归方案对其进行裁剪。实施过程为如果第N行数据(即上文所提取到的按照<指令,操作数1,操作数2,通用寄存器,标志位寄存器>的格式存储在本地的文件)和第M行数据在执行前后其通用寄存器和标志位寄存器的值完全相同,那么第M-1行到第N行之间的数据流可以剪除,直接用NOP指令填充。

4)采用N-Perm算法提取各个Handler的特征值;

5)对Handler按照特征值相关性采用模糊聚类算法进行聚类;

6)得到上述的聚类结果之后,分析其语义,带入分析程序段,给出被保护程序的流程图,从而实现对软件保护虚拟机的攻击。

按上述方案,所述步骤1)中采用OllyDbg反汇编引擎对程序进行反汇编处理。

按上述方案,所述步骤3)中,提取Handler为采用递归方案对垃圾指令进行剪裁,其递归方案为分析从前到后每一条指令,如果在此过程中,指令块在执行前后,对通用寄存器和标志位寄存器的值没有任何影响的话那么即可将第一条指令和第N条指令之间的区块认定为无效Handler,用NOP对其进行填充。

按上述方案,所述步骤5)中对Handler特征值进行聚类分析采用FCM模糊聚类算法。

FCM算法是将N个L维向量分为C个模糊组,通过迭代不断更新隶属度以及聚类中心,最小化目标函数对数据进行聚类。其中目标函数为公式(1):

其中,J为聚合度,U是隶属度矩阵中的元素,V是指是对应于每个聚类的聚类中心,m是指m指的是模糊加权系数,d(xi,vc)表示的是第i个数据点与第c个聚类中心的欧式距离。

本发明产生的有益效果是:能够完成对软件保护虚拟机Handler的自动收集,并按照代码特征的关联度进行自动归类。与以往的方法相比,效率有了很大提高,且通用性较强,为之后的软件保护虚拟机自动攻击研究提供了基础。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明实施例的方法流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明软件保护虚拟机攻击方案测试,本测试用例采用被VMP2.0(Virtual Machine Protect)保护后的程序片段进行测试,采用准确度高的反汇编引擎对程序进行反汇编处理,采用IDA Pro对程序流程图进行观察对比处理前后的程序,所采用的计算机系统平台为Windows 7 64位旗舰版;CPU:Intel I5 4200M;内存:DDR3 8G;硬盘:镁光M4固态硬盘,读数据速度500M/s,写入速度270M/s。

本发明基于模糊聚类的软件保护虚拟机攻击方案,使得软件保护虚拟机的攻击方案实现了一定程度上的自动化处理,为下一步对软件保护虚拟机进行攻击和保护提供了基础,参照图1所示,该方案的具体步骤为:

一、选取被VMP保护后的程序片段

本实施例中,选取被VMP保护后的程序片段,采用OllyDbg反汇编引擎对程序进行反汇编处理,并且标明被保护程序段的起始位置和结束位置,其中VMP采用2.0版本。确定被保护程序段起始位置和结束位置的方法为,采用字符串定位方式,因为在VMP发布的SDK中,对被保护的程序起始位置和结束位置字符串分别为:“VMPBEGIN”,“VMPEND”。选取的被软件保护虚拟机保护的程序段是被现有的软件保护虚拟机进行了代码膨胀和指令流混淆。本实施例中,为了简化操作,在选取程序片段的时候,只是选取虚拟机化保护手段,而不采取和其他保护方式相结合的混淆方式。

二、提取程序执行流

本实施例中,将程序放入OllyDbg中执行到程序结束位置,用OllyScript记录程序执行过程中所执行的所有指令,将其按照<指令,操作数1,操作数2,通用寄存器,标志位寄存器>的格式存储在本地文本文件中。

三、分析数据流文件

本实施例中,结合提取程序执行流步骤中获取到的文本文件数据,采用递归方案对其进行裁剪。实施过程为如果第N行数据和第M行数据在执行前后其通用寄存器和标志位寄存器的值完全相同,那么两行之间的数据流可以剪除,直接用NOP指令填充。

在下图所示表中,所截取到的数据片段和处理过后的指令流片段分别为表1和表2所示。

表1剪除之前的指令流数据片段

表2剪除处理之后的指令流数据片段

其中,第(a)数据和第(c)行数据的寄存器完全相同,故而将(b),(c)两行数据采用NOP指令填充,而寄存器的值全部替换为第(a)行数据中寄存器的值。

四、提取特征值

本实施例中,采用N-Perm算法提取代码的特征值。以上一步中所提取的一个代码片段为例,给出其代码特征值。代码片段如下所示。

代码片段

push ebp;

mov eax,ebx;

sub eax,ebx;

push edi;

push esi;

lea eax,[edi];

push ebx;

mov eax,esi;

mov ebx,edx;

使用1-Perm算法,得到模式({push,mov,sub,lea,sub}),{4,3,1,1,1});使用2-Perm算法,得到模式({push-mov,mov-sub,sub-push,push-push,push-lea,lea-mov,mov-mov},{1,1,1,2,3,1,1}),其余N=3,N=4情况与之相似。

五、采用模糊聚类算法对其进行模糊聚类

在本例中,因为提取到的Handler极多,所以采用三个比较有代表性的代码片段为例说明模糊聚类算法在此处的应用。代码片段如表3所示。

表3测试代码片段

用N-Perm算法对其进行聚类,当N=1,2时,特征值如表3,表4所示。

表4 N=1时,代码特征值

表5 N=2时,代码的特征值

由表4和表5所知,数据段(a)(b)(c)的特征即可以用二维数组表示,分别为表3和表4第一行,空位置用0填充。将得到的三个特征值,采用公式(1),将起始C的值设置为2,那么可以得出:Jab=0.84;Jac=0.31;Jbc=0.16,其中Jab是指(a)(b)两个程序片段之间的关联度,Jac是指(a)(c)两个程序片段之间的关联度,Jbc是指(b)(c)两个程序片段之间的关联度;因此可以判定(a)(b)程序段相关度高,将其归为一类。(a)与(c),(b)与(c)相关度都很差,因此不是同语义Handler。

六、人工分析上一步所提取到的Handler,并对其进行分类,并画出程序的流程图。完成对程序的攻击。

应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1