一、软件加密
从软件入手的解密方法很多,针对这种情况,人们也研制出了很多行之有效的防解密措施,在次,我们把一些常用的防止软件跟踪解密的措施列于下面:
1、计算程序执行时间,并判断程序的执行时间是否过长;
2、关键程序部分禁止键盘中断,并检查键盘中断是否被开放;
3、关键程序部分禁止显示输出和打印输出;
4、在软件中多做几次软件狗检查;
5、把程序的重要部分加以编码加密,在运行时才解密;
6、修改断点中断功能;
7、利用除零中断或溢出中断是否有程序跟踪;
8、利用时钟中断检查是否有程序跟踪;
9、在程序中调用INT7;
10、程序不要写得很结构化,要多一些“废话”;
11、若干种加密方法综合使用;
12、用黄玫瑰软件制作组出品的BITSHELL作外层防护;
虽然加密方法那么多,但是道高一尺,魔高一丈,随着加密技术的发展,解密技术也进一步蓬勃发展起来,目前可用于解密的工具有SOURCE、DEBUG、SYMDEB、TURBODEBUG、SOFT-ICE、TRW2000等等。这些工具的功能一个比一个强,更何况还有那么多“专业”解密高手,似乎任何加密技术到了他们手里都会迎刃而解。说来说去,您可能会想,你仍然没有最终解决软件的加密问题吗。是的,本来吗,加密和解密就是一对矛盾的统一体,某一阶段的优只能看是哪一方先亮出了新招,谁都不敢说他的加密方法别人破译不了,或者说他能破译任何加密方法。如此看来,我们所做的工作只在于尽量减少被解密的可能性,以赢得时间进行下一步的开发。
软件解密就是要想办法把加密代码攻破,具体到软件狗上,即是找到检查程序,然后干掉它。因此,如果我们在应用程序的不同地方多做几次检查,就可以让解密者浪费更多的时间。这对I/O速率很快的软件狗来说是很方便的,不像软盘加密那样检查起来既费时又不方便。
一个好的程序员会把程序设计得简单易懂,具有结构化,但这也给解密者带来了方便,所以程序不要写得太规则,另外还要加上一些“废话”,以干扰解密者。
另外一种不破坏程序结构化,也不需要写“废话”就可以有效干扰解密者,提高解密难度和复杂性的方法是,把子程序全部用宏改写。这样汇编出的程序是一串串很难看出结构的指令,进出堆栈的数据和各种传递的参数以及积存器暂存数的存取相距很远,嵌套很深,分析起来很伤脑筋。第三代软件狗的存取程序就是全部用这种方法写的。
很多软件加密技术的研制者对Soft-ICE很头疼,因为它的解密功能太强了,但是您只要在程序中调用一下INT7,就能防止它的跟踪,您不妨试试看。
在用解密工具跟踪程序时,执行时间显然要比平常的长,另外一般都用键盘来操作,用显示器或打印机作输出,所以采用执行时间检查或者在关键程序部分禁止键盘中断,以及禁止显示器或打印机输出(修改INT10H或INT17H中断)等都是较好的方法。
多种软件加密方法的综合,以及几种加密技术交叉使用,足以让许多解密者知难而退。因为必须了解所有的加密技术原理才有可能解密,这就增加了难度,毕竟能够精通各种加密方法的人不多。例如有就把软件狗加密技术和磁盘加密技术结合起来做。
二、硬件加密
软件狗的电路不要做的太直接,否则不利于加密。这里我们就来讲讲如何增进软件狗的复杂性,加强硬件电路的机密功能。
在讲第二代软件狗时,我们说它其实就是几个简单的与或逻辑门,目前已经被淘汰。现在我们将要把它跟EEPROM结合起来,经过变化,组成比较复杂的第三代软件狗,从而增加解密难度。
CAL芯片由于本身就有加密功能,所以也常被用来与EEPROM结合做成复杂的软件狗,更由于其内部逻辑配置的灵活性,使得解密的难度上涨了很多倍。
解密者要仿制加密盒,首先必须搞到同型号的EEPROM,所以,我们尽量采用市场上一般购买不到的EEPROM型号,这样也能起到保密的作用。另外,如果采用特殊的93CX6系列,就可以利用不同厂商出品的特殊93CX6,其特性不同这一点来加强硬件的加密功能。