一种可以穿透还原卡和还原软件的代码

上传人:kms****20 文档编号:40206907 上传时间:2018-05-24 格式:DOC 页数:11 大小:36.50KB
返回 下载 相关 举报
一种可以穿透还原卡和还原软件的代码_第1页
第1页 / 共11页
一种可以穿透还原卡和还原软件的代码_第2页
第2页 / 共11页
一种可以穿透还原卡和还原软件的代码_第3页
第3页 / 共11页
一种可以穿透还原卡和还原软件的代码_第4页
第4页 / 共11页
一种可以穿透还原卡和还原软件的代码_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《一种可以穿透还原卡和还原软件的代码》由会员分享,可在线阅读,更多相关《一种可以穿透还原卡和还原软件的代码(11页珍藏版)》请在金锄头文库上搜索。

1、一种可以穿透还原卡和还原软件的代码一种可以穿透还原卡和还原软件的代码一种可以穿透还原卡和还原软件的代码还原卡和还原软件被广泛运用于各种公共场合的电脑上,比如学校机房和网吧。这些还原卡和还原软件(以下我简称为虚拟还原技术)能够记录下一切对硬盘的写操作,不论您对硬盘进行拷贝还是移动删除甚至是格式化分区等操作,只要一重新启动,一切都会恢复到这个操作之前的情况,因此有些虚拟还原厂商还会在广告词中加上一句“可以防范一切电脑病毒” 。这种虚拟还原的方法在大部分时候的确可以对公共机房的电脑起到很好的保护作用,难道真的没有一种方法能够穿透这种保护机制么?答案是否定的,下面请听我一一道来。 一、虚拟还原技术的原

2、理 本文所说的是一种普遍运用于还原卡或还原软件上的技术,当然,不同品牌不同厂商生产的可能不尽相同,但原理却是相通的。 首先,还原卡和还原软件会抢先夺取引导权,将原来的 0 头 0道 1 扇保存在一个其他的扇区, (具体备份到那个扇区是不一定的) ,将自己的代码写入 0 头 0 道 1 扇,从而能在操作系统之前得到执行权,这一点类似于一个引导型病毒;然后,我们来看看虚拟还原技术在操作系统之前都做了些什么: 1将中断向量表中的 INT13H 的入口地址保存; 2把自己用于代替 INT13H 的代码写入内存,并记住入口地址,当然这种“写入内存”并不是普通的“写” ,而是一种我们称为“常驻”的方法,有

3、关“常驻程序”的实现方法我们不另外花篇幅来描述了,如果你还不了解的话请自己找有关资料,也可以到www.hackart.org 或 找风般的男人交流; 3将中断向量表中 INT13H 的入口地址改为这段常驻程序的入口地址。补充一点,虚拟还原程序在修改 INT13H 的入口后往往都会修改一些其他中断入口,当然也是通过常驻程序来实现的,这些中断用来实现对中断向量表中 INT13H 入口地址监控,一旦发现被修改,就马上把它改回,这样做同样是用来防止被有心人破解。 好了,你已经看出来了,这段用来替代 BIOS 提供的 INT13H 的代码才是虚拟还原技术的关键,那么这段代码到底实现了些什么了,以下是本

4、人对此拙浅的理解: 1拦截所有 INT13H 中对硬盘 0 头 0 道 1 扇的操作 这些包括读写操作,把所有的对 0 头 0 道 1 扇的操作改为对虚拟还原程序备份的那个扇区的操作,这样做的目的是保护虚拟还原代码不被破坏,并且不能被有心人读出进行破解,即使你用扇区编辑工具查看主引导区,实际上你看到的是这个备份的主引导区。 2拦截所有 INT13H 中的写硬盘操作 这里包括对 8G 以下的硬盘的普通通过磁头、磁道、扇区定位的INT13H 中的写操作,和扩展 INT13H 中基于扇区地址方式的对大硬盘的写操作,甚至包括扩展 INT13H 中对一些非 IDE 接口的硬盘的写操作。 至于拦截后做什么

5、是虚拟还原技术实现的关键,在早期的 DOS系统当中完全可以“什么都不做” ,也就是说当用户写硬盘时实际上是什么都没做,但现在的操作系统都要对硬盘进行一些必要的写操作,比如对虚拟内存的写操作。众所周知,虚拟内存实际上就是硬盘,而如果禁止操作系统写硬盘的话显然后果是不堪设想的。所以,大多数虚拟还原厂商用的方法是占用一些硬盘空间,把硬盘所进行的写操作做一个记录,等系统重新启动后还原这一记录,但是怎样科学记录硬盘的写操作,是我一直没想通的问题,这种“科学”应该体现在时间上和硬盘空间的占用量上的,也就是说怎么样用最少的时间和最少的硬盘空间来记录硬盘的写操作是实现关键,如果有这方面想法的朋友欢迎和我交流;

6、 3备份端口 70H,71H 中的内容,并把最后一次执行时端口70H,71H 的内容和备份的内容做比较,不一样就提示 BIOS 被修改,是否还原,并通过密码验证修改 BIOS 是否合法。 二、PC 机的中断机制 中断提供了最基本的硬件和软件的接口,它使得程序员不必了解硬件系统的细节,只要直接调用系统提供的中断服务子程序,就可以完成相应功能,这样能使得程序设计更为方便。其实现机制如下:当某一中断源发出中断请求时,CPU 能够决定是否响应这一中断请求(当 CPU 在执行更为重要的工作时,可以暂不响应) ,如果允许响应该中断,CPU 会在现行的指令执行完后,把断点处的下一条指令地址和各寄存器的内容和

7、标志位的状态,推入堆栈进行保护,然后转到中断源服务程序的入口,进行中断处理,当中断处理完成后,再恢复被保留的各寄存器、标志位状态和指令指针,使 CPU 返回断点,继续执行下一条指令。 为了区别各个中断,CPC 系统给每个中断都分配了一个中断号 N,比如 INT 3H 是断点中断,INT 10H 是显示中断,我们今天要讨论的主要是 INT 13H 磁盘读写中断。 要说清楚 PC 机上的中断机制,用这一点篇幅是完全不够的,这里我所说的只是一个大概,如果你不清楚的话,请查阅一些资料或和我交流,我们今天重要要说的就是以 INT13H 为例看看 BIOS 提供给我们的中断到底都是在做什么?所谓 BIOS

8、 中断简单说就是你机器上的 BIOS 提供的中断,那么在 BIOS 中断的后面,到底是些什么呢?实际上是一些对端口的输入输出操作,PC 的每个端口都实现特定的功能,我们完全可以不调用 BIOS 提供的中断而直接用输入输出指令对这些端口进行操作,从而可以实现象调用 BIOS 中断一样的功能,但是一个前提是你必须对这些端口有详细的了解。反过来说,PC 的中断系统的一大好处就是能够让程序员无须了解系统底层的硬件知识的而能够编程,从这点看,中断有点象我们平时所说的“封装” ,我不知道这样说对不对,但的确中断为我们“封装”了许多系统底层的细节。 三、硬盘读写端口的具体含义 对硬盘进行操作的常用端口是 1

9、f0h1f7h 号端口,各端口含义如下: 端口号 读还是写 具体含义 1F0H 读/写 用来传送读/写的数据(其内容是正在传输的一个字节的数据) 1F1H 读 用来读取错误码 1F2H 读/写 用来放入要读写的扇区数量 1F3H 读/写 用来放入要读写的扇区号码 1F4H 读/写 用来存放读写柱面的低 8 位字节 1F5H 读/写 用来存放读写柱面的高 2 位字节(其高 6 位恒为 0) 1F6H 读/写 用来存放要读/写的磁盘号及磁头号 第 7 位 恒为 1 第 6 位 恒为 0 第 5 位 恒为 1 第 4 位 为 0 代表第一块硬盘、为 1 代表第二块硬盘 第 30 位 用来存放要读/写

10、的磁头号 1f7H 读 用来存放读操作后的状态 第 7 位 控制器忙碌 第 6 位 磁盘驱动器准备好了 第 5 位 写入错误 第 4 位 搜索完成 第 3 位 为 1 时扇区缓冲区没有准备好 第 2 位 是否正确读取磁盘数据 第 1 位 磁盘每转一周将此位设为 1, 第 0 位 之前的命令因发生错误而结束 写 该位端口为命令端口,用来发出指定命令 为 50h 格式化磁道 为 20h 尝试读取扇区 为 21h 无须验证扇区是否准备好而直接读扇区 为 22h 尝试读取长扇区(用于早期的硬盘,每扇可能不是 512 字节,而是 128 字节到 1024 之间的值) 为 23h 无须验证扇区是否准备好而

11、直接读长扇区 为 30h 尝试写扇区 为 31h 无须验证扇区是否准备好而直接写扇区 为 32h 尝试写长扇区 为 33h 无须验证扇区是否准备好而直接写长扇区 注:当然看完这个表你会发现,这种读写端口的方法其实是基于磁头、柱面、扇区的硬盘读写方法,不过大于 8G 的硬盘的读写方法也是通过端口 1F0H1F7H 来实现的_ 四、一个通过对硬盘输入输出端口操作来读写硬盘的实例 让我们来看一个关于 INT13H 读写硬盘程序实例。在例子中详细说明了硬盘的读写操作所用到的端口,并且把通过 INT13H 读出的主引导区得到的数据和通过输入输出读主引导区得到的数据进行比较,从而证实这两种操作功能相同,程

12、序片段如下: mov dx,1f6h ; 要读入的磁盘号及磁头号 mov al,0a0h ;磁盘 0,磁头 0 out dx,al mov dx,1f2h ;要读入的扇区数量 mov al,1 ;读一个扇区 out dx,al mov dx,1f3h ;要读的扇区号 mov al,1 ;扇区号为 1 out dx,al mov dx,1f4h ;要读的柱面的低 8 位 mov al,0 ; 柱面低 8 位为 0 out dx,al mov dx,1f5h ; 柱面高 2 位 mov al,0 ; 柱面高 2 位为 0(通过 1F4H 和 1F5H 端口我们可以确定 ; 用来读的柱面号是 0)

13、out dx,al mov dx,1f7h ;命令端口 mov al,20h ; 尝试读取扇区 out dx,al still_going: in al,dx test al,8 ;扇区缓冲是否准备好 jz still_going ;如果扇区缓冲没有准备好的话则跳转,直到准备好才向下执行。 mov cx,512/2 ;设置循环次数(512/2 次) mov di,offset buffer mov dx,1f0h ;将要传输的一个字节的数据 rep insw ;传输数据 ; - mov ax,201h ;以下是用 INT13H 读硬盘的 0 磁头、0 柱面、1 扇区 mov dx,80h mo

14、v cx,1 mov bx,offset buffer2 int 13h mov cx,512 ;以下部分用来比较 2 种方法读出的硬盘数据 mov si,offset buffer mov di,offset buffer2 repe cmpsb jne failure mov ah,9 mov dx,offset readmsg int 21h jmp good_exit failure: mov ah,9 mov dx,offset failmsg int 21h good_exit: ;以下部分用来结束程序 mov ax,4c00h ;退出程序 int 21h readmsg db T

15、he buffers match. Hard disk read using ports.$ failmsg db The buffers do not match.$ buffer db 512 dup (V) buffer2 db 512 dup (L) 五、可以穿透还原卡或是还原软件保护的代码 你可以对照硬盘读写端口含义表,再好好看看上面的例子,你将会对硬盘读写端口有一个比较深的理解。好了,到了该把谜底揭晓的时候了,重新回到我们的主题。正如你现在想象的,这种可以穿透还原卡或是还原软件保护的代码的确是对硬盘读写端口的输入输出操作。现在,我们已经可以从原理上理解了,还原卡拦截的是中断操作,但

16、却拦截不了输入输出操作,而用输入输出操作足够可以对硬盘进行写操作了,当然用输入输出操作也完全可以读到被虚拟还原程序屏蔽的关键部分,被还原卡或是还原软件屏蔽的 0 头 0 道1 扇。知道了这一原理以后,可能是仁者见仁智者见智的,如果你是一个虚拟还原技术的破解者、一个病毒制造者,或是虚拟还原技术的设计者,往往对此的理解都是不尽相同的。 在此强调我不赞成制造病毒,但一个病毒制造者完全可以用此原理写出一个可以实现破坏装有还原卡或还原软件的机器了,所以我要提醒虚拟还原用户的是,不要以为装有还原卡或是还原软件就掉以轻心,要知道世界上还是有病毒能够穿透虚拟还原技术的保护,达到破坏硬盘的目的的,想象一下如果把这一原理运用到 CIH 病毒中,或者运用到硬盘杀手病毒中,其后果是不堪设想的。 谈谈如何用这种可以穿透虚拟还原技术的代码来破解还原软件(如还原精灵)吧。以下是我写的用来测试破解还原精灵的代码,本代码编译后的程序需要在纯 DOS 环境执行,在 DOS 下我用这段代码成功的把还原精灵给卸载了。 .286 CODE SEGMENT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号