安企神电脑监控软件 在线试用
扫码咨询客服
安企神电脑监控软件、局域网监控软件
首页
功能介绍
产品简介
下载中心
帮助中心
客户列表
关于安企神

子程序花指令加密算法

更新时间:2022-10-28 15:45:31


本文简介:根据反汇编器原理,分析现有的花指令加密算法存在的问题,我们提出了一种新的花指令加密算法——子程序花指令加密算法。一、花指令加密基本原理及现状1、花指令加密工作原理软件破解者要想有效的破解软件,需要对程序代码进行静态分析和跟踪。花指令加密可以有效地对抗静态分析,经过花指令变换后的程序代码具有一定的反跟踪能力,能够在很大程度上增加软件破解者对程序进行分析和跟踪的难度,从而有效地保护软件的知识产权。花指

子程序花指令加密算法

根据反汇编器原理,分析现有的花指令加密算法存在的问题,我们提出了一种新的花指令加密算法——子程序花指令加密算法。

一、花指令加密基本原理及现状

1、花指令加密工作原理

软件破解者要想有效的破解软件,需要对程序代码进行静态分析和跟踪。花指令加密可以有效地对抗静态分析,经过花指令变换后的程序代码具有一定的反跟踪能力,能够在很大程度上增加软件破解者对程序进行分析和跟踪的难度,从而有效地保护软件的知识产权。

花指令分为可执行花指令和不可执行花指令。可执行花指令指的是能够正常运行但又不改变原始程序逻辑性的一组无用指令。这类花指令常常用在病毒代码的变形引擎中,但反汇编器能够正常反汇编这些花指令。不可执行花指令又称垃圾字节,是指被插入到原始代码中但又不改变原始程序逻辑性的一组无用字节。被插入的字节不能被执行,否则会使程序的逻辑性遭到破坏,影响程序运行的结果。根据反汇编的工作原理,当插入的最后一个或多个花指令与其后正常的指令被反汇编器识别成一条有效地指令时,就能有效地破坏反汇编器的反汇编结果。花指令加密技术就充分利用了这一特点,通过在程序代码中插入一些随机的不完整指令来破坏反汇编器的结果,达到保护软件的目的。

2、花指令加密研究现状

目前花指令加密中采用较多的一种形式是无条件跳转指令JMP加花指令脚,这种方法具有简单、易实现的优点,但存在特征码,容易被工具自动去除。另一种形式是直接在程序代码中的JMP指令后添加花指令,这种方法的优点是不存在特征码,但受代码中JMP指令个数的影响,如果JMP指令数太少,则变换效果不明显。从以上内容可以看出,目前花指令加密中采用的多是JMP及各种JMP变形后加花指令的变换方法,这种方法虽然能够在一定程度上破坏反汇编器的反汇编结果,但模糊度较低。因此要想更好的对程序进行花指令加密,就必须应用多个方法,使得产生的花指令既无固定的特征码,又具有较高的模糊度。

二、反汇编器工作原理分析

目前,大多数反汇编器使用的反汇编方法分为两类:一是线性扫描法,反汇编器从程序代码的第一个可执行字节开始依次逐个的将程序中的二进制代码反汇编成相应的汇编指令;另一种方法是递归扫描法,反汇编器沿着程序的指令执行控制流来一步一步进行反汇编,将二进制代码反汇编成相应的汇编指令。

在递归扫描中,如果在目标程序的代码中出现了跳转分支,反汇编器就会把这个分支地址记录下来,并分头反汇编各个分支中的指令。但反汇编器并不去判断分支代码正确与否,它们只是将跳转地址的代码进行反汇编。因此,如果在程序代码中加入一些伪分支,使得这些伪分支永远也不可能达到圈,然后在这些伪分支的地方加上一些花指令,那么反汇编器就会将这些花指令作为代码进行反汇编,极有可能使得添加的花指令与其后的代码结合在一起,从而扰乱整个反汇编结果。由于这种方法中,跳转伪分支的目的地址是正确的,因此这些花指令是必须要进行反汇编的,花指令也就更容易与其后的程序原代码结合在一起,扰乱反汇编器的反汇编结果。

三、子程序花指令加密算法

1、加密算法思想

在下面提出的子程序花指令加密算法中,采用了将可执行花指令与随机选择的不可执行花指令相结合的方法。通过在程序的子程序中构造伪分支,并添加一些花指令,来迷惑反汇编器,达到代码保护的目的。

子程序中的伪分支使用XOR指令和CMP指令来进行构造o XOR指令是将两个操作数进行逻辑“异或”操作的指令,它具有一个明显的特点,即:某一个数A与同一个数B进行两次“异或”操作后数值A不变,即有:

子程序花指令加密算法
在子程序花指令加密算法中就充分利用了这一特点。通过随机插入一个数B,让B与寄存器AL数值中A进行“异或”,然后得到中间结果C,将这个C与B进行比较,如果相等就跳转到添加的花指令的位置,如果不等则跳转到添加的下一个“异或”指令,即,用C与召再进行一次“异或”操作,仍然得到原来的寄存器AL中的数值A。

伪分支就是在A与B进行了“异或”得到C之后,比较B与C的值,如果相等就跳转到labell的位置,labell的位置是添加的随机花指令;如果不等就跳转到labe12的位置,labe12的位置是添加的第二条XOR指令。只要寄存器AL中的值不为O,那么A和曰“异或”之后就永远也不可能等于日,所以labell就是一个伪分支,也就是说程序永远也不可能去执行labell处的指令,因此程序只能去执行labe12处的指令。但是由于labell处的地址是合法的目的地址,而且添加的je labell是合法的跳转指令,所以反汇编器一定要反汇编labell处的花指令,从而有可能将花指令与其后的代码结合在一起,使反汇编结果出错。

2、子程序花指令变换描述

子程序花指令加密算法变换前后:

子程序花指令加密算法

基本加密算法概要描述如下:

(1)找到子程序调用候选块,得到子程序调用的指针p;

(2)进入子程序模块,找到MOV指令,产生一个随机数m;

(3)在MOV指令后面添加两条XOR AL,m指令;

(4)在添加的第一条XOR指令后添加CMP指令;

(5)在CMP指令后添加JE和JNE指令,并设置JNE的跳转;

(6)在JNE指令后添加上n条花指令;

(7)设置JE的跳转;

(8)变换完成,程序继续执行,扫描寻找下一个需要变换的子程序模块。

子程序花指令加密算法工作流程见图1。

子程序花指令加密算法

3、迷惑度分析

子程序花指令加密算法最为关键的是添加的花指令反汇编器是一定要进行反汇编的,所以,当添加的不完整花指令是正确的跳转位置时,它们就更容易与其后的代码结合在一起,从而有效地扰乱程序代码。而以前的各种JMP加花指令的形式,在反汇编器采用递归扫描方法反汇编代码时,由于花指令不在程序的控制流程内,所以反汇编器不用反汇编这些代码。

在本加密算法中,由于与寄存器做“异或”运算的数值m是随机产生的,添加的佗条花指令也是随机产生的,这保证了该加密算法具有一定的随机性。两条XOR指令同时与AL中的值进行“异或”操作,保证了AL中的值在变换前后没有改变。在比较指令CMP al,m中,由于al中的值与m是不相等的,所以程序也不可能去执行JE labell指令,而只能去执行JNE labe12指令,因此程序在变换前后的逻辑一致性没有遭到破坏,仍然可以完成相同的功能。

四、子程序花指令加密算法实践

1、实验步骤与结果

(1)实验环境

硬件环境:AMD SempronlMProcessor 3200+1.79 GHz/768 MMemory/19.5 G HardDisk。
软件环境:操作系统Windows XP+SP2/JCEE变换器/OIIy-dbg反汇编调试器/实验用可执行程序0928.exe。其中JCEE变换器是为实现变换而编制的测试程序,程序0928.exe是用来进行变换的实验用程序。

(2)实验步骤

a、对实验用原程序进行反汇编,得到汇编伪代码P;

b、用JCEE变换器对原程序进行变换,得到变换后的程序;

c、用反汇编器对汇编后的程序进行反汇编,得到汇编伪代码P'。

(3)实验结果

候选块的大小为58条指令,其中有4个子程序调用指令。变换前后的程序代码分别如图2和图3所示(选定其中的一个子程序进行分析,这个子程序共有12条指令)。

子程序花指令加密算法

2、实验分析

从图3可以看出,子程序在经过变换后,JE跳转位置处的不完整花指令确实与其后的若干个正常代码结合在一起,使得反汇编器的反汇编结果出错。

从以上的图2、图3中也可以分析出,原来的12条指令有2条指令和添加的花指令结合在一起,使得反汇编器出现了错误。而且,添加XOR指令时是添加的两条XOR指令,但是第二条XOR指令也与花指令结合到一起。因此,在这个子程序中共有3条指令出现了反汇编错误。

经验证,变换后的程序是可以运行的,而且和没有经过变换的程序具有一样的输出结果,也就是程序在经过变换后其逻辑一致性没有受到破坏。对变换后的结果使用花指令自动去除工具,也不能将程序中的花指令自动去除。这是由于JE指令是作为原始代码的一个组成部分是不能被去除的,否则程序逻辑性会遭到破坏,程序就无法正常运行了。

子程序花指令加密算法

小知识之反汇编

反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。总之一句话:软件一切神秘的运行机制全在反汇编代码里面。

立即下载试用

随机花指令加密算法

在对已有的花指令加密策略及其存在的问题进行分析的基础上,我们提出了随机花指令加密算法。

一、花指令加密方法及研究现状

1、花指令加密的工作原理

动态跟踪是软件破解的基本过程,如果程序代码具有反动态跟踪的能力,那软件被破解的可能性就变小了。花指令加密可以应用在反跟踪和反静态分析中。

花指令加密方法需要在原始指令的适当位置插入一些无用的字节。这些被插入的字节不能被执行,否则原始指令的逻辑会遭到破坏,这是花指令变换的基本条件。根据反汇编的工作原理,只有当花指令的最后一个或两个字节同正常指令的开始几个字节放反汇编器识别成一条指令时,才能有效破坏反汇编的结果。插入的花指令应当是一些不完整的指令,被插入的不完整指令可以是随机选择的。

2、研究状况及存在的问题

目前采用比较多的一种花指令形式是无条件跳转指令JMP加花指令。这种策略通过简单变换后的各种扩展形式,在一定程度上增强了花指令的生存能力,但是这些扩展形式还是存在特征码,用工具仍可以自动去除。

另外一种形式是直接在原代码中的JMP指令后添加花指令,缺点是受代码中JMP指令个数的限制,如果JMP指令过少,则代码变换效果不明显。

综合而盲,要想提高模糊度(反汇编器产生错误结果的程度),就必须应用多个方法,并保证方法使用的随机性和方法本身的随机性,使产生的花指令没有固定的特征码。由此,我们提出随机袍指令加密算法的目的就是保证花指令无特征码并且具有较高的模糊度。

二、随机花指令加密算法

1、加密算法思想

根据的文的分析,目前采用花指令进行加密的问题主要在于存在特征码,容易用工具自动去除,其次是模糊度不够,效果不明显。对于这两个问题,本文提出两种策略来加以解决。第一种策略是JMP加花指令的扩展形式,简称为“JMP扩展”。这种变换保证其具有足够的随机度,即使存在特征值,但特征值的数量巨大,完全列举所有情况也需要很多工作量。第二种策略是将代码中的条件跳转指令变换为反条件跳转指令加JMP指令的形式,简称为"JMC变换”口这个策略进一步增加JMP指令的数量以便可以添加更多花指令。

加密算法的具体思想是:首先将原始指令分成若干个候选块并确定一个候选块随机序列,然后对每一个候选块进行如下处理:应用“JMP扩展”策略对候选块内指令进行变换,然后应用“JMC变换”策略对候选块内条件跳转指令进行变换,最后在变换后的代码的JMP指令后随机添加花指令。

2、"JMP扩展¨加密算法描述

JMP扩展是用三条JMP指令对一段正常的指令进行变换,具体方法如下:

随机花指令加密算法

跳过的正常指令个数是随机选取的,但是个数不能超过候选块的指令数目。图1给出了“JMP扩展”的工作流程。

随机花指令加密算法

加密算法描述:

1)取到一指令候选块B,指令指针P指示候选块的第一条指令;

2)产生一随机数m,m的大小在B的指令数目内;

3)从指针P开始处向后扫描m条指令,确定这m条指令的长度Z;

4)在P前插入第一条JMP指令JMP+(l+2),其中2是第二条JMP指令长度2字节;

5)在P+m后插入第二条JMP指令JMP+2,其中2是第三条JMP指令长度2字节;

6)在P+m+1后插入第三条JMP指令JMP - (l+2)。跳转到正常指令处。

3、"JMC变换”加密算法描述

JMC变换是将一条条件跳转指令变换为反条件跳转指令加JMP指令,具体方法如下:

随机花指令加密算法

所有的条件跳转指令都可以做这种变换。Intel x86指令集中条件跳转指令编码方式有其特点,一条条件跳转指令的操作码和0x01异或就可以得到其反条件跳转指令。根据这个特点,“JMC变换”就变得容易多了。图2给出了“JMC变换”的工作流程。

随机花指令加密算法

加密算法描述:

1)取到一指令候选块B,指令指针P指示候选块的第一条指令;

2)如果指令P为条件跳转指令则进行如下操作,否则跳转到8);

3)区分指令的操作码opcode和操作数opmnd;

4)将opcode与0x01异或得到反条件跳转操作码opcode;

5)根据oprand判断跳转类型足短跳转还是长跳转,得到oprand;

6)将指令JFI变换为opcode’+oprand’,其中oprand’是下条JMP指令的长度;

7)在P后插入JMP +oprand指令;

8)指令指针尸指向下一条指令;

9)如果8中指令全部处理完则结束,否则跳转到2)。

4、加密算法描述

加密算法首先对原始指令进行分块操作,每个分块被称为候选块,分块操作的目的一是为了使“JMP扩展”操作不会重叠影响,二是可以根据空闲空间的多少灵活调整分块大小。分块的大小可根据空闲空间多少灵活确定。确定一个分块的随机序列的目的是假如空闲空问不够,那么随机变换的候选块都不会一样。随机花指令加密算法会调用
前面的两种策略对代码变换后,在JMP指令后添加花指令。图3给出了随机花指令加密算法的工作流程。

随机花指令加密算法

随机花指令加密算法描述:

首先对所有指令进行分块,对候选块产生一个随机序列P,例如P(4,1,3,.7,2,5,6…),下面按照随机序列的顺序对所有分块如下处理:

1)如果空间不够则退出,否则进行下面操作;

2)对一个候选块进行一次“JMP扩展”操作;

3)对一个候选块中的条件跳转指令进行“JMC变换”操作;

4)在候选块中的JMP指令后随机添加花指令;

5)平衡代码段剩余可用空间;

6)如果所有候选块处理完毕则向下执行,否则取下一个候选块并眺转到1);

7)平衡所有跳转指令跳转位置;

8)指令地址偏移重定位;

9)其他数据、函数地址重定位。

三、随机花指令加密算法实践

1、随机花指令算法的实验步骤与结果

1)实验环境

硬件环境:celcronl. 7GHz/256M Memoy/20G HardDisk软件环境;操作系统Windows XP+SP2/JCEE变换器/W32Dasm8. 93/实验用可执行程序test.exe。其中JCEE变换器是为实现变换而编制的测试程序。W32Dasm是应用广泛的反汇编器调试器,程序test.cxe是用来进行变换的程序。

2)实验步骤

a)对实验用原程序进行反汇编,得到汇编伪码P;

b)用JCEE变换器对原程序进行变换,得到变换后的程序;

c)用反汇编器对变换后的程序进行反汇编,得到汇编伪码P;

d)比较P和P’得到结论R。

3)实验结果

候选块的大小选为10条指令,每条JMP指令后最大添加8个字节花指令。 teat. exe程序经变换后得到的数据如表1所示。

随机花指令加密算法

经验证,采用本随机花指令加密方法对test. exe文件进行花指令变换,采用花指令去除工具对变换后的结果进行花指令搜索,均未能发现相关的花指令特征。

2、实验分析

经过‘‘JMP扩展”变换后的代码要跳过一定数量的正常指令,然后在三条JMP指令后添加花指令,总共存在的特征值是8*8*8*10 =5120种,如果基数扩大,特征值数量更多。因此想要定义所有的特征不太实际。在JMP后添加了花指令后不能自动去除还有一个原因是JMP指令作为原始代码的组成部分是不能被去除的,否则程序逻辑遭到破坏。

小知识之花指令

花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种指令:jmp, call, ret的一些堆栈技巧,位置运算,等等。

本文为收集整理,文章部分观点不代表本站观点,如有侵权或其它问题请反馈客服。https://www.wgj7.com/cjwt/16412.html