变换指令存储加密技术的制作方法

文档序号:6424987阅读:98来源:国知局
专利名称:变换指令存储加密技术的制作方法
技术领域
本方法发明用于计算机软件的安全保护,是一种新的加密保护技术。该技术针对软件的破解,能极大的提高软件的抗破解能力。通过程序的方式实现,可以在单独的计算机上使用。目前在所有使用Intel 80×86指令集的各种平台上都可使用,与操作系统和硬件无关。
背景技术
软件开发者为了保护自己的权益,对软件会施加一些保护措施,如使用注册码,加密光盘等。但破解者则能通过对软件的分析,非正当的解除这些保护措施。因此如何防止被破解,就形成了软件的加密保护技术。
破解软件通过对软件的调试实现,需使用调试器。一般将破解分成两类方法1.静态分析。先将软件的机器码全部反汇编成汇编代码,再分析汇编码,找出加密的原理。
2.动态跟踪。在软件的运行过程制造中断,以观察其运行到不同的指令时寄存器、内存内容等环境值的变化。
两种方法一般配合使用,对代码的分析能指导如何跟踪软件,而跟踪则加快对软件的分析。而目前的加密保护技术也主要分成两种1.防范破解所用的技术。破解时会使用调试、跟踪技术,因此根据目前主要调试器的特征,和被调试、跟踪状态的特征来防范,即反调试、反跟踪技术。
2.防范破解的原理。破解的主要步骤为取得代码、分析代码、解除保护。针对每个步骤现在都有保护技术,防止取得代码主要是对代码加密和反DUMP技术;防止分析代码主要是花指令技术和运行时间检验技术;防止解除保护主要是完整性校验和对代码加密技术。
不论多复杂的加密,只要破解者能慢慢的分析,就总有破解的一天。因此防止对软件的分析,是加密保护的一个重要部分。前面讲到分析需先将机器码进行反汇编。因此防止软件分析主要就是破坏对机器码的反汇编,使破解者得不到完整的汇编码,从而无法分析。现在主要通过花指令法来实现。花指令的原理如下反汇编最重要的是能准确得到指令的开始位置,因为指令现在都是顺序存储的,所以前一个指令的结束就是下一个指令的开始,还有一些特殊指令中(主要是转跳指令),也包含有指令的开始处。反汇编程序依靠这两点得到指令开始位置。
花指令通过混淆指令的开始位置来干拢反汇编,其主要原理为在被干拢指令前加入一些干拢字节。干拢字节有两种一种是不完整指令,它会与后面指令的前部分组成一个指令,从而混淆了后面指令的开始位置。因为加入的干拢字节必须永远不会被执行,所以一般在其前面先使用一个转跳指令,使程序跳过干拢指令继续执行。
另一种是使用转跳指令本身作为干拢,一般使用条件转跳,此转跳指向一个错误的指令开始处(一般就指向后面1、2个字节偏移处),根据此转跳得到一个开始位置就会引起混淆。这种转跳指令的转跳条件必须永远得不会满足。
两种方式配合使用,反汇编程序就无法分清到底是转跳指令为花指令呢,还是转跳指令后的字节为花指令。在实际应用中还有一些使用其它转跳方式,指令替换之类的花指令,但其原理都是基于此。
虽然花指令原理上都是可分析出来的,但因为花指令实际实现时做得千变万化用各种各样的方式来实现转跳,使条件转跳成立/不成立的方法也五花八门,所以实际中并没有好的分析方法。
虽然花指令不能完全分析出,但在指令顺序存储的条件下,它对反汇编的影响效果有限,并不能影响到后面指令的反汇编。因为机器码可见,导致两点不利1.开始位置虽然很重要,但并不能成为决定性因素。对于错误的代码开始位置,通过从此位置开始往下反汇编,后面必然会出现机器码找不到对应的指令码错误,或出现很多不常见的指令。从而使反汇编程序可判断出一个开始位置是否正确。
2.前后指令段间不存在绝对的信赖关系。花指令总是会产生一些冲突,使反汇编程序知道指令被混淆了。如果前面的指令被混淆,反汇编程序可不绝对信任前面产生的指令开始位置,而主要根据本段的机器码来反汇编出正确的指令。这也还是因为开始位置并不是决定性因素造成的。
因为指令的开始位置不能彻底影响反汇编,所以反汇编程序能将花指令影响的范围局限到最小。破解者还是可见到后面的指令,从而从整体上分析加密的原理。
针对花指令的不足,我创新出了“变换指令存储加密技术”,与花指令结合使用。对要加密的代码段使用此技术后,能够彻底破坏对机器码的反汇编,将能反汇编的范围限制到极小。另外此技术还可防范对软件运行的动态跟踪。使破解者无法对软件进行分析,从而达到保护的目的。

发明内容
因为在顺序的存储方式下,指令的开始位置并不能成为反汇编的决定因素,以致花指令并不能破坏对机器码的反汇编。所以变换指令存储加密技术改变了指令的存储方式。
首先在指令中插入大量不影响程序运行的花指令,增加需执行的指令数量。然后打乱指令原来的顺序存储方式,将它们杂乱的存储起来各指令的前后顺序是随机的,指令不再相互紧挨着、而是可以有空隙,空隙使用生成的指令或随机数填充。
改变指令的存储后,指令的开始地址就不等于它的存储地址了。因此建立一个开始地址与存储位置的映射表,根据指令的开始地址可映射到它的存储地址。此表并不只对正确的开始地址才做映射,而是对加密范围内的每一个地址都作映射。例如某指令开始地址为A,长度为3,则地址A可映射到此指令的存储地址,但A+1,A+2也各能映射到一条指令的存储地址,且这2条指令与指令A毫无联系,完全是随机生成的。因此即使两个输入地址值只相差1,映射得到的指令也是完全不同。这是我这项技术的关键。附图1是对此映射的画图描述。
改变了指令的存储顺序,建立好映射表后,对指令的加密结束。软件运行时则对加密后的代码使用专门的处理程序。处理程序从第一条指令开始根据开始地址,映射出存储地址,提取出指令,进行指令的运行。运行完后可得下一条指令的开始地址,再提取下一条指令再运行。
改变了指令的存储方式后,因为机器码已不再可见,后面的指令必须通过反汇编前面指令时产生的开始位置得出(即使开始位置相差只是1,查出的指令也都彻底不同了),从而使得指令的开始位置已成为决定性因素。前后指令段间出现了绝对的信赖关系。
而对于前面”背景技术”中提到的检验开始位置是否正确的方法,因为每个地址值都对应了一条指令,所以从错误的地址开始反汇编也一直能得到正常指令,从而此检测方法无效。这样导致反汇编程序虽然仍能使用花指令所引起的冲突发现指令被混淆,但已无法分析出相互冲突的开始位置中哪些是错误的。也就是说已无法为后面指令的反汇编提供准确的开始位置,从而使得后面指令的反汇编成为不可能。
因此使用此技术与花指令配合,就可弥补花指令的不足,使花指令能从根本上破坏反汇编,影响的范围就将不再能被局限到一小段,而是所有后面的指令都将无法反汇编出。因此对后面的指令,破解者最多只能看到一小段。这样就无法进行分析了,起到了保护原码的作用。
破解的另一种方法就是跟踪指令的执行。因为反汇编被干扰后,后面能见的指令很少,因此跟踪时每步前进的距离也只能很小。而因为要执行的指令数量已通过加入大量的花指令被极大扩充了,2、3条的指令可以将它扩充到2、3M。这样破解者跟来跟去跟的都是些无用的指令。一个破解者再怎么有耐心,也不可能一点点的跟踪数量级上M,甚至上G的指令,从而防范了对代码的跟踪。
因此,此技术防止了对代码的分析和跟踪,从而实现了对代码的保护。


附图是对三条示例指令做改变存储顺序处理后,原来的地址与改变后地址的映射图。
具体实施例方式此技术可通过各种方式来编码实现。最直接的方式是做成工具的形式供用户使用用户做好其软件EXE程序后,在工具中指定所要加密的代码区间,然后用此工具对软件加密即可。工具将对指定的代码区间进行加密,然后增大原EXE程序的空间,以将生成的加密数据和处理程序写入,并将加密的区间清零,然后写上转跳到解密处理程序中去的代码。运行时到达此代码区间后,将进入处理程序,对程序解密运行,直至运行出此区间为止。
下面详细描述其加密和解密的具体操作过程
对于用户指定的要加密的代码段,首先汇编出其中所有的指令,然后在指令在中间加入大量不影响程序运行的花指令,使指令的数量迅速膨胀。加入花指令后,即可建立映射表,此表为一个数组,每个单元存储两种信息指令的存储地址和指令的长度,数组单元个数为所加密代码段加入花指令后的长度。查表时,指令的地址与加密区间开始处地址的差值,即指令的偏移作为索引值,取出数组中相应的元素即可。
然后对所有的指令进行随机的移动,使指令不再按原来顺序的方式存储。指令的移动范围不局限在原范围内,可另分配空间来存储指令,移动后指令也不需再紧挨着,指令间可有空隙,空隙使用随机生成的指令或随机数填充。移动后将指令新的存储位置和指令的长度填入映射表中。
现在映射表中各指令开始地址所对应的单元都已填好了,对于其它的单元也要填入正确指令的存储地址。对每个单元,在移动后的指令范围内、从任意位置开始搜索,如果找到一条常见指令,则将此指令的存储位置和长度填入。这样映射表内每个单元都指向存储指令空间内的一条指令。
在软件运行时,需对代码进行解密运行。解密过程为事先在所加密的区间开始处写上进入处理程序的指令。在软件运行时,到达所加密的区间时,就会进入处理程序,在处理程序中会使用一个全局变量存储指令的开始地址,初始值为变换前的第一条指令的开始位置。
处理程序的运行过程为先保护运行环境,再分析开始地址,如开始地址不在加密区间内,则恢复运行环境后,转跳到相应指令处,解密过程结束;如在加密区间内,则根据开始地址取出指令的存储地址和长度,进而取出指令。然后分析此指令,计算出下一个指令的开始地址。分析过程需针对三种不同的指令分别处理1,普通指令,开始地址+指令的长度=下一个开始地址;2,转跳指令,如为条件转跳先根据保存的运行环境判断是否要转跳,如需转跳则根据指令中的信息计算出下一个开始地址;3,其它使用相对地址的指令(在Intel 80×86指令系统中只有CALL指令),改变指令中的相对地址,使其能正确运行。
分析完指令后,进行指令的运行先恢复保存的运行环境,再运行指令。如果指令为转跳指令,则不运行此指令,而是直接转入下一条指令的处理,因为转跳指令的意义就是指定后面所要运行的指令。
如此循环,直至运行到加密区间范围外,解密过程结束。
权利要求
1.变换指令存储加密技术通过对软件的机器码进行加密处理达到对软件代码的安全保护,其特征是先在要加密的指令中加入干拢反汇编的指令,再将原来顺序存储的指令改用杂乱随机的方式存储,并建立用于得到指令位置的映射表,执行这些指令时使用专门的处理程序来执行。
2.根据权利要求1所述的加入的干拢反汇编的指令,其特征是这些指令不会影响程序运行,代码所实现的功能与加入干扰指令前相同。
3.根据权利要求1所述的加入的干拢反汇编的指令,其特征是加入指令的数量可以人为的指定。
4.根据权利要求1所述的杂乱随机的存储方式,其特征是各指令的前后顺序是随机的,指令不用相互紧挨着、而是可以有空隙。
5.根据权利要求1所述的建立的用于得到指令位置的映射表,其特征是此表并不只对正确的指令开始地址才做映射,而是对加密范围内的每一个地址都作映射。
6.根据权利要求1所述的用于执行指令的处理程序,其特征是此程序一次只处理一条指令,并得到下一条指令。
全文摘要
一种新的计算机软件的安全保护技术,主要通过改变现有软件顺序存储指令的方式,使指令的存储变得杂乱而无规律,从而使对软件的破解难以进行,因此是一项反破解的技术。由于在改变指令顺序前,在指令中加入了花指令,而这种杂乱的存储方式能与花指令配合得极好,使花指令破坏反汇编的范围极大增大,破解者已无法再对软件的机器码进行反汇编,因此无法静态分析;对于通过跟踪软件运行来实现的动态分析,在无法反汇编的情况下已只能单步跟踪,而因为加入的花指令数量极多,通过单步跟踪来分析的工作量将过于巨大,根本无法完成。所以使用此技术后破解者再无法分析软件,从而达到反破解目的。
文档编号G06F1/00GK1797263SQ20041007349
公开日2006年7月5日 申请日期2004年12月27日 优先权日2004年12月27日
发明者胡敏 申请人:胡敏
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1