一、軟件系統的保護與還原
長期以來,學校機房、網吧等人員流動大,機器很多的場所,系統管理員的工作都非常煩瑣,經常要重新安裝系統、查殺病毒等。如何對硬盤中現有的操作系統和軟件進行保護和還原就成了一個課題。
系統的保護和還原的方法從原理上來說主要分三類,一是保護,二是還原,三稱為虛擬還原。
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 ********
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
Total 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。