




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
注冊表保護(hù)系統(tǒng)設(shè)計與實現(xiàn)摘要注冊表作為MicrosoftWindows操作系統(tǒng)的核心,控制著Windows整個系統(tǒng)的運(yùn)行,而MicrosoftWindows是目前應(yīng)用最廣泛,同時也是遭受惡意行為攻擊最多的操作系統(tǒng)。當(dāng)用戶在編輯注冊表的時候很容易破壞注冊表,結(jié)果會導(dǎo)致操作系統(tǒng)癱瘓,所以注冊表工具成為用戶的一種常用的工具軟件。因此本文通過監(jiān)視注冊表訪問行為,利用Detours和VC提供的API函數(shù)完成應(yīng)用程序的編寫對正常訪問Windows注冊表行為建立正常檢測模型,從而來判斷對注冊表的訪問行為是否偏離正常模型來檢測病毒和入侵行為。該課題從注冊表的常見編輯功能出發(fā),進(jìn)行集成化設(shè)計,為用戶提供一種實用的注冊表工具軟件。該工具軟件是在VC6.0開發(fā)環(huán)境下完成了主動攔截注冊表訪問并提示給用戶的主要功能。最后,通過測試,滿足了用戶常用需求。關(guān)鍵詞:注冊表,Detours,APIHook,WindowsiDesignandimplementationofregistryprotectionsystemAbstractTheRegistrycontrollingthewholerunningperformanceofsystemisthekernelofoperatingsystemofMicrosoftWindowswhichisthemostpopularbutsuffersfrommanymaliciousattacks.Theregistryistendingtobedestroyedwhenbeingeditedbyusers,andthiswillleadtotheCollapseofsystem,sotheregistrationisoftenusedbyusersasatool.Asaresult,inthispaper,wewillmonitortheregistrybehaviorbyprogrammingtheAPIfunctionprovidedbyVCandusingtheDetourstoformaDetectionmodel,itcancheckifthebehaviorsofeditingregistryarelegalanddetecttheintrusionbehavior.Thesubjectwillprovideuserswitharegistryeditingsoftwareintegratedwithnormaleditingfunctionsofregistry.ThesoftwareisdevelopedwithVC6.0whichhasthemainfunctionofactiveinterceptionofabnormaleditingbehaviorofregistry.Intheend,itistestedtoseeifitsatisfiestherequirementofusers.KeyWords:Registry;Detours;APIHook;Windowsii目錄摘要.................................................................................................................................................iAbstract................................................................................................................................................ii第一章引言..................................................................................................................................11.1注冊表產(chǎn)生的背景.................................................................................................................11.2課題研究的現(xiàn)狀....................................................................................................................11.3課題研究的方法.....................................................................................................................3第二章理論基礎(chǔ)................................................................................................................................42.1Windows2000/XP的物理文件構(gòu)成....................................................................................42.2五大注冊表根鍵的概述........................................................................................................52.2.1WindowsNT注冊表五大根鍵...................................................................................52.2.2Windows2000注冊表的五大根鍵............................................................................52.2.3WindowXP/2003注冊表的五大根鍵.........................................................................82.3Windows2000/XP/2003注冊表的五大根鍵解析...............................................................92.3.1HKEY_CLASSES_ROOT根鍵..................................................................................92.3.2HKEY_CURRENT_USER根鍵...............................................................................102.3.3HKEY_USERS根鍵.................................................................................................102.3.4HKEY_LOCAL_MACHINE根鍵...........................................................................152.3.5HKEY_CURRENT_CONFIG根鍵..........................................................................18第三章系統(tǒng)設(shè)計..............................................................................................................................193.1技術(shù)方案..............................................................................................................................193.2攔截模塊..............................................................................................................................203.2.1截獲部分....................................................................................................................203.2.2自定義函數(shù)模塊........................................................................................................203.3界面模塊..............................................................................................................................21第四章系統(tǒng)實現(xiàn)..............................................................................................................................224.1系統(tǒng)基本配置......................................................................................................................224.2系統(tǒng)關(guān)鍵代碼......................................................................................................................22iii4.2.1截獲部分.....................................................................................................................224.2.2設(shè)置全局鉤子............................................................................................................244.2.3自定義函數(shù)................................................................................................................25第五章系統(tǒng)測試..............................................................................................................................28第六章總結(jié)與展望..........................................................................................................................32參考文獻(xiàn)......................................................................................................................................33iv第一章引言1.1注冊表產(chǎn)生的背景在上個世紀(jì)90年代,計算機(jī)技術(shù)得到了飛速的發(fā)展,網(wǎng)絡(luò)及操作系統(tǒng)的處理能力得到了不斷的增強(qiáng),新的可用計算機(jī)處理的信息也是接連不斷,但是為了能更好地滿足用戶的需求,軟件和硬件的開放性愈來愈強(qiáng),大家能夠按照自己的意志隨意定制自己的系統(tǒng)。操作系統(tǒng)的一個特點(diǎn)就是允許用戶按照自己的要求對計算機(jī)系統(tǒng)的硬件和軟件進(jìn)行各種各樣的配置。早期的圖形操作系統(tǒng),如Win3.x中,對軟硬件工作環(huán)境的配置是通過對擴(kuò)展名為.ini的文件進(jìn)行修改來完成的,但I(xiàn)NI文件管理起來很不方便,因為每種設(shè)備或應(yīng)用程序都得有自己的INI文件,并且在網(wǎng)絡(luò)上難以實現(xiàn)遠(yuǎn)程訪問。為了克服上述這些問題,在Windows95及其后繼版本中,采用了一種叫做“注冊表”的數(shù)據(jù)庫來統(tǒng)一進(jìn)行管理,將各種信息資源集中起來并存儲各種配置信息。按照這一原則,Windows各版本中都采用了將應(yīng)用程序和計算機(jī)系統(tǒng)全部配置信息容納在一起的注冊表,用來管理應(yīng)用程序和文件的關(guān)聯(lián)、硬件設(shè)備說明、狀態(tài)屬性以及各種狀態(tài)信息和數(shù)據(jù)等。注冊表被稱為Windows操作系統(tǒng)的核心[1][2],它實質(zhì)上是一個龐大的數(shù)據(jù)庫,存放了關(guān)于計算機(jī)硬件的全部配置信息、系統(tǒng)和應(yīng)用軟件的初始化信息、應(yīng)用軟件和文檔文件的關(guān)聯(lián)關(guān)系、硬件設(shè)備的說明以及各種狀態(tài)信息和數(shù)據(jù),包括Windows操作時不斷引用的信息。具體來說,在啟動Windows時,注冊表會對照已有硬件配置數(shù)據(jù),檢測新的硬件信息;系統(tǒng)內(nèi)核從注冊表中選取信息包括要裝入什么設(shè)備驅(qū)動程序,以及按什么次序裝入,內(nèi)核傳回它自身的信息,例如版權(quán)號;同時設(shè)備驅(qū)動程序也向注冊表傳送數(shù)據(jù),并從注冊表接收裝入和配置參數(shù),一個好的設(shè)備驅(qū)動程序會告訴注冊表它有使用什么系統(tǒng)資源,例如硬件中斷或DMA通道等,另外,設(shè)備驅(qū)動程序還要報告所發(fā)現(xiàn)的配置數(shù)據(jù);為應(yīng)用程序或硬件的運(yùn)行提供增加新的配置數(shù)據(jù)的服務(wù)。1.2課題研究的現(xiàn)狀Windows的注冊表主要包含了五個方面的信息,即PC的全部硬件、軟件設(shè)置、當(dāng)前配置、動態(tài)狀態(tài)及用戶特定設(shè)置等內(nèi)容,主要儲存在C:windows下的system.dat和user.dat兩個文件1中。由此可見注冊表是Windows系統(tǒng)的重中之重,稍有閃失,后果將是十分的嚴(yán)重。隨著經(jīng)濟(jì)的發(fā)展,越來越多的人用上了個人計算機(jī),并且連接了因特網(wǎng)。但安全的問題也隨之而來。越來越多的病毒,木馬,惡意軟件,流氓程序以及間諜程序進(jìn)入個人電腦,對用戶造成巨大的損失。研究表明,上述程序多數(shù)運(yùn)行在Windows平臺,并且通過修改注冊表達(dá)到隨機(jī)啟動的目的。例如著名的冰河,BO2K等木馬。其實,為了減少因為上述安全風(fēng)險,注冊表有一些內(nèi)建的安全限制(比如注冊表默認(rèn)限制某些區(qū)域只能被特定用戶看到,例如HKLM\SAM和HKLM\SECURITY就只能被LocalSystem用戶看到)。但僅僅有這些安全措施還遠(yuǎn)遠(yuǎn)不能保證注冊表的安全,我們還應(yīng)該進(jìn)行更加嚴(yán)格的安全控制。目前對于注冊表訪問操作的防護(hù)措施主要有以下四點(diǎn):1、設(shè)置對注冊表工具(Regedit.exe)的運(yùn)行限制保護(hù)注冊表不受未經(jīng)授權(quán)訪問的做好辦法之一是讓惡意用戶根本無法訪問注冊表。對于服務(wù)器來說,這意味著要嚴(yán)格控制服務(wù)器的物理安全,只允許管理員本地登錄。對于其他系統(tǒng),或者無法防止用戶本地登錄到服務(wù)器的情況下,則可以針對Regedit.exe和Reg.exe配置訪問權(quán)限,使其更安全。另外,我們也可以嘗試從系統(tǒng)中刪除注冊表編輯器以及Reg命令,但這會導(dǎo)致其他問題,造成管理員系統(tǒng)管理的麻煩,尤其是當(dāng)管理員需要從遠(yuǎn)程訪問注冊表的時候,這樣的做法有些自斷后路。2、設(shè)置對注冊表鍵的訪問權(quán)限對于注冊表的權(quán)限控制,我們還可以具體到對注冊表鍵的訪問控制。對于注冊表鍵的權(quán)限設(shè)置,我們除了可以直接進(jìn)行權(quán)限的編輯外,還可以使用安全模板進(jìn)配置。使用恰當(dāng)?shù)陌踩0宀粌H可以鎖定對注冊表的訪問,而且不要擔(dān)心錯誤的設(shè)置會導(dǎo)致系統(tǒng)無法啟動或應(yīng)用程序無法運(yùn)行。不過,通常情況下我們只是針對特定的注冊表鍵進(jìn)行權(quán)限控制,這時候只能通過直接進(jìn)行權(quán)限的編輯。具體方法是:運(yùn)行注冊表編輯器,找到要設(shè)置的鍵,用鼠標(biāo)右鍵單擊選擇“權(quán)限”,或者也可以首先選中該鍵然后從注冊表編輯器的“編輯”菜單中選擇“權(quán)限”也可,隨后會打開“SAM的權(quán)限”對話框。和文件權(quán)限的設(shè)置一樣,我們可安裝需要添加或刪除組和用戶,選中某個對象,設(shè)置拒絕或者允許某個權(quán)限。3、安全設(shè)置控制對注冊表的遠(yuǎn)程訪問Windows的注冊表不僅可本地訪問,還可遠(yuǎn)程訪問。因此,攻擊者或者未經(jīng)授權(quán)的用戶2可能會像管理員一樣嘗試遠(yuǎn)程訪問系統(tǒng)的注冊表,這無疑會帶來極大的安全風(fēng)險。通常情況下,對于個人系統(tǒng)我們不會遠(yuǎn)程訪問注冊表,那么就可以禁止注冊表的遠(yuǎn)程訪問。4、部署審核監(jiān)視用戶對注冊表的操作審核是Windows系統(tǒng)的一項重要功能,就像對文件等其他系統(tǒng)項進(jìn)行審核一樣,我們也可注冊表的訪問進(jìn)行審核。據(jù)此我們可了解到哪些用戶訪問了注冊表,以及他對注冊表進(jìn)行了哪些操作。不過,啟用對注冊表的審核后會耗費(fèi)一定的系統(tǒng)性能。所以建議,我們只選擇自己最關(guān)心的、必要的審核對象,以減少被寫入安全日志中的數(shù)據(jù)流,以此減少對系統(tǒng)性能帶來的負(fù)擔(dān)。但是以上四點(diǎn)防護(hù)措施,對于那些對系統(tǒng)設(shè)置不是很了解的用戶很難達(dá)到預(yù)期的效果。因此通過相應(yīng)的軟件,可以攔截對注冊表的訪問,從根本上阻止惡意程序的運(yùn)行,以此達(dá)到保護(hù)用戶文件數(shù)據(jù)的目的。調(diào)查同時發(fā)現(xiàn),市場上已經(jīng)出現(xiàn)了同類功能的產(chǎn)品,如:卡巴斯基、瑞星、360安全衛(wèi)士等??梢姲l(fā)展注冊表保護(hù)技術(shù)是有著很好的前景的。1.3課題研究的方法注冊表管理工具是建立在WindowsXP、Windows2000和Windows2003平臺上的應(yīng)用程序設(shè)計。要掌握注冊表各個根鍵所對應(yīng)的系統(tǒng)功能,要清楚的知道注冊表的數(shù)據(jù)類型。要對注冊表的相應(yīng)的鍵值進(jìn)行準(zhǔn)確的讀取和寫入,使用MicrosoftVisualC++6.0作為開發(fā)工具,利用Detours和VC提供的API函數(shù)完成應(yīng)用程序的編寫。主要運(yùn)用RegOpenKeyEx()、RegQueryValueEx()、RegSetValueEx()等函數(shù)來完成注冊表鍵值的讀寫、創(chuàng)建與刪除,從而實現(xiàn)對系統(tǒng)設(shè)置。3第二章理論基礎(chǔ)2.1Windows2000/XP的物理文件構(gòu)成在講述Windows2000的物理文件構(gòu)成時,必須提到一個概念,即配置單元文件[3]。在Windows2000注冊表編輯器中,文件菜單下有個“加載/卸載文件配置單元”選項。所謂的配置單元是作為文件出現(xiàn)在硬盤上的注冊表的一部分。注冊表子樹被劃分成配置單元。配置單元是根鍵、子鍵和鍵值的離散體,它位于注冊表層的頂部配置單元受Systemroot\System32\Config或Systemroot\ProFile\Username文件夾中的單個文件和.log文件的支持。默認(rèn)情況下,大多數(shù)配置單元文件(Default、SAM、Security、Software和System)存儲在Systemroot文件夾。而每個計算機(jī)用戶的配置文件信息(包括Ntuser.dat和Ntuser.dat.log)的位置,取決于Windows2000是全新安裝還是從Windows95/98或從WindowsNT升級安裝。在全新安裝以及從Windows95/98升級安裝的情況下,Ntuser.dat和Ntuser.dat.log文件存儲在%SystemDrive%\DocumentsandSettings\Username文件夾中。在從WindowsNT升級的安裝中,Nturser.dat和Ntuser.dat.log文件存儲在%Systemroot%\ProFile\Username文件夾中。因為配置單元是一個文件,所以它可以從一個系統(tǒng)移動到另一個系統(tǒng)。但是,你必須使用注冊表編輯器編輯該文件。Windows2000注冊表中的每個配置單元均與一組標(biāo)準(zhǔn)文件相關(guān)聯(lián)。如下表2.1所示顯示運(yùn)行Windows2000的計算機(jī)的標(biāo)準(zhǔn)配置單元和文件。WindowsXP注冊表物理文件構(gòu)成與Windows2000基本相同。知道Windows注冊表物理文件的構(gòu)成及保存位置對于注冊表的備份和恢復(fù)十分有用。因此,這里有必要介紹注冊表物理文件的另一個保存位置:Windows\Repair。這個文件夾中保存的是初始化注冊表的5個文件(System、Software、SAM、Security、Default),在因注冊表的無緣無故造成系統(tǒng)崩潰時,將它們復(fù)制到System32\Config(先將備份后刪除)中可以來挽救系統(tǒng)。4表2.1配置單元與對應(yīng)的文件2.2五大注冊表根鍵的概述2.2.1WindowsNT注冊表五大根鍵WindowsNT的注冊表[4]只包含了五大根鍵,在注冊表編輯器的組織結(jié)構(gòu)中,去掉了HKEY_DYN_DATA根鍵,使注冊表編輯器開始顯示為五大根鍵;以后基于NT的操作系統(tǒng)Windows2000/XP/2003也都顯示為五大根鍵。(1)HKEY_LOCAL_MACHINE:用于保存本機(jī)系統(tǒng)的信息,包含硬件與操作系統(tǒng)的數(shù)據(jù),如驅(qū)動程序、系統(tǒng)配置信息等;(2)HKEY_CLASS_ROOT:用于保存與文件關(guān)聯(lián)有關(guān)的信息;(3)HKEY_CURRENT_CONFIG:保存與當(dāng)前的硬件配置文件有關(guān)的數(shù)據(jù);(4)HKEY_CURRENT_USER:保存與當(dāng)前登錄用戶有關(guān)的環(huán)境設(shè)置的數(shù)據(jù),包括桌面設(shè)置、網(wǎng)絡(luò)連接等;(5)HKEY_USERS:保存當(dāng)用戶登錄時,所有必須載入的用戶配置文件數(shù)據(jù),包括缺省的配置文件和登錄者的環(huán)境配置文件。2.2.2Windows2000注冊表的五大根鍵像WindowsNT一樣,Windows2000的注冊表編輯器去掉了HKEY_DYN_DATA根鍵,只有HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、HKEY_USERS、HKEY_CURRENT_USER五個根鍵:5(1)HKEY_LOCAL_MACHINEHKEY_LOCAL_MACHINE根鍵中保存的是用來控制系統(tǒng)和軟件的設(shè)置。由于這些設(shè)置是針對那些使用Windows系統(tǒng)的用戶而設(shè)置的,是一個公共配置信息,所以它與具體用戶無關(guān)。該根鍵包含下面五個子鍵:●HARDWARE子鍵該子鍵包含了系統(tǒng)使用的浮點(diǎn)處理器、串口等有關(guān)信息。在它下面保存了一些有關(guān)超文本終端、數(shù)字協(xié)處理器和串口等信息?!馭AM子鍵該子鍵已經(jīng)被系統(tǒng)保護(hù)起來,我們不可能看到里面的內(nèi)容。●SECURITY子鍵該子鍵位于HKEY_LOCAL_MACHINE\Security分支上,該分支只是為將來的高級功能而預(yù)留的?!馭OFTWARE子鍵該子鍵中保留的是所有已安裝的32位應(yīng)用程序的信息。各個程序的控制信息分別安裝在相應(yīng)的子鍵中。由于不同的計算機(jī)安裝的應(yīng)用程序互不相同,因此這個子鍵下面的子鍵信息會有很大的差異。●SYSTEM子鍵該子鍵保存的是啟動時所使用的信息和修復(fù)系統(tǒng)時所需的信息,其中包括各個驅(qū)動程序的描述信息和配置信息等。System子鍵下面有一個CurrentControlSet子鍵,系統(tǒng)在這個子鍵下保存了當(dāng)前的驅(qū)動程序控制集的信息。(2)HKEY_CLASSES_ROOT根鍵在Windows2000中對HKEY_CLASSES_ROOT子樹做了改進(jìn)。HKEY_CLASSE_ROOT子樹與當(dāng)前注冊使用的用戶有關(guān),它實際上是HKEY_CURRENT_USER\SOFTWARE\Classes和HKEY_LOCAL_MACHINE\SOFTWARE\Classes的交集。如果兩者的內(nèi)容有沖突,則HKEY_CURRENT_USER\SOFTWARE\Classes優(yōu)先。這個新的特性在Windows2000中叫做“單用戶類注冊”(Per-userClassRegistration)。單用戶類注冊有如下的好處:●同一臺計算機(jī)上的不同用戶可以分別定制不同的系統(tǒng)配置例如,用戶甲安裝了ACDSee圖形軟件,將BMP文件與ACDSee圖形軟件建立關(guān)聯(lián)。而用戶乙安裝了PhotoShop圖形軟件,將BMP文件與PhotoShop圖形軟件建立關(guān)聯(lián),當(dāng)用戶6乙雙擊BMP文件時,會自動調(diào)用PhotoShop圖形軟件,而不會調(diào)用用戶安裝的ACDSee圖形軟件?!裉岣吡俗员淼陌踩允褂脝斡脩纛愖?,各個用戶有自己的HKEY_CLASSES_ROOT,不再需要通過修改HKEY_LOCAL_MACHINE/SOFTWARE/CLASSES來滿足自己的需求,這樣系統(tǒng)管理員可以提高HKEY_LOCAL_MACHINE/SOFTWARE/CLASSES的權(quán)限,禁止普通用戶修改它,而各個用戶之間更是不能修改對方的HKEY_CLASSES_ROOT。●支持漫游類注冊在Windows2000中,提供了一個叫做“IntelliMirror”的功能。通過在服務(wù)器和客戶端同時使用IntelliMirror,用戶的數(shù)據(jù)、應(yīng)用程序和設(shè)置在所有的環(huán)境中都可以跟隨用戶漫游,這當(dāng)然包括了用戶的配置文件。HKEY_CLASSES_ROOT根鍵中記錄的是Windows操作系統(tǒng)中所有數(shù)據(jù)文件的信息,只要記錄不同文件的文件名后綴和與之對應(yīng)的應(yīng)用程序。在根鍵HKEY_CLASSES_ROOT中保存的信息與HKEY_LOCAL_MACHINE\SOFTWARE\Classes分支中保存的信息是一致的。(4)HKEY_USERS的根鍵HKEY_USERS根鍵中保存的是默認(rèn)用戶(.DEFAULT)、當(dāng)前登錄用戶與軟件的信息。它的下面有.DEFAULT、S-1-5-21-1229272821-436374067-1060284298-1000和S-1-5-21-1229272821-435374069-1060264298-1000_Classes三個子鍵,其中最重要是.DEFAULT子鍵。.DEFAULT子鍵的配置是針對未來將會被創(chuàng)建的新用戶的。新用戶根據(jù)默認(rèn)配置信息來生成自己的配置文件,該配置文件包括環(huán)境、屏幕、聲音等多種信息。(5)HKEY_CURRENT_USER根鍵HKEY_CURRENT_USER根鍵中保存的信息與HKEY_USERS\.DEFAULT分支中所保存的信息是相同的。任何對HKEY_CURRENT_USER根鍵中的信息的修改都會導(dǎo)致對HKEY_USERS\.Default中子鍵信息的修改,反之也是如此。72.2.3WindowXP/2003注冊表的五大根鍵我們知道,WindowsNT/2000都提供了兩個注冊表編輯器Regedit和Regedt32,二者在功能和組織體系上都有不同,在實際的注冊表編輯中也各有優(yōu)缺點(diǎn);從WindowsXP開始,開始將這兩個注冊表編輯器的功能合在了一起,所以兩者在細(xì)節(jié)方面肯定有一些不同。但在WindowsXP同樣擁有五大根鍵,且根鍵的功能含義和映射關(guān)系都和Windows2000保持了一致。在注冊表物理文件的構(gòu)成上,也是一致的。再來看看每個根鍵單獨(dú)包含的信息:(1)HKEY_CLASSES_ROOT根鍵HKEY_CLASSES_ROOT根鍵包含了啟動應(yīng)用程序所需的全部信息,其中包括:所有擴(kuò)展名以及應(yīng)用程序和文檔之間的關(guān)聯(lián)信息;所有驅(qū)動程序的名字;當(dāng)作指針的字符串,指向它們代表的實際文件;類標(biāo)識CLSID,這在訪問子鍵信息時非常有用,因為Windows中訪問子鍵的信息都是用CLSID來代替的。這里的標(biāo)識在WindowsXP系統(tǒng)中是唯一的;DDE和OLE信息。對于每個文件關(guān)聯(lián)都可以使用DDE和OLE功能;應(yīng)用程序和文檔使用的圖標(biāo)。(2)HKEY_CURRENT_USER根鍵HKEY_CURRENT_USER根鍵用于管理與當(dāng)前登錄系統(tǒng)的用戶有關(guān)的信息,其中包括:用戶的桌面以及WindowsXP對用戶呈現(xiàn)的外觀和行為;與所有網(wǎng)絡(luò)設(shè)備的連接,如打印機(jī)、共享磁盤空間等資源;桌面程序項、應(yīng)用程序參數(shù)選擇項、屏幕顏色等其他一些個人偏好,還有安全權(quán)限等。(3)HKEY_LOCAL_MACHINE根鍵HKEY_LOCAL_MACHINE根鍵保存了運(yùn)行Windows的信息,包括應(yīng)用程序、驅(qū)動程序以及硬件信息它有五個獨(dú)立的子鍵:①HARDWARE:其中保存了含有計算機(jī)硬件信息的子鍵,在啟動系統(tǒng)時,HARDWARE子鍵都被重新創(chuàng)建,這樣就很容易向系統(tǒng)中添加新硬件了。用戶對HARDWARE子鍵進(jìn)行的修改沒有任何意義也不會生效,更不用像通過其中的CPU信息實現(xiàn)超頻了。因為它是系統(tǒng)根據(jù)硬件信息在啟動時自己填寫的,而不是根據(jù)它的數(shù)據(jù)去啟動硬件。②SAM:這是一個關(guān)于安全賬號管理器的子鍵,其中存儲著用戶信息和域信息。無論是哪種注冊表,SAM中的信息都是不可訪問的,只能由系統(tǒng)管理員通過用戶管理器進(jìn)行管理。③SECURITY:這里的信息與本地安全性和用戶權(quán)限有關(guān),其中含有SAM子鍵的備份。8它也是用戶不能訪問的,只能由系統(tǒng)管理員的管理工具修改。④SOFTWARE:其中包含了已經(jīng)安裝的系統(tǒng)軟件和用戶軟件信息。⑤SYSTEM:其中含有與系統(tǒng)啟動、設(shè)備驅(qū)動程序、服務(wù)和WindowsXP配置有關(guān)的信息。(4)HKEY_USERS根鍵HKEY_USERS根鍵中包含著所有用戶配置文件的當(dāng)前活動用戶的信息。其中.DEFAULT是為那些沒有用戶配置文件的登錄用戶而設(shè)置的。HKEY_USERS中典型的用戶配置文件都包括如下一些子鍵:①AppEvents:其中的EventLabels包括與事件有關(guān)的信息,而Schemes則包括一些針對自己使用特定聲音方案的應(yīng)用程序的標(biāo)簽。②Console:包含缺省的命令提示符配置。③ControlPanel:包含控制面板上的小信息。④Environment:包含用戶環(huán)境信息。⑤KeyboardLayout:包含鍵盤配置信息。⑥Printers:包含與計算機(jī)相連的每一臺遠(yuǎn)程打印機(jī)的映射信息。⑦Software:包含系統(tǒng)中已安裝的軟件信息。⑧UNICODEProgramGroups:包含的是關(guān)于那些使用UNICODE的程序信息。(5)HKEY_CURRENT_CONFIG根鍵HKEY_CURRENT_CONFIG根鍵是HKEY_LOCAL_MACHINE中的內(nèi)容映射。如果系統(tǒng)中只有一個硬件配置,則其中的數(shù)據(jù)是和HKEY_LOCAL_MACHINE中一樣的。若系統(tǒng)中新建了一個硬件配置“(控制面板→系統(tǒng)→硬件配置文件)”,就會在HKEY_LOCAL_MACHINE中反映出來,在啟動時會選擇一種配置文件映射到HKEY_CURRENT_CONFIG中。2.3Windows2000/XP/2003注冊表的五大根鍵解析2.3.1HKEY_CLASSES_ROOT根鍵(1)擴(kuò)展名與應(yīng)用程序的對應(yīng)關(guān)系Windows所支持的文件類型在HKEY_CLASSES_ROOT根鍵下定義。下表中列出了HKEY_CLASSES_ROOT根鍵中的文件擴(kuò)展名和文件類型之間關(guān)系,如表2.2所示。9表2.2HKEY_CLASSES_ROOT和文件類型之間的關(guān)系(2)特殊擴(kuò)展名與應(yīng)用程序的對應(yīng)關(guān)系我們在注冊表編輯器中可以發(fā)現(xiàn),HKEY_CLASSES_ROOT根鍵下的文件擴(kuò)展名前面有“+”符號,而且在此文件擴(kuò)展名中沒有對應(yīng)的應(yīng)用程序。為了查明這些文件后綴與應(yīng)用程序之間的關(guān)系,我們必須單擊“+”一次或者幾次,才可以看到它們的關(guān)系。2.3.2HKEY_CURRENT_USER根鍵HKEY_CURRENT_USER根鍵中保存的信息(當(dāng)前用戶的子鍵信息)與HKEY_USERS\.Default分支中所保存的信息基本是相同的。任何對HKEY_CURRENT_USER根鍵中的信息的修改都會導(dǎo)致對HKEY_USER\.Default中子鍵信息的修改,反之也是如此。2.3.3HKEY_USERS根鍵(1)AppEvents子鍵10HKEY_USER根鍵中保存的默認(rèn)用戶,當(dāng)前登錄用戶與軟件的信息。HKEY_USERS\.DEFAULT\Software與HKEY_LOCAL_MACHINE\Software中保存的軟件信息相同。HKEY_CURRENT_USER\.DEFAULT下面有八個子鍵。其中除RemoteAccess子鍵外,下面是其中幾個系統(tǒng)預(yù)定義的子鍵。AppEvents:登錄已注冊的各種應(yīng)用事件。ControlPanel:與控制面板設(shè)置有關(guān)的內(nèi)容。KeyboardLayout:鍵盤設(shè)置信息。Software:軟件設(shè)置信息。.DEFAULT子鍵的配置是針對未來將會被創(chuàng)建的新?lián)碜o(hù)的。新用戶根據(jù)默認(rèn)用戶的配置信息來生成自己的配置文件,該配置文件包括環(huán)境、屏幕、聲音等多種信息。(2)ControlPanel子鍵ControlPanel子鍵位于HKEY_USEERS\.DEFAULT\ControlPanel分支上,它所包含的內(nèi)容與桌面、光標(biāo)、鍵盤、和鼠標(biāo)等設(shè)備有關(guān),改變它們的鍵值就將改變對應(yīng)的工作環(huán)境或參數(shù),如圖2.1所示的就是ControlPanel的子鍵結(jié)構(gòu)。在圖2.1中,我們可以看到,ControlPanel子鍵下面又有十幾個子鍵,根據(jù)系統(tǒng)配置和設(shè)置情況的不同,子鍵的數(shù)目也會不同。雖然ControlPanel子鍵中的鍵值與環(huán)境和特性有直接關(guān)系,但有很多參數(shù)的改變并不要求用戶通過修改注冊表來實現(xiàn),而只需通過“控制面板”即可進(jìn)行修改。也有一些環(huán)境特性的改變只能通過修改注冊表來實現(xiàn)。11圖2.1ControlPanel子鍵結(jié)構(gòu)●ControlPanel\Accessibility子鍵Accessibility子鍵包含了十個子鍵,多數(shù)子鍵在“控制面板”窗口的“輔助選項”圖標(biāo)中都有對應(yīng)的選項。這些子鍵的鍵值名中一般都有一個“On”。當(dāng)其鍵值為0時,表示此設(shè)置無效;而當(dāng)其鍵值為1時,則表示此設(shè)置生效?!馛ontrolPanel\Appearance子鍵該子鍵下的鍵值中列出了可供選擇的各種顏色和圖案。你可以在“控制面板”的“顯示屬性”對話框的“外觀”選項下的“方案”下拉菜單中,看到這些顏色和圖案的中文名稱。在Appearance子鍵下還有一個Scheme子鍵,用于設(shè)置配色方案的,這些圖案使用十六進(jìn)制數(shù)值表示出來。●ControlPanel\Colors子鍵該子鍵用于設(shè)置桌面上各種項目顏色??梢栽凇翱刂泼姘濉钡摹帮@示屬性”對話框中的“外觀”選項下的“顏色”框內(nèi),看到這些項目所設(shè)置的顏色?!馛ontrolPanel\desktop子鍵該子鍵的鍵值列出了桌面和窗口的各種部件,如窗口邊界、標(biāo)題、圖標(biāo)、菜單、滾動條、消息框的長度、寬度和字體等數(shù)據(jù)。這些數(shù)據(jù)可以在“控制面板”的“顯示屬性”對話框中12進(jìn)行修改。●ControlPanel\InputMethod子鍵該子鍵的鍵值中記錄了輸入法切換熱鍵的有關(guān)數(shù)據(jù)。這些數(shù)據(jù)你可以在“控制面板→輸入法”對話框中的“熱鍵”選項下進(jìn)行修改?!馛ontrolPanel\International子鍵該子鍵的鍵值中登錄了表示時間的“上午”和“下午”的數(shù)據(jù)。這些數(shù)據(jù)可以在“控制面板”中打開“區(qū)域設(shè)置”對話框中的“時間”選項下進(jìn)行修改?!馛ontrolPanel\Keyboard子鍵該子鍵的鍵值登錄了擊鍵時的重復(fù)延時和重復(fù)速率。這些數(shù)據(jù)可以在“控制面板”中打開“鍵盤”對話框中的“速度”選項下進(jìn)行修改?!馛ontrolPanel\Mouse子鍵該子鍵的鍵值中登錄了鼠標(biāo)的雙擊速度和指針的移動速度。這些數(shù)據(jù)可以在“控制面板”中打開“鼠標(biāo)”對話框中的“按鈕”和“移動”選項下修改?!馛ontrolPanel\PowerCfg子鍵該子鍵用于設(shè)置電源管理的有關(guān)數(shù)據(jù)。這些數(shù)據(jù)可以在“控制面板”中打開“電源管理”對話框中的“電源方案”選項進(jìn)行修改。(3)KeyboardLayout子鍵該子鍵位于HKEY_USERS\.DEFAULT\keyboardlayout分支上,用于設(shè)置鍵盤的布局,如鍵盤語言的加載順序等,如下圖2.2所示:該子鍵下面提供了如下三個子鍵:●Preload子鍵該子鍵位于HKEY_USERS\.DEFAULT\keyboardlayout\preload分支上,用于設(shè)置鍵盤語言的加載順序。Preload子鍵下面的子鍵個數(shù)與你在系統(tǒng)中所安裝的鍵盤語言有關(guān)。●Substitutes子鍵該子鍵位于HKEY_USERS\.DEFAULT\keyboardlayout\substitutes分支,用于設(shè)置可替換的鍵盤語言布局。在通常情況下,此子鍵的設(shè)置是空的。13圖2.2KeyboardLayout子鍵●Toggle子鍵該子鍵位于HKEY_USERS\.DEFAULT\keyboardlayout\toggle分支上用于選擇鍵盤語言。(4)Software子鍵Software該子鍵對于不同的計算機(jī)其鍵值數(shù)據(jù)是不同的。此子鍵其實是HKEY_LOCAL_MACHINE\Software分支的一部分,由于Windows中文版內(nèi)嵌了許多Microsoft公司開發(fā)的應(yīng)用程序,因此,該子鍵在注冊表中就顯得十分重要。通過修改該子鍵下的子鍵,就可以實現(xiàn)Windows的某些重要功能。●Software\Microsoft子鍵該子鍵用于設(shè)置Microsoft公司開發(fā)的應(yīng)用程序鍵值數(shù)據(jù)?!馦icrosoft\InternetAccountManager子鍵在個人用戶計算機(jī)上,該子鍵位于HKEYY_CURRENT_USER\Software\Micro-soft\InternetAccountManager分支上,而不存在于HKEY_USERS相應(yīng)的位置Internet賬號管理器(InternetAccountManager)。142.3.4HKEY_LOCAL_MACHINE根鍵HKEY_LOCAL_MACHINE根鍵中存放的是用來控制系統(tǒng)和軟件的設(shè)置。它是一個公共配置信息,只須做了解就可以了。HKEY_LOCAL_MACHINE包括了五個子鍵,如圖2.3所示。圖2.3HKEY_LOCAL_MACHINE根鍵HARDWARE子鍵:該子鍵下面存放一些有關(guān)超文本終端、數(shù)學(xué)協(xié)處理器和串口等信息。HARDWARE子鍵下面包括了兩個子鍵DEVICEMAP(用于存放設(shè)備映象)、DESCRIPTION(存放有關(guān)系統(tǒng)信息)。DEVICEMAP子鍵的層次結(jié)構(gòu)如下:HKEY_LOCAL_MACHINE\HARDWAREHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAPHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM在HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM分支下面包括如下設(shè)置內(nèi)容:COM1=COM1:指定COM1端口。COM2=COM2:指定COM2端口。DESCRIPTION子鍵的層次結(jié)構(gòu)如下:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAPHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\System15HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\System\FloatingPointProcessorHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\System\FloatingPointProcessor\0SAM子鍵:系統(tǒng)自動將其保護(hù)起來。SECURITY子鍵:包含了安全設(shè)置的信息,同樣也讓系統(tǒng)保護(hù)起來。SOFTWARE子鍵:包含了系統(tǒng)軟件,當(dāng)前安裝的應(yīng)用軟件及用戶的有關(guān)信息。SYSTEM子鍵:該子鍵存放的是啟動時所使用的信息和修復(fù)系統(tǒng)說所需的信息,其中包括各個驅(qū)動程序的描述信息和配置信息等。System子鍵下面只有一個CurrentControlSet子鍵,系統(tǒng)在這個子鍵下保存了當(dāng)前的驅(qū)動程序控制集的信息。這里介紹的是CurrentControlSet子鍵下面的Control和Services子鍵。(1)Control子鍵這個子鍵中保存的是由控制面板中各個圖標(biāo)程序設(shè)置的信息。由于控制面板中的各個圖標(biāo)程序可能會把信息寫在不同的子鍵下,所以用戶最好不要通過注冊表編輯器來修改這些信息,否則容易引起系統(tǒng)死機(jī)。●Control\Fontassoc子鍵該子鍵存放的是有關(guān)字體設(shè)置信息(如卻省字體、替代字體以及字體集等)。在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Fontassoc分支下還有Associated、DefaultFonts、AssociatedCharSet兩個子鍵。●Control\Nls子鍵該子鍵在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls分支中,它是用來設(shè)置Windows的語言特性,如代碼頁、EUDC內(nèi)碼范圍、語言分類等。●Control\MediaProperties子鍵該子鍵用于設(shè)置多媒體屬性?!馛ontrol\FileSystem子鍵該子鍵主要對Windows的NTFS及Windows3.1、Windows9x文件系統(tǒng)進(jìn)行設(shè)置?!馛ontrol\KeyboardLayouts子鍵該子鍵主要對Windows的鍵盤布局或者鍵盤語言進(jìn)行設(shè)置。該子鍵下面包括多個關(guān)于鍵盤語言的子鍵,這些子鍵使用數(shù)值表示出來。16●Control\Update子鍵該子鍵用于確定“控制面板”窗口是否被刷新,此子鍵的功能與“控制面板”窗口中的“查看”菜單中的“刷新”相同?!馛ontrol\TimeZoneInformation子鍵該子鍵用于設(shè)置時區(qū)信息?!馛ontrol\Print子鍵該子鍵用于設(shè)置打印機(jī)?!馛ontrol\IDConfigDB子鍵該子鍵用于顯示硬件配置文件的配置數(shù)據(jù)、配置名稱等其他信息?!馛ontrol\ComputerName子鍵該子鍵下面具有如下分層結(jié)構(gòu):HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ActiveComputerNameHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName該子鍵用于設(shè)置計算機(jī)名稱。(2)Services子鍵該子鍵位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Service分支上。該子鍵中存放了Windows中各項服務(wù)的信息,有些是自帶的,有些是隨后安裝的。在該子鍵下面的每個子鍵存放相應(yīng)服務(wù)的配置和描述信息?!馭ervices\Class子鍵該子鍵中保存的是Windows支持的不同種類硬件的信息,它下面的子鍵與“控制面板”中添加新硬件的分類類似。●Services\VxD子鍵該子鍵位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD分支上。該子鍵保存了Windows中所有虛擬設(shè)備驅(qū)動的信息。由于Windows系統(tǒng)能夠自動管理這些信息,因此,在通常情況下最好不要通過注冊表編輯器來修改這些信息;但了解此子鍵下的信息是有好處的,因為有一些功能(日撥號網(wǎng)絡(luò)提速)必須修改此子鍵下的信息?!馭ervices\RemoteAccess子鍵該子鍵位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\RemoteAccess17分支上,存放的是和Windows撥號網(wǎng)絡(luò)有關(guān)的信息?!馭ervices\WinSock2子鍵該子鍵位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\WinSock2分支上,用于存放與Internet連接時WinSock2.0版本的有關(guān)信息。2.3.5HKEY_CURRENT_CONFIG根鍵如果在Windows中設(shè)置了兩套或者兩套以上的硬件配置文件(HardwareConfigurationfile),則在系統(tǒng)啟動時將會讓用戶選擇使用哪套配置文件。而HKEY_CURRENT_CONFIG根鍵中存放的正是當(dāng)前配置文件的所有信息,如圖2.4所示。在Windows系統(tǒng)啟動以后,任何對配置文件的修改都會同時影響到HKEY_LOCAL_MACHINE\Config分支、HKEY_LOCAL_MACHINE\Enum分支和HKEY_CURRENT_CONFIG中的相應(yīng)內(nèi)容。圖2.4HKEY_CURRENT_CONFIG根鍵18第三章系統(tǒng)設(shè)計3.1技術(shù)方案設(shè)計使用VisualC++6.0作為開發(fā)工具[5][6][7],因為其作為Microsoft的重要開發(fā)工具,強(qiáng)大的開發(fā)功能勿庸置疑的,所以它也一直被程序員大為推崇。特別是MFC的功能日漸強(qiáng)大,使程序的開發(fā)速度、效率大大提高。由于該程序主要是通過對注冊表的查詢、修改、和創(chuàng)建等一些操作,來完成對系統(tǒng)設(shè)置的改變。因此使用VC能非常方便的完成這些操作。在VC中可通過MFC訪問注冊表,也可以通過API函數(shù)操作注冊表[8]。本程序主要使用的API函數(shù)來完成對注冊表的操作。這是因為MFC提供的訪問注冊表的函數(shù)[9],雖然操作起來很方便,但功能有限。軟件系統(tǒng)整體主要分為攔截處理模塊和界面模塊。攔截模塊主要由截獲和自定義函數(shù)組成。系統(tǒng)結(jié)構(gòu)如圖3.1所示。圖3.1系統(tǒng)結(jié)構(gòu)在Windows中,系統(tǒng)調(diào)用有多套。最重要的是兩套系統(tǒng)調(diào)用分別是內(nèi)核例程(提供給驅(qū)動程序)[10]、Win32API(提供給Win32應(yīng)用程序)[11]。本軟件主要采用的是Win32API的19系統(tǒng)調(diào)用。3.2攔截模塊3.2.1截獲部分本軟件主要采用的是Win32API的系統(tǒng)調(diào)用,即在用戶層進(jìn)行攔截[12];所以不需要驅(qū)動程序,用微軟開發(fā)的Detours函數(shù)庫就可以達(dá)到截獲功能。Detours定義了三個概念:(1)Target函數(shù):要攔截的函數(shù),通常為Windows的API。(2)Trampoline函數(shù):Target函數(shù)的復(fù)制品。因為Detours將會改寫Target函數(shù),所以先把Target函數(shù)復(fù)制保存好,一方面仍然保存Target函數(shù)的過程調(diào)用語義,另一方面便于以后的恢復(fù)。(3)Detours函數(shù):用來替代Target函數(shù)的函數(shù)。Detours在Target函數(shù)的開頭加入JMPAddress_of_Detour_Function指令(共5個字節(jié))把對Target函數(shù)的調(diào)用引導(dǎo)到自己的Detour函數(shù)[13],把Target函數(shù)的開頭的5個字節(jié)加上JMPAddress_of_Target_Function+5作為Trampoline函數(shù)。Detours庫可以攔截任意的API調(diào)用,攔截代碼是在動態(tài)運(yùn)行時加載的[14]。Detours替換目標(biāo)API最前面的幾條指令,使其無條件的跳轉(zhuǎn)到用戶提供的攔截函數(shù)。被替換的API函數(shù)的前幾條指令被保存到Trampoline函數(shù)(就是內(nèi)存中一個數(shù)據(jù)結(jié)構(gòu))中。Trampoline保存了被替換的目標(biāo)API的前幾條指令和一個無條件轉(zhuǎn)移,轉(zhuǎn)移到目標(biāo)API余下的指令。3.2.2自定義函數(shù)模塊在注冊表的訪問操作被攔截后,Detours[15][16]替換目標(biāo)API最前面的幾條指令,使其無條件的跳轉(zhuǎn)到軟件系統(tǒng)的自定義函數(shù)。操作流程:先將需要操作的子鍵打開。一般用RegOpenKeyEx()來完成;若該子鍵不存在,則需要用RegCreateKey()或者RegCreateKeyEx(),這兩個函數(shù)的作用是用于創(chuàng)建指定鍵,若該鍵已存在就打開它。調(diào)用RegQueryValueEx()函數(shù)來獲取一個指定值名稱的類型和數(shù)據(jù),該指定值名稱與一個打開的鍵相聯(lián)系。調(diào)用RegSetValueEx()用于在一個鍵下設(shè)置一個指定值的數(shù)據(jù)和類型。203.3界面模塊目前界面編程技術(shù)包括MFC、n32SDK、CJLibrary、WTL以及一些界面開發(fā)包。本軟件程序采用的是MFC界面編程技術(shù)。21第四章系統(tǒng)實現(xiàn)4.1系統(tǒng)基本配置該系統(tǒng)只能針對特定的注冊表鍵值進(jìn)行監(jiān)控,在運(yùn)行前須選擇要監(jiān)控的注冊表項,具體操作如圖4.1所示:圖4.1指定被監(jiān)視鍵值在【阻止指定鍵值被修改】選項中,用戶可以根據(jù)需求選擇要被監(jiān)視的鍵值。4.2系統(tǒng)關(guān)鍵代碼4.2.1截獲部分以下代碼主要完成對注冊表鍵值的添加、修改和刪除操作的攔截功能。Detours庫可以攔截任意的API調(diào)用,攔截代碼是在動態(tài)運(yùn)行時加載的。Detours替換目標(biāo)API最前面的幾條指令,使其無條件的跳轉(zhuǎn)到用戶提供的攔截函數(shù)[17]。22LongIntercept(){DetourTransactionBegin();DetourUpdateThread(GetCurrentThread());}ATTACH(&(PVOID&)Real_RegCreateKeyExA,Mine_RegCreateKeyExA);ATTACH(&(PVOID&)Real_RegCreateKeyExW,Mine_RegCreateKeyExW);ATTACH(&(PVOID&)Real_RegSetValueExA,Mine_RegSetValueExA);ATTACH(&(PVOID&)Real_RegSetValueExW,Mine_RegSetValueExW);ATTACH(&(PVOID&)Real_RegDeleteKeyA,Mine_RegDeleteKeyA);ATTACH(&(PVOID&)Real_RegDeleteKeyW,Mine_RegDeleteKeyW);ATTACH(&(PVOID&)Real_RegDeleteValueA,Mine_RegDeleteValueA);ATTACH(&(PVOID&)Real_RegDeleteValueW,Mine_RegDeleteValueW);ATTACH(&(PVOID&)Real_RegQueryValueExA,Mine_RegQueryValueExA);ATTACH(&(PVOID&)Real_RegQueryValueExW,Mine_RegQueryValueExW);ATTACH(&(PVOID&)Real_PostQuitMessage,Mine_PostQuitMessage);returnDetourTransactionCommit();longUnIntercept(){DetourTransactionBegin();DetourUpdateThread(GetCurrentThread());DETACH(&(PVOID&)Real_RegCreateKeyExA,Mine_RegCreateKeyExA);DETACH(&(PVOID&)Real_RegCreateKeyExW,Mine_RegCreateKeyExW);DETACH(&(PVOID&)Real_RegSetValueExA,Mine_RegSetValueExA);DETACH(&(PVOID&)Real_RegSetValueExW,Mine_RegSetValueExW);23DETACH(&(PVOID&)Real_RegDeleteKeyA,Mine_RegDeleteKeyA);DETACH(&(PVOID&)Real_RegDeleteKeyW,Mine_RegDeleteKeyW);DETACH(&(PVOID&)Real_RegDeleteValueA,Mine_RegDeleteValueA);DETACH(&(PVOID&)Real_RegDeleteValueW,Mine_RegDeleteValueW);DETACH(&(PVOID&)Real_RegQueryValueExA,Mine_RegQueryValueExA);DETACH(&(PVOID&)Real_RegQueryValueExW,Mine_RegQueryValueExW);DETACH(&(PVOID&)Real_PostQuitMessage,Mine_PostQuitMessage);}returnDetourTransactionCommit();4.2.2設(shè)置全局鉤子設(shè)置全局鉤子進(jìn)行截獲應(yīng)用程序的函數(shù)調(diào)用,通過APIHook,改變一個系統(tǒng)API的原有功能。基本的方法就是通過hook“接觸”到需要修改的。API函數(shù)入口點(diǎn),改變它的地址指向新的自定義的函數(shù)。比如RegOpen這個函數(shù)[18][19],前面detour那段攔截代碼處理以后,被截獲的程序如果再調(diào)用RegOpen,則調(diào)用的是已經(jīng)替換以后的函數(shù)[20]。LRESULTCALLBACKMyShellProc(intnCode,WPARAMwParam,LPARAMlParam){test++;if(test>255){}printf("Hookinthebeginning");if(bTryed==false){bTryed=true;Intercept();24test=1;}}printf("Hookcomplete");bIntercepted=true;return::CallNextHookEx(hhook,nCode,wParam,lParam);extern"C"__declspec(dllexport)BOOLInstallHook(HWNDhandle){0);}4.2.3自定義函數(shù)截獲以后替換原來函數(shù)的自定義函數(shù)[20],在對注冊表的操作被截獲后,根據(jù)用戶的需要所執(zhí)行的操作。LONGWINAPIMine_RegDeleteValueA({stringkey=getFilterStringA(hKey,lpValueName);if(filterQueryA(key))25printf("HookinthebeginningofinstallHook");hhook=::SetWindowsHookEx(WH_SHELL,MyShellProc,GetModuleHandle("hook.dll"),hWnd=handle;RegMonPID=GetCurrentProcessId();returnhhook>0;HKEYhKey,LPCSTRlpValueName)LONGnRet;boolask=false;{}ask=true;__try{if(!ask)nRet=Real_RegDeleteValueA(hKey,lpValueName);if(!HOOK_RegDeleteValue)returnnRet;if(GetCurrentProcessId()==ExplorerPID)returnnRet;if(GetCurrentProcessId()==RegMonPID)returnnRet;if((PID==0)||((GetCurrentProcessId()==PID)&&(PID>0))){if(lpValueName==NULL)returnnRet;COPYDATASTRUCTdata;PARAMSparams={0};params.PID=GetCurrentProcessId();params.hKey=hKey;memcpy(params.buffer1,lpValueName,strlen(lpValueName));data.cbData=sizeof(PARAMS);data.lpData=¶ms;data.dwData=TYPE_RegDeleteValueA;//memcpy(params.buffer1,key.c_str(),strlen(key.c_str()));if(ask){stringmsg;26msg="截獲注冊表刪除鍵值操作,要刪除的注冊表鍵為";msg+=key;msg+="\n";msg+="要阻止該操作嗎";if(::MessageBox(NULL,msg.c_str(),"截獲通知",MB_YESNO)==IDYES){}else{}SendMessage(hWnd,WM_COPYDATA,(WPARAM)hWnd,params.reject=false;nRet=Real_RegDeleteValueA(hKey,lpValueName);params.reject=true;(LPARAM)&data);//SendMessage(hWnd,WM_NOTIFY_USER,(WPARAM)hWnd,()lpValueName);}}}__finally{};returnnRet;}27第五章系統(tǒng)測試通過應(yīng)用程序PPLiveva_setup_ikan.exe對程序進(jìn)行測試的結(jié)果表明,該程序達(dá)到主動攔截注冊表訪問并提示給用戶的功能。該測試主要是針對注冊表進(jìn)行插入鍵值和刪除鍵值的操作。以下為測試過程圖:1.在【阻止指定鍵值被修改】選項中選擇要監(jiān)視的注冊表鍵值(主要是關(guān)聯(lián)系統(tǒng)啟動項的鍵值,也是最容易受惡意軟件更改的鍵值)如圖5.1所示:HYPERLINK"/retype/zoom/d9ed13f8941ea76e58fa0411?pn=32&x=0&y=1276&raww=779&rawh=431&o=png_6_0_0_117_470_722_399_893.25_1263.375&type=pic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高速公路施工安全生產(chǎn)培訓(xùn)考核標(biāo)準(zhǔn)
- 半導(dǎo)體器件行業(yè)市場發(fā)展現(xiàn)狀及趨勢與投資分析研究報告
- 2024-2025學(xué)年高中物理第五章5向心加速度練習(xí)含解析新人教版必修2
- 2024-2025學(xué)年高中歷史課時分層作業(yè)181861年俄國農(nóng)奴制改革含解析北師大版選修1
- 2024-2025學(xué)年新教材高中語文第六單元第12課拿來主義課后課時作業(yè)含解析新人教版必修上冊
- 2024-2025學(xué)年高中歷史第一單元古代歷史上的改革上第2課日本仿效唐制的變革導(dǎo)學(xué)案岳麓版選修1
- 2024-2025學(xué)年高中地理第2章自然地理環(huán)境中的物質(zhì)運(yùn)動和能量交換第1節(jié)大氣的熱狀況與大氣運(yùn)動第2課時熱力環(huán)流與大氣的水平運(yùn)動-風(fēng)學(xué)案中圖版必修1
- 2024-2025學(xué)年高中歷史第四單元工業(yè)文明沖擊下的改革第12課俄國農(nóng)奴制改革課后演練含解析岳麓版選修1
- 2024-2025學(xué)年高中物理第二章2描述交流電的物理量練習(xí)含解析教科版選修3-2
- 2025年不銹鋼托盤搬運(yùn)項目投資可行性研究分析報告
- Unit5 What day is it today?(教學(xué)設(shè)計)-2023-2024學(xué)年教科版(廣州)英語四年級下冊
- 法院生活費(fèi)申請書
- 2025年益陽醫(yī)學(xué)高等??茖W(xué)校高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 醫(yī)用氣體施工方案
- 2024 年陜西公務(wù)員考試行測試題(B 類)
- 【課件】學(xué)校后勤管理工作
- 2025-2030年中國聚丙烯酰胺(PAM)市場發(fā)展?fàn)顩r及未來投資戰(zhàn)略決策報告新版
- 幼兒園師德師風(fēng)培訓(xùn)內(nèi)容
- 課題申報書:產(chǎn)教融合背景下護(hù)理專業(yè)技能人才“崗課賽證”融通路徑研究
- 住宅小區(qū)消防設(shè)施檢查方案
- 人教版小學(xué)數(shù)學(xué)一年級下冊教案
評論
0/150
提交評論