子程序花指令加密算法.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子程序花指令加密算法 根据反汇编器原理,分析现有的花指令加密算法存在的问题,我们提出了一种新的花指令加 密算j一^程序花指令加密算法。 花指令加密基本原理及现状 花指令加密工作原理 软件破解者要想有效的破解软件,需要对程序代码进行静态分析和跟踪。花指令加密可以有 效地对抗静态分析,经过花指令变换后的程序代码具有一定的反跟踪能力,能够在很大程度 上增加软件破解者对程序逬行分析和跟踪的难度,从而有效地保护软件的知识产权。 花指令分为可执行花指令和不可执行花指令。可执行花指令指的是能够正常运行但又不改变 原始程序逻辑性的一组无用指令。这类花指令常常用在病毒代码的变形引擎中,但反汇编器 能够正常反汇编这些花指令。不可执行花指令又称垃圾字节,是指被插入到原始代码中但又 不改变原始程序逻辑性的一组无用字节。被插入的字节不能被执行,否则会使程序的逻辑性 遭到破坏,影响程序运行的结果。根据反汇编的工作原理,当插入的最后一个或多个花指令 与其后正常的指令被反汇编器识别成一条有效地指令时就能有效地破坏反汇编器的反汇编 结果。花指令加密技术就充分利用了这一特点,通过在程序代码中插入一些随机的不完整指 令来破坏反汇编器的结果,达到保护软件的目的。 2、 花指令加密研究现状 目前花指令加密中采用较多的一种形式是无条件助炸专指令JMP加花指令脚,这种方法具有 简单、易实现的优点,但存在特征码,容易被工具自动去除。另一种形式是直接在程序代码 中的J MP指令后添加花指令,这种方法的优点是不存在特征码,但受代码中JMP指令个数 的影响,如果JMP指令数太少,则变换效果不明显。从以上内容可以看出,目前花指令加 密中采用的多是JMP及各种JMP变形后加花指令的变换方法,这种方法虽然能够在一定程 度上破坏反汇编器的反汇编结果,但模糊度较彳氐。因此要想更好的对程序进行花指令加密, 就必须应用多个方法,使得产生的花指令既无固定的特征码,又具有较高的模糊度。 反汇编器工作原理分析 目前,大多数反汇编器使用的反汇编方法分为两类:一是线性扫描法,反汇编器从程序代码 的第f可执行字节开始依次逐个的将程序中的二进制代码反汇编成相应的汇编指令;另_ 种方法是递归扫描法,反汇编器沿着程序的指令执行控制流来一步一步进行反汇编,将二进 制代码反汇编成相应的汇编指令。 在递归扫描中,如果在目标程序的代码中出现了禺弊专分支,反汇编器就会把这个分支地址记 录下来,并分头反汇编各个分支中的指令。但反汇编器并不去判断分支代码正确与否,它们 只是将般匕转地址的代码进行反汇编。因此,如果在程序代码中加入一些伪分支,使得这些伪 分支永远也不可能达到圈,然后在这些伪分支的地方加上一些花指令,那么反汇编器就会将 这些花指令作为代码进行反汇编,极有可能使得添加的花指令与其后的代码结合在一起,从 而扰乱整个反汇编结果。由于这种方法中,腐炸专伪分支的目的地址是正确的,因此这些花指 令是必须要进行反汇编的,花指令也就更容易与其后的程序原代码结合在一起,扰乱反汇编 器的反汇编结果。 三、 子程序花指令加密算法 加密算法思想 在下面提出的子程序花指令加密算法中采用了将可执行花指令与随机选择的不可执行花指 令相结合的方法。通过在程序的子程序中构造伪分支,并添加一些花指令,来迷惑反汇编器, 达到代码保护的目的。 子程序中的伪分支使用XOR指令和CMP指令来进行构造o XOR指令是将两个操作数进行 逻辑〃异或〃操作的指令,它具有一个明显的特点,即:某一个数A与同一个数B进行两 次〃异或操作后数值A不变,即有: 4 = (4 XOR II) XOR R 在子程序花指令加密算法中就充分利用了这V点。通过随机插入一个数B ,让B与寄存器 AL数值中A进行〃异或,然后得到中间结果C,将这个C与B进行比较,如果相等就跳 转到添加的花指令的位置,如果不等则19嚴到添加的下一个”异或”指令,即,用C与召 再逬行一次”异或”操作,仍然得到原来的寄存器AL中的数值A。 伪分支就是在A与B进行了 〃异或〃得到C之后比较B与C的值如果相等就跳转到labell 的位置,labell的位置是添加的随机花指令;如果不等就跳转到Iabel2的位置z Iabel2的 位置是添加的第二条XOR指令。只要寄存器AL中的值不为0,那么A和曰〃异或〃之后 就永远也不可能等于日,所以labell就是一个伪分支,也就是说程序永远也不可能去执行 labell处的指令,因此程序只能去执行Iabel2处的指令。但是由于labell处的地址是合法 的目的地址,而且添加的je labell是合法的助嚴指令,所以反汇编器一定要反汇编labell 处的花指令,从而有可能将花指令与其后的代码结合在一起,使反汇编结果出错。 子程序花指令变换描述 子程序花指令加密算法变换前后: 变换

您可能关注的文档

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档