大家知道嗎?微軟發布的具有數字簽名的SP2才是正式版本(右擊打開文件屬性窗口可以查看到圖1所示的數字簽名信息),這是怎麼一回事呢?
圖1
一、Windows的文件保護功能
在Windows 2000以前的Windows版本中,安裝操作系統之外的軟件,可能會覆蓋掉一些共享的系統文件,例如動態鏈接庫(*.dll文件)、可執行文件(*.exe),這樣可能會導致程序運行不穩定、系統出現故障,這主要是由於所謂的DLL陷阱所導致。
為了徹底解決這一問題,在Windows 2000和Windows XP中,微軟引入了“Windows文件保護”機制用來防止替換受到保護的系統文件,包括*.sys、*.dll、*.ocx、*.ttf、*.fon、*.exe等類型的文件,Windows文件保護在後台自動運行,可以保護Windows安裝程序安裝的所有文件。
Windows文件保護能夠檢測到其他程序要替換或移動受保護的系統文件的意圖,那麼它是依據什麼來檢測的呢?其實,Windows文件保護是通過檢測文件的數字簽名,以確定新文件的版本是否為正確的Microsoft版本,如果文件版本不正確,Windows文件保護會自動調用dllcache文件夾或Windows中存儲的備份文件替換該文件,如果Windows文件保護無法定位相應的文件,那麼會提示用戶輸入該位置或插入安裝光盤。
二、認識數字簽名
數字簽名是允許用戶驗證的,如果某文件沒有有效的數字簽名,那麼將無法確保該文件確實來自它所聲明的來源,或者無法確保它在發行之後未被篡改過(可能由病毒篡改)。此時,比較安全的做法是,除非你確定該文件的創建者而且知道其內容,那麼才能安全地打開,否則建議不要輕易打開該文件。凡是通過了微軟數字簽名的硬件或軟件,其外包裝上一般都會出現“為Microsoft Windows XP設計(Designed for Microsoft Windows XP)”的徽標。
在計算機上安裝新軟件時,系統文件和設備驅動程序文件有時會被未經過簽名的或不兼容的版本覆蓋,導致系統不穩定。隨Windows XP一起提供的系統文件和設備驅動程序文件都有Microsoft數字簽名,這表明這些文件都是原始的未更改過的系統文件,或者它們已被Microsoft同意可以用於Windows。在Windows 2000/XP中提供了“文件簽名驗證”工具(見圖2),Windows 9x則提供了“系統文件檢查器”,我們可以通過這些工具來檢查系統文件的數字簽名狀態。
圖2
默認情況下,Windows文件保護始終處於啟用狀態,同時允許Windows數字簽名文件替換現有文件。目前,簽名文件通過以下方式進行分發:Windows Service Pack、修補程序分發、操作系統升級、Windows Update、Windows設備管理器/類別安裝程序。
三、數字簽名實例秀
說了半天,除了保護系統文件外,數字簽名究竟能夠給普通用戶帶來哪些好處呢?下面,我們通過幾個實例來進行說明:
實例1:驗證Windows XP的核心文件是否被替換
現在Windows XP版本有大企業版本、聯想隨機版本等,那麼如何來驗證手頭的Windows XP屬於微軟原版呢?
這裡,我們只要檢查Windows XP的系統文件是否能夠通過文件簽名驗證即可。在“開始→運行”對話框鍵入“sigverif”命令打開“文件簽名驗證”窗口,點擊“開始”按鈕,首先會建立文件列表,稍候會看到圖3所示窗口,這裡未經過數字簽名的文件大都是驅動程序文件,只要winLogon.exe、licdll.dll兩個文件未出現在列表中,那麼說明你的Windows XP未被篡改過。
圖3
實例2:驅動程序簽名
Windows XP自帶的驅動程序都通過了微軟的WHQL數字簽名,在查看通過數字簽名的驅動程序時會看到一個圖標。不過當我們在安裝或升級設備驅動程序時,經常會看到圖4所示的警告信息,說是“沒有通過Windows徽標測試,無法驗證它同Windows XP的相容性”,其實這是Windows XP的文件保護功能在起作用,以降低用戶安裝無保護驅動程序的風險,當然我們只要選擇“仍然繼續”按鈕就可以忽略這一提示並完成驅動程序的安裝。
圖4
假如你覺得這個警告提示框非常煩人,那麼可以打開“系統屬性”窗口,切換到“硬件”選項頁,點擊“驅動程序簽名”按鈕進入圖5窗口,在“文件簽名驗證”下有3個選項:
圖5
忽略:允許該計算機安裝所有設備驅動程序,無論其是否具有數字簽名。
警告:當安裝程序試圖安裝沒有數字簽名的設備驅動程序時,將顯示警告消息,這是Windows XP的默認行為。
阻止:阻止安裝程序安裝那些沒有數字簽名的設備驅動程序。
很明顯,選中“忽略”選項,並設置為系統默認選項,以後安裝或升級設備驅動程序時,就不會彈出簽名驗證警告了。
實例3:將數字簽名信息寫入日志文件
打開“文件簽名驗證”窗口,點擊“高級”按鈕進入“高級文件簽名驗證設置”對話框,切換到“正在記錄”選項卡,選中“將文件簽名驗證結果保存到一個日志文件”復選框(見圖5),如果選擇“附加到現有日志文件”可以將新的搜索結果添加到日志文件的末尾,選中“改寫現有日志文件”將使用新的日志文件替換現有的日志文件,然後鍵入日志文件的名稱,以後就可以將搜索結果寫入文件。
假如你只是希望覆蓋日志文件,那麼直接在“開始→運行”對話框中鍵入“sigverif /defscan”命令執行即可。
實例4:禁用Windows的文件保護功能
在Windows 2000/XP的WindowsSystem32目錄下有一個名為dllcache的文件夾,其中保存了重要文件的備份,例如Windows XP的dllcache文件夾中有2169個重要文件,占用364.5MB之多。如果Windows 2000/XP發現某個受保護的系統文件被替換或損壞,那麼會從dllcache文件夾中自動恢復。
如果你由於某些原因而需要騰出一部分可用空間,那麼可以在“開始→運行”對話框中鍵入“sfc /purgecache”命令清空Dllcache文件夾,注意“/”前有一個英文半角的空格字符,這樣將清除保存在dllcache中的文件緩存。不過這樣一來,Windows文件保護就只能從Windows安裝光盤恢復系統文件了,因此你將經常會看到提示插入Windows安裝光盤的提示,因此不建議朋友們使用該技巧,如果你希望禁用Windows文件保護的話,可以在“開始→運行”對話框中鍵入“gpedit.msc”打開“本地計算機策略→計算機配置→管理模板→系統”窗口,找到“Windows文件保護”組,在右側窗格中雙擊“設置Windows文件保護掃描”項,設置為“已禁用”即可,在這裡還可以限制文件保護緩存的大小和指定文件保護緩存的位置。