主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

新手入门
入侵实例
工具使用
安全防范
黑客人物
软件破解
漏洞研究

 
RHU阅读排行
·直面"拿来主义"—浅谈共享软件的破解方法
·《疯狂单词》“中级”教程
·ACCESS密码查看器算法分析[简单]
·goldeneye使用教程
·网络验证——Nok2Phone V3.41 (VB)(算法分析)
·软件狗[Dongles]的加密与解密技术
·加密算法之BLOWFISH算法
·新版aspr脱壳方法(完全版)
·凯撒密文的破解编程实现
·逆向追踪+模拟跟踪方法寻找暗桩 解除脱UPX后的校验

 
 
RHU最新文章
·Tray.Commander.v2.3 注册算法分析
·带壳分析易语言+简单浮点算法
·WinKawaks 1.45脱壳笔记
·破解高手常用的破解工具介绍
·用内存注册机方式破解X-NetStat
·<好帮手进销存>算法分析
·解密宝典——十招教你学会软件破解
·对付自校验的杀手锏 -- 偷天换日
·简单分析"冰狐浪子下载运行512生成器
·脱壳高级篇之认识Import表

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 黑客帝国-> 软件破解
计算机加密反跟踪技术密文技术和实例

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2005-5-12 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


 

一)跟踪技术
大家知道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

这样就可以读取光标处的字符和属性了。
(3)修改显示器I/O中断服务程序的入口地址:显示器I/O中断INT10H的中断入口地址存放在内存地址0000:0040H开始的4个字节中,修改这4个字节中的内容,就可破坏或扩充显示器I/O中断服务程序。
(4)定时清屏:利用对时钟中断的扩充,可以使时钟中断定时清屏。
(5)直接对视屏缓冲区操作:每台机器都有固定位置和长度的视屏缓冲区(具体的位置和长度随显示器的类型而不同),不过各类显示器上的所有信息都是视屏缓冲区中信息的反应。如果软件直接对视屏缓冲区进行操作,可以获得比利用显示中断快得多的显示速度,现在许多先进的跟踪调试软件都采取了这种方法,一是提高速度;二是针对反跟踪技术,所以反跟踪技术仅仅只修改显示中断的入口地址是远远不够的,还要通过对时钟中断的修改扩充,定时频繁地刷新视屏缓冲区中的内容。
检测跟踪法:当解密者利用各种跟踪调试软件对加密系统分析执行时,势必会造成许多与正常执行加密系统不一致的地方,如运行环境、中断入口和时间差异等等。如果在反跟踪技术中对不一致的地方采取一定的措施,也同样可以起到保护加密系统的目的。实现这种方法的关键在于以下两个方面:一是如果检测到加密系统是否被跟踪,二是检测到被跟踪后如何进行处理,前一个方面的实现主要依靠加密者对DOS内核和跟踪调试软件的深入了解,后者则一般是一种死循环、启动机器或提示非法跟踪并停止运行的程序,但也不排除有惩罚性动作的程序,在这里只主要讨论第一方面:(1)定时检测法:一个程序在正常运行和被跟踪运行时,所花的时间是大不相同的,可以想象一个被跟踪运行的程序往往要花费极长的时间,反跟踪技术抓住这个特点,根据执行时间的长短来判断是否被跟踪。这种技术在具体实现时有两点要注意:①确定程序正常运行时所需的时间:这个时间的取值一般比最慢速机器(8088)运行的时间稍微长一些,如果在检测执行时间时发现所用时间还大于定下的时间值,就可以肯定当前的程序是被跟踪执行;②发现执行所用的时间小于定下的时间值,也不能认为是?绝对没被跟踪,这是因为DEBUG的T和G命令在执行时将禁止所有可屏蔽的中断,用以计时的时钟中断也不例外,所以如果用T和P命令对程序进行动态跟踪执行时,会完全停止时钟的计数,有可能出现执行时间远小于规定的时间值的情况(甚至可能出现不用时间的怪事)。解决这个问题的办法除了利用抑制跟踪中断法外,还可通过时间中断1AH来解决:如果发现时钟不走动,则进入死循环。
MOVAH,0

INT1AH;读当前时钟值

MOVBX,DX;读取的时钟低部存入BX

LOOP:MOVAH,0

INT1AH

CMPBX,DX;比较时钟低部是否变动
JZLOOP;时钟未走动则返回重读

[本文共有 2 页,当前是第 1 页] <<上一页 下一页>>

OVER

[1] [2] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 认知盲区 解惑双网卡双线路DNS解析
  • FlashFXP 简体中文版 3.7.5 Build 1303 Beta[烈火]
  • 确认:番茄花园作者洪磊被检察院批准逮捕
  • 1983年的今天 DNS诞生
  • Windows 2003 IIS 6.0搭建asp+.net+php+jsp+mysql+mssql
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com