有人曾經說過,瞭解了註冊表就讀懂了WIN系統,這句話是一點都不假的。那麼,什麼是註冊表?註冊表有什麼功能?如何去修改註冊表以達到最佳的效果?又如何來區分註冊表裡有用和無用甚至是危害的部分呢?
什麼是註冊表?在還是使用Dos和Win3.x作業系統的時代裡,大部分的應用程式都採用了ini檔案(初始設定檔案)來儲存一些配置資訊,如設定路徑,環境變數等。system.ini和win.ini控制著所有windows和應用程式的特徵和存取方法,它在少數的使用者和少數應用程式的環境中工作的很好。隨著應用程式的數目的不斷增加和複雜性的日益增強,則需要在.ini檔案中添加更多的參數項。這樣下來,在一個變化的環境中,在應用程式安裝到系統中後,每個人都會更改.ini檔案。然而,幾乎沒有一個人在刪除應用程式後刪除.ini檔案中的相關設定,所以system.ini和win.ini這個兩個檔案會變的越來越大。每次增加的內容會導致系統效能越來越慢,在每次應用程式的升級都出現類似的難題:升級後會增加更多的參數項但是從來不去掉舊的參數設定。而且還有一個明顯的問題,一個.ini檔案的最大尺寸是64KB。為了能夠解決這個問題,軟體商自己開始支援自己的.ini檔案,然後指向特定的ini檔案,這樣下來多個.ini檔案影響了系統正常的存取層級設定。
在windows作業系統序列裡,system.ini和win.ini這兩個檔案包含了作業系統的所有控制功能和應用程式的資訊,system.ini管理電腦硬體,win.ini管理案頭和應用程式。所有驅動、字型、設定和參數會儲存在.ini檔案中,任何新程式都會被記錄在.ini檔案裡。這些記錄會在程式碼中被引用。因為受win.ini和system.ini檔案大小的限制,程式員添加輔助的.INI檔案以用來控制更多的應用程式。舉例來說,微軟的Word有一個word.ini檔案,它包含著選項、設定、預設參數和其他關係到Word運行正常的資訊。在system.ini和win.ini中只需要指出word.ini的路徑和檔案名稱即可。
為瞭解決相關的問題,微軟公司於1995年正式推出了取代了WIN3.X作業系統的WIN95,從某中程度上來說,WIN95的出現是一個劃時代的產物,因為Windows95第一次使用了“註冊表”來配置和管理許多隨插即用或者必備的硬體,以及臨時調用或永久駐留的軟體程式。這使得Windows95成為真正意義上的32位作業系統,具有了微機作業系統的五大準系統。這也使得註冊表這個東西第一次出現在了眾人的視線中。
註冊表最初被設計為一個應用程式的資料檔案相關參考檔案,最後擴充成對32位作業系統和應用程式套件組合括了所有功能下的東西。註冊表是一套控制作業系統外表和如何響應外來事件工作的檔案。這些“事件”的範圍從直接存取一個硬體裝置到介面,如何響應特定使用者到應用程式如何運行等。註冊表因它的目的和性質變的很複雜,它被設計為專門的針對32位應用程式工作,檔案的大小被限制在大約40MB。利用一個功能強大的註冊表資料庫來統一集中地管理系統硬體設施,軟體配置等資訊,從而方便了管理,增強了系統的穩定性。
由此可見,註冊表(Registry)是Windows95以上版本作業系統中硬體裝置以及客戶應用程式得以正常運行和儲存設定的核心“資料庫”;也可以說是一個非常巨大的樹狀分層結構的資料庫系統。它記錄了使用者安裝在機器上的軟體和每個程式的相互關聯資訊;它包含了電腦的硬體設定,包括自動設定的隨插即用的裝置和已有的各種裝置說明、狀態屬性以及各種狀態資訊和資料。
好了,說完了註冊表和它的發展曆程後,我們來關心一下它的功能。註冊表的一個好處是添加或刪除程式功能,這是開始菜單中控制台功能的一部分。你安裝軟體的時候,在註冊表中做了一個記錄,所以在添加或刪除程式中就會作為一個專門列表的一部分出現。註冊表儲存在你的硬碟的幾個檔案當中,但訪問和修改它們的唯一途徑是使用登錄編輯程式程式。要訪問它,點擊開始按鈕,然後點擊運行。在出現的對話方塊中輸入regedit並按Enter鍵。這會進入登錄編輯程式,你現在就看到了註冊表。
註冊表組織得更像磁碟上的檔案,如果你曾經在Windows瀏覽器中使用過資料夾檢視的話,你會根據很熟悉。然而在註冊表中,這些檔案夾被稱為鍵。要開啟某個鍵,只需點擊它旁邊的小加號(+)。然後你會看到每個鍵下包含更多的鍵,稱為子鍵或值。值是指各種不同鍵的單獨設定,因此是可自訂的。它們在註冊表視窗左側以名稱排列,它們還說明了包含資料的類型以及資料本身。不用擔心使用的是哪種資料類型,因為這對資料本身是明顯的,或者在編輯過程中會作出解釋。這些數以千計的鍵根據邏輯進行排列,在你第一次看到註冊表的時候可能會使你感覺無從下手。要把頭緒理清楚,首先要知道有五個根鍵以及註冊表的基本組成結構。
在這裡需要提一下的是,隨著使用時間以及大量系統產生的垃圾影響,註冊表會變的越來越大,這並不是一個好現象,因為註冊表越龐大,你的電腦的運行就會變得越慢,所以很多新手朋友在問到為什麼自己的電腦越來越慢的時候,很多情況下就是因為你的註冊表內無用垃圾太多,所以導致自己的系統運行越來越緩慢,因此,經常的給註冊表“瘦瘦身”是很有必要的。當然,現在很多第三方軟體,例如超級兔子、WINDOWS最佳化大師等系統整理軟體都附帶了註冊表垃圾清除功能,建議新手朋友們務必下一個,經常最佳化自己的註冊表和系統,多研究研究裡面的一些配置無論是對電腦的安全和運行都會很有協助。
下面我們就根據圖2來逐一解釋:
在windowsNT/2000/XP中,如果用windows內建的編輯器開啟的時候,只能看到五個,還有一個隱藏的根鍵:HKEY_PERFOR_MANCE_DATA。
*HKEY_CLASS_ROOT
記錄windows作業系統中所有資料檔案的格式和關聯資訊,主要記錄不同檔案的檔案名稱尾碼和與之對應的應用程式其下子鍵可分為兩類:一類是已經註冊的各類檔案的副檔名,這類子鍵前面都帶有一個".";另一類是各類檔案類型有關資訊。
*HKEY_CURRENT_USER
此根根鍵包含當前登入使用者的使用者設定檔資訊,這些資訊保證不同的使用者登入電腦時,使用自己的修改化設定,例如自己定義的牆紙,自己的收件匣,自己的安全存取權限。
*HKEY_LOCAL_MACHINE
此根鍵包含了當前電腦的配置靈氣,包括所安裝的硬體以軟體佈建。這些資訊是為所有的使用者登入系統服務的。這是事個註冊表中最龐大也是最重要的根鍵!
*HKEY_USERS
HKEY_USERS根鍵包括預設使用者的資訊(DEFAULT子鍵)和所有以前登陸使用者的資訊。
*HKEY_CURRENT_CONFIG
此根鍵實際上是HKDY_LOCAL_MACHINE/CONFIG/0001分支下的資料完全一樣。
*HKEY_DYN_DATA根鍵
這個鍵儲存每次系統啟動時,建立的系統配置和當前效能資訊。這個根鍵只存在於windows9X中
*HKEY_PERFORMANCE_DATA
在windowsNT/2000/XP註冊表中雖然沒有HKEY_DYN_DAT鍵,但是它卻隱藏了一個名為"HKEY_PERFORMANCE_DATA的鍵。所有系統中的動態資訊都是存放在此子鍵中,系統內建的登錄編輯程式無法看到這些鍵。只可以用專門的程式來查看此鍵,比如使用效能監控器。
下面再談談註冊表的修改問題。在這裡提醒大家一句,如果你沒有把握,切記在修改之前,一定要備份註冊表。修改註冊表,除了用微軟內建的編輯器——regedit.exe外,還可以通過第三方軟體進行修改,或者利用手工寫.reg註冊表檔案。有沒有試過自己寫註冊表檔案?不用任何修改器?直接把寫好的註冊表檔案——.reg倒入註冊表?呵呵,這項技巧並不需要每個人都知道了,你只要知道上面的兩個就可以了。當然,如果你是電腦迷,我們贊成深入學習。
現在我們來看看.reg檔案的結構如何。
.reg檔案的標準格式如下:
REGEDIT4
[路徑](注意用大小寫)
"鍵名"="索引值"(針對字串型索引值)
"鍵名"=hex:索引值(針對二進位型索引值)
"鍵名"=dword:索引值(針對DWORD索引值)
括弧裡面的內容為本人的注釋,寫檔案的時候就不需要那些小括弧了,其他上面所列的都必須包括。注意引號輸入時不能用中文輸入的引號,必須用英文的引號,否則會出錯。
那麼,怎麼寫.reg檔案呢?我們需要一個文字編輯器,用windows的記事本就可以了。單擊滑鼠右鍵,選擇建立文字文件,然後在產生的文字檔裡輸入上面規格的內容就可以了,最後,選擇另存新檔,輸入你想要的檔案名稱+.reg儲存即可。比如你要產生test.reg,輸入test.reg儲存即可,你可以看到產生了一個帶表徵圖的test.reg.雙擊運行這個test.reg檔案就能相應的修改註冊表了,系統會提示“是否匯入註冊表”之類的資訊,確定就可以了。OK,我們可以手動寫註冊表了。先別急,我們來看看一個標準範例,這是從註冊表裡面匯出來的,大家慢慢學習,跟著模仿一下就能寫出自己的.reg檔案了。
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoRun"=dword:00000000
"NoRecentDocsMenu"=hex:01,00,00,00
"NoFavoritesMenu"=dword:00000000
"user"="sundrink"
大家可以看到,dword是16進位,hex是二進位,字串則可以直接賦值。只要將上面的內容複寫儲存到文字文件裡,然後另存新檔你想要的.reg檔案運行就可以了。呵呵,原來也不是很難嘛,耐心一點就可以了。當然,你要模仿,要自己動手寫.reg檔案,用記事本就可以了。
說多兩句,為什麼要手寫註冊表?因為有時候我們會碰到一台鎖定regedit的機子,有什麼辦法解開呢?呵呵,如果你會手寫註冊表檔案的話,那很簡單了......大家發揮想象吧!用不了很長時間的。
以上的手動修改的方法只針對那些電腦愛者來說的,一般新手朋友最好還是老實的用第三方軟體裡內建的方法來修改,這樣既方便又能看的清楚,不過還是建議大家在修改前一定要做好備份工作。好,關於註冊表的修改問題就說到這裡了,網上有很多類似的教程,比如提高網速的,最佳化效能的都有很多,大家可以勤用google搜尋一下,自己學習。其實電腦很多東西都是自己摸索出來的,只有自己勤去摸索,你的電腦水平才能得到真正的提高。閑話不再多說,我們繼續。
現在我們說到了註冊表的安全問題。從電腦病毒的發展趨勢來看,蠕蟲和木馬類的病毒越來越多。與普通感染可執行檔的檔案型病毒不同,此類程式通常不感染正常的系統檔案,而是將自身作為系統的一部分安裝到系統中。相對來說,此類病毒的隱蔽性更強一些,更不容易被使用者發覺。但是無論什麼樣的病毒程式在感染系統時都會留下一些蛛絲馬跡。在此我們總結一下各種病毒可能會更改的地方,以便能夠更快速地找到它們。
一、更改系統的相關設定檔。這種情況主要是針對95/98系統。
病毒可能會更改autoexec.bat,只要在其中加入執行病毒程式檔案的語句即可在系統啟動時自動啟用病毒。*更改drive:\windows\win.ini或者system.ini檔案。病毒通常會在win.ini的“run=”後面加入病毒自身的檔案名稱,或者在system.ini檔案中將“shell=”更改。
二、更改註冊表健值。
目前,只要新出的蠕蟲/特洛伊類病毒一般都有修改系統註冊表的動作。它們修改的位置一般有以下幾個地方:
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce\
說明:在系統啟動時自動執行的程式
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices\
說明:在系統啟動時自動執行的系統服務程式
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
說明:在系統啟動時自動執行的程式,這是病毒最有可能修改/添加的地方。例如:Win32.Swen.B病毒將增加:HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ucfzyojza="cxsgrhcl.exeautorun"
HKEY_CLASSES_ROOT\exefile\shell\open\command
說明:此索引值能使病毒在使用者運行任何EXE程式時被運行,以此類推,..\txtfile\..或者..\comfile\..也可被更改,以便實現病毒自動啟動並執行功能。
另外,有些健值還可能被利用來實現比較特別的功能:
有些病毒會通過修改下面的索引值來阻止使用者查看和修改註冊表:
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\
System\DisableRegistryTools=
為了阻止使用者利用.REG檔案修改註冊表索引值,以下索引值也會被修改來顯示一個記憶體訪問錯誤視窗
例如:Win32.Swen.B病毒會將預設健值修改為:
HKCR\regfile\shell\open\command\(Default)="cxsgrhcl.exeshowerror"
通過對以上地方的修改,病毒程式主要達到的目的是在系統啟動或者程式運行過程中能夠自動被執行,已達到自動啟用的目的。
總結完了各種木馬、病毒可能會更改的地方,下面就接著談防禦問題了。當然,在談之前繼續一貫強調的備份註冊表,說實話,應對越來越厲害的木馬、病毒們,光靠現有的幾種辦法是遠遠不夠的,備份一個“徹底乾淨”的註冊表就是重中之重。備份的方法依然很多,網上鋪天蓋地都有,這裡也不再多做闡述,google一下就可以了。
安全隱患:在Windows2000/XP系統中,預設Messenger服務處於啟動狀態,不懷好意者可通過“netsend”指令向目標電腦發送資訊。目標電腦會不時地收到他人發來的騷擾資訊,嚴重影響正常使用。
解決方案:首先開啟登錄編輯程式。對於系統服務來說,我們可以通過註冊表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”項下的各個選項來進行管理,其中的每個子鍵就是系統中對應的“服務”,如“Messenger”服務對應的子鍵是“Messenger”。我們只要找到Messenger項下的START索引值,將該值修改為4即可。這樣該服務就會被禁用,使用者就再也不會受到“信”騷擾了。
安全隱患:如果駭客串連到了我們的電腦,而且電腦啟用了遠端登錄服務(RemoteRegistry),那麼駭客就可遠程設定註冊表中的服務,因此遠端登錄服務需要特別保護。
解決方案:我們可將遠端登錄服務(RemoteRegistry)的啟動方式設定為禁用。不過,駭客在入侵我們的電腦後,仍然可以通過簡單的操作將該服務從“禁用”轉換為“自動啟動”。因此我們有必要將該服務刪除。
找到註冊表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”下的RemoteRegistry項,右鍵點擊該項選擇“刪除”(圖1),將該項刪除後就無法啟動該服務了。
在刪除之前,一定要將該項資訊匯出並儲存。想使用該服務時,只要將已儲存的註冊表檔案匯入即可。
安全隱患:大家都知道在Windows2000/XP/2003中,系統預設開啟了一些“共用”,它們是IPC$、c$、d$、e$和admin$。很多駭客和病毒都是通過這個預設共用入侵作業系統的。
解決方案:要防範IPC$攻擊應該將註冊表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA”的RestrictAnonymous項設定為“1”,這樣就可以禁止IPC$的串連。
對於c$、d$和admin$等類型的預設共用則需要在註冊表中找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters”項。如果系統為Windows2000Server或Windows2003,則要在該項中添加索引值“AutoShareServer”(類型為“REG_DWORD”,值為“0”)。如果系統為Windows2000PRO,則應在該項中添加索引值“AutoShareWks”(類型為“REG_DWORD”,值為“0”)。
安全隱患:在Windows系統運行出錯的時候,系統內部有一個DR.WATSON程式會自動將系統調用的隱私資訊儲存下來。隱私資訊將儲存在user.dmp和drwtsn32.log檔案中。攻擊者可以通過破解這個程式而瞭解系統的隱私資訊。因此我們要阻止該程式將資訊泄露出去。
解決方案:找到“HKEY_LOACL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug”,將AUTO索引值設定為0,現在DR.WATSON就不會記錄系統運行時的出錯資訊了。同時,依次點擊“DocumentsandSettings→ALLUsers→Documents→drwatson”,找到user.dmp和drwtsn32.log檔案並刪除。刪除這兩個檔案的目的是將DR.WATSON以前儲存的隱私資訊刪除。
提示:如果已經禁止了DR.WATSON程式的運行,則不會找到“drwatson”檔案夾以及user.dmp和drwtsn32.log這兩個檔案。
安全隱患:不少木馬和病毒都是通過在網頁中隱藏惡意ActiveX控制項的方法來私自運行系統中的程式,從而達到破壞本地系統的目的。為了保證系統安全,我們應該阻止ActiveX控制項私自運行程式。
解決方案:ActiveX控制項是通過調用Windowsscriptinghost組件的方式運行程式的,所以我們可以先刪除“system32”目錄下的wshom.ocx檔案,這樣ActiveX控制項就不能調用Windowsscriptinghost了。然後,在註冊表中找到“HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}”,將該項刪除。通過以上操作,ActiveX控制項就再也無法私自呼叫指令碼程式了。
安全隱患:Windows2000的頁面分頁檔也和上文提到的DR.WATSON程式一樣經常成為駭客攻擊的對象,因為分頁檔有可能泄露一些原本在記憶體中後來卻轉到硬碟中的資訊。畢竟駭客不太容易查看記憶體中的資訊,而硬碟中的資訊則極易被擷取。
解決方案:找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemoryManagement”,將其下的ClearPageFileAtShutdown項目的值設定為1(圖2)。
這樣,每當重新啟動後,系統都會將分頁檔刪除,從而有效防止資訊外泄。
安全隱患:使用Windows系統衝浪時,常會遇到密碼資訊被系統自動記錄的情況,以後重新訪問時系統會自動填寫密碼。這樣很容易造成自己的隱私資訊外泄。
解決方案:在“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpolicies”分支中找到network子項(如果沒有可自行添加),在該子項下建立一個新的雙位元組值,名稱為disablepasswordcaching,並將該值設定為1。重新啟動電腦後,作業系統就不會自作聰明地記錄密碼了。
安全隱患:現在的病毒很聰明,不像以前只會通過註冊表的RUN值或MSCONFIG中的項目進行載入。一些進階病毒會通過系統服務進行載入。那麼,我們能不能使病毒或木馬沒有啟動服務的相應許可權呢?
解決方案:運行“regedt32”指令啟用帶許可權分配功能的登錄編輯程式。在註冊表中找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”分支,接著點擊功能表列中的“安全→許可權”,在彈出的Services使用權限設定視窗中單擊“添加”按鈕,將Everyone帳號匯入進來,然後選中“Everyone”帳號,將該帳號的“讀取”使用權限設定為“允許”,將它的“完全控制”許可權取消(圖3)。現在任何木馬或病毒都無法自行啟動系統服務了。當然,該方法只對沒有獲得管理員權限的病毒和木馬有效。
安全隱患:很多病毒都是通過註冊表中的RUN值進行載入而實現隨作業系統的啟動而啟動的,我們可以按照“禁止病毒啟動服務”中介紹的方法將病毒和木馬對該索引值的修改許可權去掉。
解決方案:運行“regedt32”指令啟動登錄編輯程式。找到註冊表中的“HKEY_CURRENT_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRUN”分支,將Everyone對該分支的“讀取”使用權限設定為“允許”,取消對“完全控制”許可權的選擇。這樣病毒和木馬就無法通過該索引值啟動自身了。
病毒和木馬是不斷“發展”的,我們也要不斷學習新的防護知識,才能抵禦病毒和木馬的入侵。與其在感染病毒或木馬後再進行查殺,不如提前做好防禦工作,修築好牢固的城牆進行抵禦。養成良好的安全上網習慣,盡量不接觸那些不安全的網站和下載不安全的軟體、視頻等,開機運行360和殺毒軟體,備份一份安全的註冊表檔案,勤打補丁多學習,“防患於未然”才是我們應該追求的。
PS:本文在書寫過程中引用了網路上的一些內容,在此,對那些默默奉獻出自己知識的無名朋友們表示感謝!