导航

    <#CACHE_INCLUDE_NAVBAR#>
« Killtest HP HP0-M40 考古題賽門鐵克網絡安全年報:四大網絡威脅現象 »

深入探討Windows XP系統文件保護功能

2010年11月19日 Linux 0条评论 0个引用

當妳安裝壹個應用程序卻不料引起Windows崩潰的時候,很有可能是因為應用程序改寫了關鍵的Windows系統文件,導致系統崩潰。在文件被修改後,結果往往不可預知。系統可能正常運行,或者出壹些錯誤,或者完全崩潰。幸運的是,Windows 2000, XP,和Server 2003應用了壹個稱作Windows文件保護(Windows File Protection, WFP)機制,它可以防止關鍵的系統文件被改寫。在這篇文章中,我將解釋何謂WFP和它是如何工作的。我還要告訴妳如何修改或忽略WFP的行為。(註釋:盡管在Windows 2000, XP,和Server 2003上,WFP的運行沒什麽區別,但這篇文章中的信息,包括註冊表相關條目和SFC語法,是針對XP的。)

  Windows文件保護是如何工作的

  WFP被設計用來保護Windows文件夾的內容。WFP保護特定的文件類型,比如SYS、EXE、DLL、OCX、FON和TTF,而不是阻止對整個文件夾的任何修改。註冊表鍵值決定WFP保護的文件類型。

  當壹個應用程序試圖替換壹個受保護的文件,WFP檢查替換文件的數字簽名,以確定此文件是否是來自微軟和是否是正確的版本。如果這兩個條件都符合,則允許替換。正常情況下,允許替換系統文件的文件種類包括Windows的服務包,補丁和操作系統升級程序。系統文件還可以由Windows更新程序或Windows設備管理器/類安裝程序替換。

  如果這兩個條件沒有同時滿足,受保護文件將被新文件替換,但將很快被正確的文件替換回來。當這種情況發生時,Windows會從Windows安裝CD或者計算機的DLLCache文件夾中復制正確版本的文件。

  Windows文件保護並不僅僅通過拒絕修改來保護文件,它還可以拒絕刪除。來看看WFP的做法,打開\WINDOWS\SYSTEM32文件夾並將CALC.EXE文件重命名為CALC.OLD。當妳這樣做時,壹個消息將提示妳如果改變這個文件的擴展名可能會導致這個文件不可用。點擊Yes按鈕確認這個警告。現在,等幾分鐘後按F5鍵以刷新文件系統的視圖,完成替換可能要花些時間。當文件最終被替換後,Windows會在事件日誌中做相應的記錄。

  關於WFP值得關註的壹點是它和Windows安裝程序結合的很緊密。無論何時,如果Windows安裝程序需要安裝壹個受保護的文件,它就把這個文件交給WFP,而不是自己試圖去安裝這個文件。然後由WFP判斷是否允許安裝。

  系統文件檢查

  雖然自動文件替換會節省時間,但也存在需要手動幹預的情況。例如,妳可能不願意空等著WFP去判斷受保護的文件是否已經被替換。幸運的是,妳可以用壹個名為系統文件檢查(SFC)的工具手動控制WFP。

  SFC是壹個命令行工具,需要在命令提示符窗口下運行。它的語法像這樣:

  SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/REVERT] [/PURGECACHE] [/CACHESIZE=x]

  /SCANNOW選項通知SFC立即掃描所有受保護的系統文件。如果在掃描過程中發現壹個錯誤的文件版本,這個錯誤的版本將被替換為微軟正確的版本。當然,這意味著妳可能必須有Windows安裝CD,最新的服務包或者升級補丁。

  /SCANONCE參數通知WFP在系統下次啟動的時候掃描受保護的系統文件。在掃描過程中,任何錯誤的文件將被正確的版本替換。正如這個參數名的意思,這個掃描只進行壹次。之後的系統啟動將恢復正常,SFC不再運行。

  /SCANBOOT參數和/SCANONCE選項類似。區別在於SCANONCE只在Windows下次啟動時掃描受保護的文件,而SCANBOOT參數則在Windows每次啟動時都掃描系統文件。如果需要,這兩個參數將替換錯誤的系統文件,這可能需要妳提供正確文件版本的拷貝。

  /REVERT選項用來關閉SFC,例如,假設妳使用SCANBOOT選項在每次系統啟動的時候掃描所以保護的文件。正如妳所能想到的,這確實會增加計算機啟動的總時間。最後,妳可能厭倦了漫長的啟動時間,想關閉SFC。只需要簡單的使用SFC /REVERT,就可以在啟動的時候關閉SFC。

  對/PURGECACHE選項就需要謹慎些。在這之前,我解釋說Windows使用壹個緩存文件夾來保存各類系統文件正確版本的備份。如果妳運行SFC /PURGECACHE命令,那麽這個文件緩存將被清空,那些備份文件將被刪除。這個命令還會導致Windows開始掃描各類受保護文件,並在掃描的同時重建這個文件緩存。當然,這可能意味著妳必須向Windows提供Windows安裝CD或系統文件升級的拷貝。

  最後壹個SFC命令選項是/CACHESIZE=x。對於文件緩存的缺省大小確實存在很多自相矛盾的信息,在寫這篇文章的時候,我發現三篇不同的微軟知識庫文章中指定的文件緩存的缺省大小都不壹樣。壹篇文章中建議文件緩存的大小為50 MB,而另壹篇建議的大小卻是300 MB。更有甚者,第三篇指出這個大小應該是無限的。其實缺省值的大小並不重要,因為妳可以根據妳的需要,使用CACHESIZE選項來改變這個文件緩存的大小。

  在使用CACHESIZE選項時,妳必須鍵入命令SFC /CACHESIZE=x,這個x是指妳想分配給文件緩存的兆字節數。在指定了新的文件緩存大小後,妳必須重啟系統並運行SFC /PURGECACHE命令。

  通過註冊表控制WFP和SFC

  在這之前,我解釋說註冊表控制WFP的壹般行為。妳可以修改幾個不同的註冊表鍵值以控制WFP的行為。妳可以在每次運行SFC直接操作這些鍵的壹部分,其他壹些有更低級別的功能。比如指定文件緩存或者安裝文件的位置。

  修改註冊表可能是危險的。如果妳做了壹個錯誤的修改,可能會導致Windows的崩潰或者破壞妳的應用程序,所以我強烈建議在嘗試這壹節中描述的任何技術之前,先對註冊表做壹個完整的備份。

  為了訪問SFC的註冊表鍵,在Run命令中鍵入REFEDIT命令。這將打開註冊表編輯器,現在瀏覽註冊表樹找到下面這個鍵:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon

  通常地,註冊表中WinLogon鍵壹般用來控制各種不同的啟動選項。雖然許多SFC的選項都可控制SFC是否在啟動的的時候運行,但微軟已經將SFC相關的註冊表鍵放在這個部分。

  SFCDisabled

  這個註冊表鍵控制SFC是激活的還是無效的。實際上妳只需通過改變DWORD的值,就可以得到四個不同的選項。缺省的DWORD值是0。這個設置激活SFC。通常妳不需要改變這個值。然而,妳可以在0到4之間修改這個值使得激活SFC但不讓它彈出。

  如果將內核調試器掛起,妳最好關閉SFC。如果正在使用壹個內核調試器,妳可以將註冊表鍵的DWORD值修改為1,這會關閉SFC並且會在以後的每次啟動時都提示妳是否再次激活SFC。

  妳也可以通過將DWORD值設為2來關閉SFC。這個選項只是在下次啟動時關閉SFC。沒有再激活SFC的選項,因為SFC將在這之後啟動時自動激活。

  SFCScan

  在這之前,我解釋了SFC的SCANONCE, SCANBOOT,和REVERT選項。只要妳使用這些選項,實際上SFC是在修改SFCScan註冊表鍵。妳可以通過改變它的DWORD賦值來修改這個鍵。

  默認的值是0。這個值的意思是不需要在啟動時掃描受保護文件。這個設置相當於運行SFC /REVERT命令。

  改變DWORD值為1,意思是在每次啟動時都掃描受保護文件。設置SFCScan的值為1相當於運行SFC /SCANBOOT命令。

  最後,設DWORD值為2就是告訴SFC在下次啟動時掃描受保護文件,但並非以後的所有啟動。這相當於運行SFC /SCANONCE命令。

  SFCQuota

  SFCQuota註冊表鍵用來控制SFC文件緩存的大小。或許妳會記得,之前在我談到SFC /CACHESIZE=x 命令時,我提到關於文件緩存的默認大小,存在許多不壹致的信息。然而在我的系統上,註冊表鍵SFCQuota的DWORD值默認為0xffffffff。根據微軟知識庫,這個值對應文件緩存的大小為300 MB。同壹篇知識庫的文章指出通過修改這個值為FFFFFFFF,妳可以緩沖存儲所有受保護的系統文件。

  SFCDllCacheDir

  在這之前,我解釋說Windows將DLLCACHE文件夾作為存儲系統文件備份的地方。通常的,這個文件夾位於\WINDOWS\SYSTEM32目錄下。不過通過修改SFCDllCacheDir註冊表鍵,妳可以修改文件緩存的位置。

  文件緩存文件夾壹般位於DLLCACHE目錄下,但通過修改這個註冊表鍵,妳可以修改這個文件夾的位置。唯壹需要註意的壹點是妳必須指定壹個已經存在於本地硬盤驅動器上的地址。在Windows 2000裏,妳可以指定壹個網絡共享作為DLLCACHE的路徑,但在Windows XP中沒有這個選項。

  SFCShowProgress

  另壹個與SFC相關的註冊表鍵是SFCShowProgress鍵。這個註冊表鍵允許妳設置它的DWORD值為0,或1。缺省值是0,它將禁止顯示SFC的進程情況。設值為1就可以讓SFC顯示進展情況。

  源文件地址

  在這之前,我解釋了WFP和SFC是如何工作的,我指出在某些條件下妳可能必須提供Windows安裝CD或者有效源文件的拷貝。然而通過修改註冊表,向Windows指明壹個源文件目錄是完全可能的,而無需Windows再向妳詢問這些文件。

  這個註冊表鍵在註冊表的另壹部分。妳必須找到下面這個鍵:

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup

  壹旦妳找到了這個位置,通過使用壹個驅動器符號或者路徑或者壹個UNC,妳可以指定Windows系統文件的位置。

  使用這個命令的前提是妳必須將文件放在名為I386的目錄中。例如,如果妳的Windows系統文件位於壹個名為C:\I386的目錄中,那麽妳只需在註冊表中指定路徑為C:\,因為Windows假定I386這個目錄是存在的。同樣的,如果妳打算使用壹個UNC共享,I386文件夾必須存在於共享目錄下。例如,如果妳打算共享的目錄名為FILES,妳需要將I386文件夾放在FILES目錄下。然後妳可以告訴Windows在\\server_name\FILES目錄下尋找共享文件。Windows將在\\server_name\FILES\I386目錄中尋找系統文件。

 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Arwen Build 81206