一种基于遗传算法的软件代码混淆操作选择方法与流程

文档序号:11432466阅读:349来源:国知局

本发明属于信息安全技术领域,涉及一种基于遗传算法的软件代码混淆操作选择方法。



背景技术:

随着软件逆向技术的快速发展,软件出售之后,被非授权用户破解的可能性有所提高,一旦攻击者通常利用静态反汇编或动态调试等逆向工程技术对软件的可执行程序进行分析和破解,那么,将会盗取该软件核心算法等知识产权,还可能对软件和灌装参数表等进行篡改,谋取利益,甚至寻找软件中的安全漏洞,伺机利用。

软件代码混淆技术是防止软件被非授权用户破解的一个有效手段,且在软件代码保护中逐渐发挥越来越大的作用。软件代码混淆将程序代码进行混淆处理,使得程序功能保持不变,但具体程序结构已经发生了比较大的变化,程序就转换成难以被他人理解和修改的程序,必须付出较大的代价才能够理解程序,这样就极大的保护了程序本身的知识产权。

由于软件代码混淆对于软件本身的性能会有一定程度的影响,因此,要平衡性能和混淆程度,得到满意的代码混淆工作。当前研究者的工作主要集中在代码混淆方法和技术的选择和探索方面,甚少提出平衡软件可执行程序本身性能和代码混淆程度的优化方法。《基于垃圾代码的控制流混淆算法》一文中,曾经提出“当操作模块数过大时(大于某个值m),则采用hash函数选取操作模块,进行混淆操作,以限制混淆操作的次数,减小程序混淆后的时空开销”的方法,但是该方法随机性较强,在软件代码性能和混淆程度平衡的优化选择方面尚有欠缺。

因此,需要提出一种优化算法,在进行软件代码混淆的过程中,对代码混淆操作进行优化选择,选择既能对软件代码进行有效的充分的混淆,又能够将对软件性能的影响降到最低的选择方法,提高软件代码混淆的功效。



技术实现要素:

本发明解决的技术问题是:克服现有技术的不足,提供一种基于遗传算法的软件代码混淆操作选择方法,实现了对软件代码有效的充分的混淆,同时将对软件性能的影响降到最低,提高了软件代码混淆的有效性。

本发明的技术解决方案是:一种基于遗传算法的软件代码混淆操作选择方法,包括步骤如下:

(1)建立混淆操作模块库,所述混淆操作模块库由混淆操作构成,混淆操作包括控制流混淆操作、数据混淆操作以及综合控制流混淆和数据混淆的混淆操作;

(2)找到待混淆可执行程序的入口,对待混淆可执行程序进行反汇编;

(3)对反汇编后的代码进行遍历,寻找其中的jump、call、xor代码,以此作为混淆操作的加入位置;

(4)从混淆操作模块库中随机选择若干个混淆操作,将所选的混淆操作分配给各个混淆操作的加入位置,形成n种混淆操作分配方式;

(5)采用遗传算法对n种混淆操作分配方式进行优化选择,选择最优的混淆操作分配方式作为本次软件代码混淆操作的选择结果。

所述步骤(5)的实现方法如下:

(2.1)确定混淆操作组合为遗传算法的特征,对n种混淆操作分配方式进行编码,形成n个染色体,n个染色体构成遗传算法的种群;

(2.2)为每个染色体设定适应度,其中染色体ri的适应度为fi,fi为经过染色体ri混淆操作后的软件代码响应时间的倒数;

(2.3)每个染色体进行交叉或变异;

(2.4)当达到设定的遗传代数后,选择适应度最高的染色体rh,作为最优的混淆操作分配方式。

所述步骤(2.1)中,染色体ri={h1,h2…hj…hm},其中hj表示第j个加入位置处分配的混淆操作组合,hj可以为空。

所述步骤(2.3)中,对染色体ri进行交叉的方法如下:

从ri中随机选取一个特征值hj,对于该特征值的两边特征hj-1和hj+1进行交叉处理,得到交叉之后的结果;

对染色体ri进行变异的方法如下:

从ri中随机选取一个特征值hc,将hc的混淆操作组合变异为混淆操作模块库中其他混淆操作的组合,实现变异。

本发明与现有技术相比的优点在于:

(1)本发明建立了包括多种混淆实现方式的混淆操作模块库,根据可执行程序中加入位置的不同,形成多种混淆操作分配方式,每种混淆操作分配方式均为不同类型不同实现方式的混淆操作组合,从而能够实现对待混淆可执行程序的充分有效混淆。

(2)本发明方法采用遗传算法对可执行程序混淆操作的多个混淆操作分配方式,进行选择、交叉和变异,优化选择出对可执行程序响应时间影响最小的混淆操作分配方式,避免了随机选择方式的不足,使得选择得到的软件代码混淆操作能够在充分进行代码混淆的前提下,尽可能小的影响代码本身的运行效率,将对软件性能的影响降到最低。

附图说明

图1为本发明流程图。

具体实施方式

如图1所示,本发明提出一种基于遗传算法的软件代码混淆操作选择方法,具体步骤包括:

(1)建立混淆操作模块库,混淆操作模块库由混淆操作构成,混淆操作包括控制流混淆操作、数据混淆操作以及综合控制流混淆和数据混淆的混淆操作。例如,控制流混淆操作包括在程序里面加入多余跳转、重新组织程序里面的控制流等,数据混淆操作包括对变量进行重组、对数值变量进行混合变换等。

(2)找到待混淆可执行程序的入口,对待混淆可执行程序进行反汇编。

(3)对反汇编得到的代码进行遍历,寻找其中的jump、call、xor代码,以此作为混淆操作的加入位置。

一种实现方式为:

(3.1)建立空的指令链表;

(3.2)判断第k行程序是否为jump、call、xor指令,如果是,则将该代码段存入指令链表,如果不是,则进入步骤(3.3),k的初值为1;

(3.3)判断是否为最后一条指令,如果为否,则k的值加1,返回步骤(3.2);如果是最后一条指令,则进入步骤(4)。

(4)从混淆操作模块库中随机选择若干个混淆操作,并组合,将组合后的混淆操作分配给各个混淆操作的加入位置,形成n种混淆操作分配方式。

(5)采用遗传算法对n种混淆操作分配方式进行优化选择,选择最优的混淆操作分配方式作为本次软件代码混淆操作的选择结果。

采用遗传算法对n种混淆操作分配方式进行优化选择的具体实现方法为:

1)特征选择及编码

针对遗传算法,确定混淆操作组合为遗传算法的特征。

对n种混淆操作分配方式进行编码,形成n个染色体,n个染色体构成遗传算法的种群,ri={h1,h2…hj…hm},其中hj表示第j个加入位置处分配的混淆操作组合,hj可以为空。j∈[1,m]。m表示待混淆可执行程序需要加入混淆操作的位置数量。h1,h2…hj…hm为遗传算法的特征。

n个染色体构成遗传算法的种群r,

r={r1,r2…ri…rn}

2)适应度确定

采用遗传算法中的轮盘赌选择方法,每一个染色体占据虚拟轮盘中的一个扇区,各染色体占据的扇区面积正比于适应度数值,染色体ri对应的适应度为fi,fi为经过染色体ri混淆操作后的软件代码响应时间的倒数,软件代码响应时间越长,所对应的染色体适应度越低,反之亦然。

3)特征交叉及变异

采用简单交叉的方法,在每个染色体中随机设定一个交叉点,实行交叉的时候,该点前后两个特征进行交换,生成一个新的染色体。即,从染色体ri中随机选取一个特征值hj,对于特征值的两边特征hj-1和hj+1进行交叉处理,得到交叉之后的结果。

变异过程中,随机选择染色体ri一个特征值hc,将hc的混淆操作组合变异为混淆操作模块库中其他混淆操作组合,实现变异。c∈[1,m]。

4)遗传终止条件

预先设定遗传代数d,经过选择、交叉和变异操作,到规定代数d之后,选择适应度最高的染色体rh,作为优化选择的结果。

(5)遗传算法结束后,rh所对应的混淆操作分配方式即为本次软件代码混淆操作的选择结果。

本发明首先建立混淆操作模块库,然后从反汇编后的代码中确定混淆操作的加入位置,从混淆操作模块库中选择多个混淆操作,并组合,形成n种混淆操作分配方式;最后采用遗传算法,对形成的n种混淆操作分配方式进行优化筛选,筛选出适应程度最高的混淆操作分配方式。本发明对可执行程序的代码混淆操作进行筛选,能够综合考虑程序响应时间和代码混淆程度两个因素,在对软件代码进行有效充分混淆的前提下,尽量提高程序响应时间,极大的减少程序混淆对于程序执行效率的影响。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

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