还原精灵实战
2007-11-11 06:26:45 来源:WEB开发网一、软件系统的保护与还原
长期以来,学校机房、网吧等人员流动大,机器很多的场所,系统管理员的工作都非常烦琐,经常要重新安装系统、查杀病毒等。如何对硬盘中现有的操作系统和软件进行保护和还原就成了一个课题。
系统的保护和还原的方法从原理上来说主要分三类,一是保护,二是还原,三称为虚拟还原。
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之大(假的!)。但是在我用的Nero5.5.0.4下面,这个防护脆弱不堪,简单地就COPY过来了。只是后来我想把光盘上有用的东西拿出来的时候,才发现它在文件尺寸上动过手脚。我当时就想,Recovery Genius做得象个病毒一样小,它有必要用那么大的一张光盘来做载体吗?这个光盘上那些东西实际都是无用的,只有它的引导部分真正有用。
因此,我用Nero将光盘做了个镜像文件(也可以用WinImage等来做),然后用Cdmage将它读出来,将它的BOOTUP部分分离出来,是个1.44m启动软盘的镜像。最后将分离出来的IMG文件用WinImage写到一张软盘上,成功地将Recovery Genius改成了软盘版。
仔细看看这张软盘,整张盘上除了一个Command.com之外,空空如也,剩余空间有1.3M多,几乎就是张空盘。软件也只有在启动的时候才能安装,不用说,所有的东西还是在Boot扇区里面 —— 真是越看越象病毒!
如果朋友们对这张软盘有兴趣,什么时候我找个空间把这个镜像上传上去供大家下载。序列号就不提供了,现在的Crack站点那么多,真有兴趣的朋友自己找找应该能找到。
这个版本是简体中文的,安装起来很简单。要提醒大家的是,首先,安装之前应该整理硬盘,这样可以将软件对系统进程的干扰降到最低。太乱的硬盘在安装的时候甚至会出错。其次,BIOS里面的Anti Virus或者叫Virus Waring之类的防病毒选项一定要关掉,否则机器启动不起来,一直报警。
另外,轻易不要将其中“禁止软盘启动”选中。刚开始用这个软件的时候,我因为没有注意BIOS病毒防护的问题,机器启动不起来,以为安装失败了,而当时我恰好把“禁止软盘启动”选中了。为了下掉这个“失败”的软件,我用软驱、光驱都无法启动系统,接一个本可以启动的硬盘在前面同样不能启动!(是不是很象当年KV300中的逻辑炸弹?)最后雨人使出浑身解数,用了相当多复杂的手段终于把硬盘“救活”了。我的担心是如果系统真的出问题,一般的爱好者几乎无法自救。
软件参数设置是在开机时,喇叭“嘟嘟”响两声的时候按Ctrl-Home,输入密码后就可以进入设置。
2.硬盘版Recovery Genius
这个版本有2.2M左右大小,是繁体中文版本,在Soft.km169.net可以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月份的那个版本。更早的是测试版,最新的做过处理,不能用在其他主板。下载地址:
http://file2.mydrivers.com/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.BIN
1. XGROUP CODE 0C090h(48.14K) 0831Dh(32.78K) awardext.rom
2. CPU micro code 01800h(6.00K) 00FE5h(3.97K) CPUCODE.BIN
3. ACPI table 03473h(13.11K) 014A4h(5.16K) ACPITBL.BIN
4. EPA pattern 0168Ch(5.64K) 002AAh(0.67K) AwardBmp.bmp
5. GROUP ROM[ 0] 01DE0h(7.47K) 00EFCh(3.75K) _EN_CODE.BIN
6. PCI driver[A] 08000h(32.00K) 04E3Eh(19.56K) k:addromNCR400.rom
7. 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 ID CPUID Update ID CPUID Update ID CPUID Update ID CPUID
------------------+--------------------+--------------------+------------------
PPGA 03 0665 PPGA 11 0681 PPGA 10 0683 PPGA 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.BIN
1. XGROUP CODE 0BD80h(47.38K) 08374h(32.86K) awardext.rom
2. CPU micro code 02800h(10.00K) 01782h(5.88K) CPUCODE.BIN
3. ACPI table 02EB6h(11.68K) 01202h(4.50K) ACPITBL.BIN
4. EPA pattern 0168Ch(5.64K) 002AAh(0.67K) AwardBmp.bmp
5. GROUP ROM[ 0] 01EE0h(7.72K) 00F69h(3.85K) _EN_CODE.BIN
6. NNOPROM 0127Fh(4.62K) 00BF3h(2.99K) NNOPROM.BIN
7. ROS ROM 12AF0h(74.73K) 0699Bh(26.40K) ROS.BIN
8. ISA ROM[1] 09800h(38.00K) 092C8h(36.70K) STDE.DAT
9. 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 ID CPUID Update ID CPUID Update ID CPUID Update ID CPUID
------------------+--------------------+--------------------+-------------------
PPGA 03 0665 PPGA 14 0681 PPGA 10 0683 PPGA 08 0686
PPGA 01 068A PPGA 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.DAT
Enter 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。
赞助商链接