欢迎来到天天文库
浏览记录
ID:41666523
大小:100.36 KB
页数:7页
时间:2019-08-29
《子程序花指令加密算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、子程序花指令加密算法根据反汇编器原理,分析现有的花指令加密算法存在的问题,我们提出了一种新的花指令加密算j一^程序花指令加密算法。一.花指令加密基本原理及现状1.花指令加密工作原理软件破解者要想有效的破解软件,需要对程序代码进行静态分析和跟踪。花指令加密可以有效地对抗静态分析,经过花指令变换后的程序代码具有一定的反跟踪能力,能够在很大程度上增加软件破解者对程序逬行分析和跟踪的难度,从而有效地保护软件的知识产权。花指令分为可执行花指令和不可执行花指令。可执行花指令指的是能够正常运行但又不改变原始程序
2、逻辑性的一组无用指令。这类花指令常常用在病毒代码的变形引擎中,但反汇编器能够正常反汇编这些花指令。不可执行花指令又称垃圾字节,是指被插入到原始代码中但又不改变原始程序逻辑性的一组无用字节。被插入的字节不能被执行,否则会使程序的逻辑性遭到破坏,影响程序运行的结果。根据反汇编的工作原理,当插入的最后一个或多个花指令与其后正常的指令被反汇编器识别成一条有效地指令时就能有效地破坏反汇编器的反汇编结果。花指令加密技术就充分利用了这一特点,通过在程序代码中插入一些随机的不完整指令来破坏反汇编器的结果,达到保护
3、软件的目的。2、花指令加密研究现状目前花指令加密中采用较多的一种形式是无条件助炸专指令JMP加花指令脚,这种方法具有简单、易实现的优点,但存在特征码,容易被工具自动去除。另一种形式是直接在程序代码中的JMP指令后添加花指令,这种方法的优点是不存在特征码,但受代码中JMP指令个数的影响,如果JMP指令数太少,则变换效果不明显。从以上内容可以看出,目前花指令加密中采用的多是JMP及各种JMP变形后加花指令的变换方法,这种方法虽然能够在一定程度上破坏反汇编器的反汇编结果,但模糊度较彳氐。因此要想更好的对
4、程序进行花指令加密,就必须应用多个方法,使得产生的花指令既无固定的特征码,又具有较高的模糊度。一.反汇编器工作原理分析目前,大多数反汇编器使用的反汇编方法分为两类:一是线性扫描法,反汇编器从程序代码的第f可执行字节开始依次逐个的将程序中的二进制代码反汇编成相应的汇编指令;另_种方法是递归扫描法,反汇编器沿着程序的指令执行控制流来一步一步进行反汇编,将二进制代码反汇编成相应的汇编指令。在递归扫描中,如果在目标程序的代码中出现了禺弊专分支,反汇编器就会把这个分支地址记录下来,并分头反汇编各个分支中的指
5、令。但反汇编器并不去判断分支代码正确与否,它们只是将般匕转地址的代码进行反汇编。因此,如果在程序代码中加入一些伪分支,使得这些伪分支永远也不可能达到圈,然后在这些伪分支的地方加上一些花指令,那么反汇编器就会将这些花指令作为代码进行反汇编,极有可能使得添加的花指令与其后的代码结合在一起,从而扰乱整个反汇编结果。由于这种方法中,腐炸专伪分支的目的地址是正确的,因此这些花指令是必须要进行反汇编的,花指令也就更容易与其后的程序原代码结合在一起,扰乱反汇编器的反汇编结果。三、子程序花指令加密算法1.加密算法
6、思想在下面提出的子程序花指令加密算法中采用了将可执行花指令与随机选择的不可执行花指令相结合的方法。通过在程序的子程序中构造伪分支,并添加一些花指令,来迷惑反汇编器,达到代码保护的目的。子程序中的伪分支使用XOR指令和CMP指令来进行构造oXOR指令是将两个操作数进行逻辑〃异或〃操作的指令,它具有一个明显的特点,即:某一个数A与同一个数B进行两次〃异或"操作后数值A不变,即有:4=(4XORII)XORR在子程序花指令加密算法中就充分利用了这V点。通过随机插入一个数B,让B与寄存器AL数值中A进行〃
7、异或",然后得到中间结果C,将这个C与B进行比较,如果相等就跳转到添加的花指令的位置,如果不等则19嚴到添加的下一个”异或”指令,即,用C与召再逬行一次”异或”操作,仍然得到原来的寄存器AL中的数值A。伪分支就是在A与B进行了〃异或〃得到C之后比较B与C的值如果相等就跳转到labell的位置,labell的位置是添加的随机花指令;如果不等就跳转到Iabel2的位置zIabel2的位置是添加的第二条XOR指令。只要寄存器AL中的值不为0,那么A和曰〃异或〃之后就永远也不可能等于日,所以labell就
8、是一个伪分支,也就是说程序永远也不可能去执行labell处的指令,因此程序只能去执行Iabel2处的指令。但是由于labell处的地址是合法的目的地址,而且添加的jelabell是合法的助嚴指令,所以反汇编器一定要反汇编labell处的花指令,从而有可能将花指令与其后的代码结合在一起,使反汇编结果出错。1.子程序花指令变换描述子程序花指令加密算法变换前后:变换前变换后调用的子程序入口:调用的子程序入口:inslriichoii1instniction2in>lniclion3•••
此文档下载收益归作者所有