www.138139.cn

返回总目录 上一页 目录页 下一页

计算机加密反跟踪技术密文技术


    一、跟踪技术
 大家知道DOS中有一个功能强大的动态跟踪调试软件DEBUG,它能够实现对程序的跟踪和逐条运行,其实这是利用了单步中断和断点中断的原因,而且目前的大多数跟踪调试软件都是利用了这两个中断。

 单步中断(INT1)是由机器内部状态引起的一种中断,当系统标志寄存器的TF标志(单步跟踪标志)被置位时,就会自动产生一次单步中断,使得CPU能在执行一条指令后停下来,并显示各寄存器的内容。
断点中断(INT3)是一种软中断,软中断又称为自陷指令,当CPU执行到自陷指令时,就进入断点中断服务程序,由断点中断服务程序完成对断点处各寄存器内容的显示。
 G命令的执行过程:DEBUG中的G命令是用于运行程序的,但当G命令后面跟有断点参数时,就可使程序运行至断点处中断,并显示各寄存器的内容,这样就可以大大提高跟踪的速度。它的实现是通过调用断点中断来实现的:DE-BUG首先保存设置的断点处指令,改用断点中断INT3指令代替,当程序执行到断点处的INT3指令时,便产生断点中断,并把原先保存的断点处指令重新替代INT3,以完成一个完整的设置断点的G命令。通过对单步中断和断点中断的合理组合,可以产生强大的动态调试跟踪功能,这就对磁盘加密技术造成了巨大的威慑,所以破坏单步中断和断点中断,在反跟踪技术中就显得十分必要,成为反跟踪技术中的"必修课"。

二、反跟踪技术
 作为反拷贝技术的保护者反跟踪技术是整个磁盘加密技术中最能显示技术水平的部分,如果它稍有漏洞就会影响到整个磁盘加密技术的可靠性.不过毫无漏洞的反跟踪技术是没有,随着时间的推移、编程工具的更新和经验的积累,反跟踪技术只会向完美逼近,但可以肯定的是:一定不会达到完美,这和哲学中的"绝对和相对"是同一个道理。一个卓越的反跟踪技术虽然肯定有着微小的漏洞,但是它本身其它的技术可以起到弥补和尽可能减小这个漏洞的作用,这就是这个反跟踪技术的卓越之处。一个有效的反跟踪技术应该具有3大特性:

 重要程序段是不可跳越和修改的:PROLOK的解密过程是通过修改判读指纹的程序段来实现的,这其实是激光加密系统中反跟踪技术的一个败笔,一个有效的反跟踪技术应该对加密系统中的某些甚至全部程序段进行保护,如果这其中有内容被修改,将导致出错,主要方法有累计、累或和异或和程序段等方法,同时还要保证重要程序段一定要被执行,方法主要有加密程序分段加密,运行时逐层解密,逐层清除的方法,即只有运行了重要的程序段,才能将下一层程序代码从密码形式转换成明码形式;
不通过加密系统的译码算法,密码不可破译:为塑造一个封闭的加密系统,杜绝使用外调自编子程序甚至手工转换密码,规定只能由加密系统的译码程序来转换密码;
加密系统是不可动态跟踪执行的:动态跟踪是对加密系统的窥视,所以反跟踪技术应该绝对禁止对加密系统的动态跟踪。

反跟踪技术主要采用的方法有:

 抑制跟踪中断:DEBUG的T和G命令分别要运行系统的单步中断和断点中断服务程序,在系统向量表中这两个中断的中断向量分别为1和3,中断服务程序的入口地址分别存放在0000:0004和0000:000C起始的4个字节中。因此,当这些单元中的内容被修改后,T和G命令将无法正常执行,具体实现方法:
(1)将这些单元作为堆栈使用;
(2)在这些单元中送入软件运行的必要数据;
(3)将软件中某个子程序的地址存放在这些单元中,当需要调用时使用INT1和INT3指令来代替CALL指令;
(4)放入惩罚性程序的入口地址。

封锁键盘输入:各种跟踪调试软件在工作时,都要从键盘上接收操作者发出的命令,而且还要从屏幕上显示出调试跟踪的结果,这也是各种跟踪调试软件对运行环境的最低要求。因此反跟踪技术针对跟踪调试软件的这种"弱点",在加密系统无须从键盘或屏幕输入、输出信息时,关闭了这些外围设备,以破坏跟踪调试软件的运行环境。键盘信息的输入采用的硬件中断方式,由BIOS中的键盘中断服务程序接收、识别和转换,最后送入可存放16个字符的键盘缓冲区。针对这些过程反跟踪技术可以采用的方法有:
(1)改变键盘中断服务程序、BIOS的键盘I/O中断服务程序的入口地址:键盘中断的中断向量为9,BIOS的键盘I/O中断的中断向量为16H,它们的中断服务程序的入口地址分别存放在内存地址0000:0024H和0000:0058H起始的4个字节中,改变这些地址中的内容,键盘信息将不能正常输入。
(2)禁止键盘中断:键盘中断是一个可屏蔽中断,可通过向8259中断控制器送屏蔽控制字来屏蔽键盘中断。控制键盘的是中断屏蔽寄存器的第1位,只要将该位置1,即可关闭键盘的中断。
INAL,21H
ORAL,02H
OUT21H,AL
需要开放键盘中断时,也要用三条指令:
INAL,21H
ANDAL,FDH
OUT21H,AL

(3)禁止接收键盘数据:键盘数据的接收是由主机板上8255A并行接口完成的。其中端口A用来接收键盘扫描码,端口B的第7位用来控制端口A的接收,该位为0表示允许键盘输入,为1则清除键盘。正常情况下,来自键盘的扫描码从端口A接收之后,均要清除键盘,然后再允许键盘输入,为了封锁键盘输入,我们只须将端口B的第7位置1:
INAL,61H
ORAL,80HOUT61H,AL
当需要恢复键盘输入时,执行以下三条指令:
INAL,61H
ANDAL,7FH
OUT61H,AL

(4)不接受指定键法:在DEBUG中T、P和G都是用于动态跟踪的关键命令,如果加密系统关键命令,如果加密系统在运行时必须从键盘上接收信息(这个时候加密系统容易被各种跟踪调试软件截获,所以应尽量避免),可以通过对键盘中断服务程序的修改扩充,使之不接受T、P和G这些敏感的键码,以达到反跟踪的目的。当然这是一种不得以而采取的方法,因为它有相当大的局限性和漏洞:一是如果加密系统在接受的信息中,可能牵涉到T、P等键码,这种方法就行不通了;二是DEBUG下的动态调试命令是T、P和G,那么其它的跟踪调试软件呢?显然其它的软件就不一定是这些命令了,而且还不乏两个键码、三个键码以及更多键码组成的动态调试命令。
3.设置显示器的显示性能:当加密系统无需在屏幕上显示信息时,可以通过各种方法关闭屏幕,这样可使解密者无法得到跟踪调试软件返回的任何信息,以阻止解密者对加密系统的破译。这种反跟踪技术在实现方法上也有5类:

(1)封锁屏幕显示:可以重新设置屏幕特性,将前景和背景色彩置成同一种颜色,使解密者在跟踪期间无法看见调试信息:
MOVAH,0BH
MOVBH,0
MOVBL,0
INT10H

 这时屏幕的背景颜色和字符颜色均被置成黑色,当需恢复屏幕的显示特性时,可将上述第3条指令中的BL值换成1~7,便使字符的颜色变成深蓝、绿和红色等。

2)检查加密系统是否处于被监控状态:各类跟踪调试软件在显示信息时,必然会出现屏幕上卷和换页等操作,因此可以经常检查屏幕上某些位置的状态,若有变化则一定有人在跟踪程序。获取屏幕信息的方法可用以下指令来实现:
MOVAH,02
MOVBH,0
MOVDH,行光标值
MOVDL,列光标值
INT10H
MOVAH,08
INT10H

址163164.cn 微信1631640 QQ3149886

返回总目录 上一页 目录页 下一页