设为主页 | 加入收藏 | 繁體中文

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

  复原卡和复原软件被遍及运用于种种大众场所的电脑上,好比学校机房和网吧。这些复原卡和复原软件(以下我简称为虚拟复原技能)能够记录下统统对硬盘的写操作,不论您对硬盘进行拷贝照旧挪动删除甚至是款式化分区等操作,只需一重新启动,统统都市恢复到这个操作之前的环境,因而有些虚拟复原厂商还会在广告词中加上一句“可以防范统统电脑病毒”。这种虚拟复原的要领在大部分工夫简直可以对大众机房的电脑起到很好的保护作用,难道真的没有一种要领能够穿透这种保护机制么?答案是否认的,下面请听我一一道来。
  一、虚拟复原技能的原理
  本文所说的是一种普遍运用于复原卡或复原软件上的技能,固然,不同品牌不同厂商生产的可能不尽雷同,但原理倒是雷同的。
  首先,复原卡和复原软件会争先夺取引导权,将原来的0头0道1扇保存在一个其他的扇区,(详细备份到那个扇区是纷歧定的),将本身的代码写入0头0道1扇,从而能在操作体系之前失掉执行权,这一点类似于一个引导型病毒;然后,我们来看看虚拟复原技能在操作体系之前都做了些什么:
  1.将停止向量表中的INT13H的入口地点保存;
  2.把本身用于代替INT13H的代码写入内存,并记着入口地点,固然这种“写入内存”并不是普通的“写”,而是一种我们称为“常驻”的要领,有关“常驻程序”的实现要领我们不别的花篇幅来描述了,要是你还不了解的话请本身找有关资料,也可以到www.hackart.org或www.lsky.net找风般的男子交换;
  3.将停止向量表中INT13H的入口地点改为这段常驻程序的入口地点。补充一点,虚拟复原程序在修正INT13H的入口后往往都市修正一些其他停止入口,固然也是经过常驻程序来实现的,这些停止用来实现对停止向量表中INT13H入口地点监控,一旦发明被修正,就顿时把它改回,如许做同样是用来防备被故意人破解。
  好了,你曾经看出来了,这段用来替代BIOS提供的INT13H的代码才是虚拟复原技能的要害,那么这段代码究竟实现了些什么了,以下是本人对此拙浅的明白:
  1.阻拦全部INT13H中对硬盘0头0道1扇的操作
  这些包罗读写操作,把全部的对0头0道1扇的操作改为对虚拟复原程序备份的那个扇区的操作,如许做的目的是保护虚拟复原代码不被破坏,并且不克不及被故意人读出进行破解,即使你用扇区编辑东西查看主引导区,现实上你看到的是这个备份的主引导区。
  2.阻拦全部INT13H中的写硬盘操作
  这里包罗对8G以下的硬盘的普通经过磁头、磁道、扇区定位的INT13H中的写操作,和扩展INT13H中基于扇区地点方式的对大硬盘的写操作,甚至包罗扩展INT13H中对一些非IDE接口的硬盘的写操作。
  至于阻拦后做什么是虚拟复原技能实现的要害,在晚期的DOS体系当中完全可以“什么都不做”,也就是说当用户写硬盘时现实上是什么都没做,但如今的操作体系都要对硬盘进行一些必要的写操作,好比对虚拟内存的写操作。众所周知,虚拟内存现实上就是硬盘,而要是禁止操作体系写硬盘的话显然后果是不胜假想的。以是,大多数虚拟复原厂商用的要领是占用一些硬盘空间,把硬盘所进行的写操作做一个记录,等体系重新启动后复原这一记录,但是怎样科学记录硬盘的写操作,是我一直没想通的问题,这种“科学”应该表如今工夫上和硬盘空间的占用量上的,也就是说怎样样用最少的工夫和最少的硬盘空间来记录硬盘的写操作是实现要害,要是有这方面想法的朋友接待和我交换;
  3.备份端口70H,71H中的内容,并把末了一次执行时端口70H,71H的内容和备份的内容做比力,纷歧样就提示BIOS被修正,是否复原,并经过密码验证修正BIOS是否合法。
  二、PC机的停止机制
  停止提供了最根本的硬件和软件的接口,它使得程序员不必了解硬件体系的细节,只需直接调用体系提供的停止办事子程序,就可以完成相应功效,如许能使得程序设计更为方便。实在现机制如下:当某一停止源发出停止请求时,CPU能够决议是否响应这一停止请求(当CPU在执行更为紧张的工作时,可以暂不响应),要是容许响应该停止,CPU会在现行的指令执行完后,把断点处的下一条指令地点和各寄存器的内容和标志位的形态,推入货仓进行保护,然后转到停止源办事程序的入口,进行停止处理,当停止处理完成后,再恢复被保存的各寄存器、标志位形态和指令指针,使CPU前往断点,连续执行下一条指令。
  为了区别各个停止,CPC体系给每个停止都分派了一个停止号N,好比INT 3H是断点停止,INT 10H是表现停止,我们今天要讨论的主要是INT 13H磁盘读写停止。
  要说清楚PC机上的停止机制,用这一点篇幅是完全不敷的,这里我所说的只是一个大约,要是你不清楚的话,请查阅一些资料或和我交换,我们今天紧张要说的就因而INT13H为例看看BIOS提提供我们的停止究竟都是在做什么?所谓BIOS停止简单说就是你呆板上的BIOS提供的停止,那么在BIOS停止的背面,究竟是些什么呢?现实上是一些对端口的输入输入操作,PC的每个端口都实现特定的功效,我们完全可以不调用BIOS提供的停止而直接用输入输入指令对这些端口进行操作,从而可以实现象调用BIOS停止一样的功效,但是一个前提是你必须对这些端口有细致的了解。反过来说,PC的停止体系的一大好处就是能够让程序员无须了解体系底层的硬件知识的而能够编程,从这点看,停止有点象我们平常所说的“封装”,我不晓得如许说对不对,但简直停止为我们“封装”了许多体系底层的细节。
  三、硬盘读写端口的详细含义
  对硬盘进行操作的常用端口是1f0h~1f7h号端口,各端口含义如下:
  端标语     读照旧写   详细含义
  1F0H       读/写      用来传送读/写的数据(其内容是正在传输的一个字节的数据)
  1F1H       读         用来读取错误码
  1F2H       读/写      用来放入要读写的扇区数目
  1F3H       读/写      用来放入要读写的扇区号码
  1F4H       读/写      用来寄存读写柱面的低8位字节
  1F5H       读/写      用来寄存读写柱面的高2位字节(其高6位恒为0)
  1F6H       读/写      用来寄存要读/写的磁盘号及磁头号
  第7位     恒为1
  第6位     恒为0
  第5位     恒为1
  第4位     为0代表第一块硬盘、为1代表第二块硬盘
  第3~0位    用来寄存要读/写的磁头号
  1f7H       读         用来寄存读操作后的形态
  第7位     控制器繁忙
  第6位     磁盘驱动器准备好了
  第5位     写入错误
  第4位     搜索完成
  第3位     为1时扇区缓冲区没有准备好
  第2位     是否精确读取磁盘数据
  第1位     磁盘每转一周将此位设为1,
  第0位     之前的下令因发生错误而竣事
  写         该位端口为下令端口,用来发出指定数令
  为50h     款式化磁道
  为20h     尝试读取扇区
  为21h     无须验证扇区是否准备好而直接读扇区
  为22h     尝试读取长扇区(用于晚期的硬盘,每扇可能不是512字节,而是128字节到1024之间的值)
  为23h     无须验证扇区是否准备好而直接读长扇区
  为30h     尝试写扇区
  为31h     无须验证扇区是否准备好而直接写扇区
  为32h     尝试写长扇区
  为33h     无须验证扇区是否准备好而直接写长扇区
  注:固然看完这个表你会发明,这种读写端口的要领实在是基于磁头、柱面、扇区的硬盘读写要领,不过大于8G的硬盘的读写要领也是经过端口1F0H~1F7H来实现的^_^
  四、一个经过对硬盘输入输入端口操作来读写硬盘的实例
  让我们来看一个关于INT13H读写硬盘程序实例。在例子中细致阐明了硬盘的读写操作所用到的端口,并且把经过INT13H读出的主引导区失掉的数据和经过输入输入读主引导区失掉的数据进行比力,从而证明这两种操作功效雷同,程序片段如下:
  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)
  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            ;传输数据
  ;   ------


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: