專利名稱::一種軟件自我保護的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及軟件安全,尤其涉及一種全方位的軟件自我保護的方法。
背景技術(shù):
:計算機及網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展極大地促進了信息交互。但是,與此同時,計算機病毒也伴隨技術(shù)的發(fā)展而不斷地演化更新,時至今日,計算機病毒已經(jīng)嚴(yán)重威脅到了人們對計算機的正常使用。由此,如何防范病毒侵襲已然成為人們關(guān)注的一個焦點。隨著反病毒技術(shù)的發(fā)展,病毒的手段也在不斷變化,二者之間的對抗也愈演愈烈。病毒對抗安全軟件的手法也從變形、隱藏而轉(zhuǎn)變?yōu)楦苯拥钠茐模噲D通過破壞安全軟件的部分或全部功能來達(dá)到對抗的目的。目前的各類安全軟件在自我保護方面,通常的保護手段是通過文件監(jiān)控防止病毒對文件的刪除、修改等操作,這種單一的保護措施難以防護不斷升級的惡意程序?qū)τ诎踩浖钠茐摹K?,針對病毒發(fā)展的這種趨勢,迫切需要一種軟件自我保護的方法來保護安全軟件自身不受破壞,從而更有效地發(fā)現(xiàn)和清除惡意程序。
發(fā)明內(nèi)容總結(jié)上述問題,我們可以看到,就軟件自我保護而言,全面地選擇可能被各種病毒侵襲的對象來進行防護是至關(guān)重要的,從而在各個方面全方位地保護安全軟件自身不受病毒的破壞。因此,本發(fā)明提供了一種全方位的軟件自我防護方法,包括建立多個鉤子來監(jiān)控多個可用于攻擊受保護軟件的操作請求;當(dāng)所述多個鉤子中的至少之一攔截到相關(guān)聯(lián)的操作請求時,判斷所攔截到的操作請求是否與受保護軟件有關(guān)如果有關(guān),則拒絕所攔截到的操作請求,如果無關(guān),則允許所攔截到的操作請求;其中,所述多個可用于攻擊受保護軟件的操作請求包括可用于篡改文件的操作請求;可用于修改內(nèi)存、讀取內(nèi)存、鎖定內(nèi)存、修改內(nèi)存屬性的操作請求;可用于操作進程的操作請求;可用于結(jié)束、掛起線程的操作請求;可用于注入代碼的操作請求;可用于注入動態(tài)庫的操作請求;可用于模擬消息的操作請求。進一步的,對于Windows操作系統(tǒng),上述全方位的軟件自我防護方法還需要監(jiān)控以下操作請求可用于篡改注冊表鍵值的操作請求;可用于排隊APC(異步過程調(diào)用)的操作請求。進一步而言,對于要攔截的用于各種操作請求的API集合的選擇是至關(guān)重要的,關(guān)系到安全軟件本身是否能夠防護各種病毒通過各種途徑的侵襲。本發(fā)明的一個實施例中提供的受監(jiān)控API集合包括文件系統(tǒng)的I/O處理函數(shù)IRP_MJ_CREATE、IRP_MJ—WRITE、IRP—MJ—SET—INFORMATION;用于篡改注冊表鍵值的API:Zw/NtRenameKey、Zw/NtRestoreKey、Zw/NtSetValueKey、Zw/NtDeleteKey、Zw/NtDeleteValueKey;用于寫虛擬內(nèi)存、用于讀虛擬內(nèi)存、用于鎖定虛擬內(nèi)存、用于修改虛擬內(nèi)存屬性的API:Zw/NtWriteVirtualMemory、Zw/NtReadVirtualMemory、Zw/NtLockVirtualMemory、Zw/NtProtectVirtualMemory;用于進禾呈操作的API:Zw/NtSetlnformationProcess、Zw/NtTerminateProcess、Zw/NtDebugActiveProcess、Zw/NtRequestWaitReplyPort;用于結(jié)束、掛起線程的API:Zw/NtSuspendThread、ZWNtTerminateThread;用于注入代碼的API:Zw/NtWriteVirtualMemory、Zw/NtCreateThread、Zw/NtSetThreadContext、Zw/NtQueueApcThread;用于調(diào)用消息鉤子的API:KeUserModeCal舊ack;用于消息操作的API:SendMessage、Sendlnput。'通過結(jié)合附圖的詳細(xì)說明,本發(fā)明的特征和優(yōu)點將更加清楚,其中圖1示例性示出了通過監(jiān)控可應(yīng)用于受保護軟件的操作請求對軟件進行保護的流程圖。具體實施例方式下面結(jié)合圖1說明按照本發(fā)明的全方位軟件自我防護策略來實現(xiàn)軟件防護的一個具體實施例。圖1示例性示出了通過監(jiān)控可應(yīng)用于受保護軟件的操作請求對軟件進行保護的流程圖。在步驟S1中,創(chuàng)建掛鉤到某個操作請求的鉤子處理例程,用于攔截相關(guān)聯(lián)的操作請求。該操作請求例如可以通過調(diào)用API來實現(xiàn),從而,相應(yīng)的鉤子處理例程通過掛鉤這個API進行監(jiān)控。對于本發(fā)明中需要監(jiān)控的操作請求的集合,可以針對每個操作請求創(chuàng)建相關(guān)聯(lián)的鉤子處理例程進行監(jiān)控。在步驟S2中,當(dāng)攔截到該操作請求時,例如鉤子處理例程攔截到與之關(guān)聯(lián)的API被調(diào)用時,在處理該操作請求之前,首先跳轉(zhuǎn)到相關(guān)聯(lián)的鉤子處理例程,執(zhí)行鉤子處理例程中的步驟。在步驟S3中,鉤子處理例程判斷所攔截到的該操作請求是否針對受保護的軟件,如果是,則在步驟S4阻止該操作請求,如果否,則在步驟S5允許該操作請求。圖l所示的過程并不是唯一的,比如,在允許或拒絕該操作請求之前詢問用戶,或者在允許或拒絕該API之后向用戶顯示、進行記錄等。本領(lǐng)域技術(shù)人員明了的是,在軟件保護領(lǐng)域,對于受保護軟件而言,針對各種惡意程序的保護策略以及有針對性選擇的受監(jiān)控API集合是決定軟件自我保護是否有效的關(guān)鍵。下面描述按照本發(fā)明的全方位軟件自我防護策略來選擇受監(jiān)控API集合從而實現(xiàn)軟件防護的一個具體實施例。1)關(guān)于文件操作本發(fā)明的保護策略的一個方面是針對文件的保護。修改或刪除安全軟件的文件是很常見的惡意程序破壞手段,現(xiàn)有的軟件自我保護方法通常是針對這種破壞手段,通過對文件進行監(jiān)控來實現(xiàn)自我保護。在本發(fā)明的保護策略中,可以通過攔截文件系統(tǒng)驅(qū)動的以下I/O請求包(IRP)處理函數(shù)來防護惡意程序?qū)τ谑鼙Wo文件的各種操作a)IRP—MJ—CREATE:創(chuàng)建、打開文件請求b)IRP_MJ—WRITE:寫文件請求c)IRP—MJ—SETJNFORMATION:設(shè)置文件信息請求,比如刪除、移動文件等操作會發(fā)起該請求。通過對上述I/O處理函數(shù)的監(jiān)控,可以有效地防止針對受保護軟件的文件刪除、修改等操作。2)關(guān)于注冊表操作本發(fā)明的保護策略的另一個方面是針對注冊表的保護。在Windows操作系統(tǒng)中,很多軟件需要依賴注冊表中的某些鍵值,如果這些鍵值被修改或刪除,這些軟件便會發(fā)生錯誤。所以有可能通過改寫或刪除這些鍵值來破壞某些安全軟件的功能。另外,操作系統(tǒng)還有很多注冊表鍵值會影響一個程序的執(zhí)行,也有可能通過修改這些鍵值來使安全軟件的部分功能失效。因此,應(yīng)該防止惡意程序針對安全軟件的注冊表操作,在本實施例中,通過攔截用于操作注冊表、從而有可能被用來攻擊注冊表的API來保護安全軟件。這里針對注冊表的保護設(shè)計出包含以下API集合的攔截策略,通過攔截該集合中的API來實現(xiàn)對注冊表鍵值的全面保護,防止注冊表鍵值被篡改a)Zw/NtRenameKey:重命名一個鍵b)Zw/NtRestoreKey:恢復(fù)一個已保存到文件中的鍵c)Zw/NtSetValueKey:設(shè)置鍵值d)Zw/NtDeleteKey:刪除鍵e)Zw/NtDeleteValueKey:刪除鍵值結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于操作注冊表的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的任意上述API是否與受保護軟件有關(guān),阻止可以對受保護軟件的注冊表進行破壞的操作請求。,這里應(yīng)該注意的是,在現(xiàn)有的操作系統(tǒng)中,只有Windows操作系統(tǒng)具有注冊表。因此,就本領(lǐng)域現(xiàn)狀而言,對于注冊表的保護只是針對Windows操作系統(tǒng)而言的,對于其他操作系統(tǒng)則不需要考慮這個方面。然而,未來可能出現(xiàn)的操作系統(tǒng)中如果具備類似于Windows操作系統(tǒng)中的注冊表,則針對這種操作系統(tǒng)的注冊表保護策略也在本發(fā)明的范圍之內(nèi)。3)關(guān)于內(nèi)存操作本發(fā)明的保護策略的另一個方面是針對內(nèi)存的保護。通過鎖定、修改、讀取內(nèi)存、修改內(nèi)存屬性等操作,有可能直接攻擊安全軟件。鎖定一般用來在內(nèi)核態(tài)安全地讀寫用戶態(tài)內(nèi)存,當(dāng)惡意驅(qū)動程序需要讀寫用戶態(tài)內(nèi)存時會先鎖定這些內(nèi)存頁。另外,通過修改安全軟件的內(nèi)存數(shù)據(jù)、內(nèi)存塊屬性或代碼等可以影響安全軟件線程的執(zhí)行,比如隱藏一些對象如文件等,使這些安全軟件無法正常工作,或者直接打開安全軟件的進程并調(diào)用WriteProcessMemory直接修改,也可以通過注入代碼或動態(tài)庫到安全軟件的進程來進行修改。因此,應(yīng)該防止惡意程序通過內(nèi)存操作來破壞安全軟件,這里通過監(jiān)控用于操作內(nèi)存的API來保護安全軟件。設(shè)計出包含以下API集合的攔截策略,通過攔截該集合的API來防止內(nèi)存被修改、被讀取、被鎖定、被修改屬性a)Zw/NtWriteProcessMemory:寫虛擬內(nèi)存b)Zw/NtReadProcessMemory:讀虛擬內(nèi)存c)Zw/NtLockVirtualMemory:鎖定虛擬內(nèi)存d)Zw/NtProtectVirtualMemory:修改虛擬內(nèi)存頁保護屬性結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于操作內(nèi)存的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的任意上述API是否與受保護軟件有關(guān),進而阻止針對受保護軟件的內(nèi)存操作請求。4)關(guān)于進程操作本發(fā)明的保護策略的另一個方面是針對進程的保護。通過結(jié)束安全軟件的進程可以阻止安全軟件發(fā)揮作用,可以通過以下方式來結(jié)束安全軟件的進程調(diào)用TerminateProcess、結(jié)束進程內(nèi)的所有線程、模擬鼠標(biāo)點擊來點擊窗口的關(guān)閉按鈕。另外,可以通過調(diào)試目標(biāo)進程來控制安全軟件的進、線程等,并可以通過停止調(diào)試來結(jié)束目標(biāo)進程。因此,應(yīng)該防止惡意程序通過進程操作對軟件的破壞,這里通過監(jiān)控用于操作進程的API來保護安全軟件。設(shè)計出包含以下API集合的攔截策略,通過攔截該集合的API來實現(xiàn)對進程的保護,使惡意程序不能夠直接對受保護軟件的進程執(zhí)行任何操作,防止受保護軟件的進程被結(jié)束和被調(diào)試a)Zw/NtSetlnformationProcess:設(shè)置進程屬性信息,比如優(yōu)先級、調(diào)試端口、訪問權(quán)限等b)Zw/NtTerminateProcess:結(jié)束進程c)Zw/NtDebugActiveProcess:調(diào)試進程d)Zw/NtRequestWaitReplyPort:與本地過程調(diào)用相關(guān),調(diào)試時會用到該API結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于操作進程的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的任意上述API是否與受保護軟件有關(guān),進而阻止針對受保護軟件的進程操作請求。5)關(guān)于線程操作本發(fā)明的保護策略的另一個方面是針對線程的保護?,F(xiàn)有的安全軟件對進程的防護只做到防止被TerminateThread,所以通過結(jié)束線程而實現(xiàn)結(jié)束進程的方法有可能被用來攻擊這種安全軟件。另外,通過掛起安全軟件的一些線程可以使安全軟件的部分功能失效。因此,應(yīng)該防止惡意程序通過結(jié)束、掛起線程對軟件的破壞,這里通過監(jiān)控用于結(jié)束、掛起線程的API來保護安全軟件。通過攔截以下API集合來實現(xiàn)對線程的保護,防止線程被結(jié)束、被掛起a)Zw/NtTerminateThread:結(jié)束線程b)Zw/NtSuspendThread:掛起線程結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于操作線程的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的任意上述API是否與受保護軟件有關(guān),阻止針對受保護軟件的線程操作請求,從而阻止例如結(jié)束、掛起線程這樣的對線程的任意直接操作。6)關(guān)于排隊APC對于排隊APC的防護也是本發(fā)明的保護策略的一個方面。APC稱為異步過程調(diào)用,是一種線程相關(guān)的回調(diào)機制。當(dāng)向一個線程的APC隊列排隊一個APC后,當(dāng)該線程的一個Alertable等待滿足時,APC函數(shù)將得以運行。排隊APC機制很可能被惡意程序利用來對安全軟件進行破壞,例如,當(dāng)一個Alertable的WaitForSingleObjectEx滿足時,惡意程序創(chuàng)建的APC函數(shù)運行。這里通過監(jiān)控用于對一個線程排隊APC的以下API來從這個方面保護安全軟件Zw/NtQueueApcThread:對一個線程排隊APC結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于排隊APC的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的上述API是否與受保護軟件有關(guān),阻止針對受保護軟件的排隊APC操作請求。這里應(yīng)該注意的是,與上述注冊表的情況類似,在現(xiàn)有的操作系統(tǒng)中,只有Windows操作系統(tǒng)具有APC機制。因此,就本領(lǐng)域現(xiàn)狀而言,對于排隊APC的保護只是針對Windows操作系統(tǒng)而言的,對于其他操作系統(tǒng)則不需要考慮這個方面。然而,未來可能出現(xiàn)的操作系統(tǒng)中如果具備類似于Windows操作系統(tǒng)中的APC機制,則針對這種操作系統(tǒng)關(guān)于排隊APC方面的保護策略也在本發(fā)明的范圍之內(nèi)。7)關(guān)于注入代碼本發(fā)明的保護策略的另一個方面是對于注入代碼的防護。注入代碼通常需要兩個步驟把代碼寫入目標(biāo)進程,例如可以通過WriteProcessMemory或在內(nèi)核態(tài)通過KeAttachProcess附力Q至U目標(biāo)進程后直接寫內(nèi)存;激活遠(yuǎn)程代碼,例如可以通過CreateRemoteThread、或通過APC、或通過設(shè)置context的IP(指令指針)來進行激活。這里通過監(jiān)控用于注入代碼的API來保護安全軟件,通過攔截以下API集合來防止針對受保護軟件的代碼注入a)Zw/NtWriteVirtualMemory:寫虛擬內(nèi)存b)Zw/NtCreateThread:創(chuàng)建本地、遠(yuǎn)程進程c)Zw/NtSetThreadContext:設(shè)置線程環(huán)境,例如寄存器環(huán)境d)Zw/NtQueueApcThread:對一個線程排隊APC其中,通過攔截Zw/NtWriteVirtualMemory來防止把代碼直接寫入內(nèi)存,從而防止把代碼寫入目標(biāo)進程;并通過攔截Zw/NtCreateThread、Zw/NtSetThreadContext、Zw/NtQueueApcThread來分別防止激活遠(yuǎn)程代碼的上述三種可能方式。結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述可用于注入代碼的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的任意上述API是否與受保護軟件有關(guān),阻止針對受保護軟件的操作請求。8)關(guān)于注入動態(tài)庫本發(fā)明的保護策略的另一個方面是對于注入動態(tài)庫的防護。注入動態(tài)庫可以通過兩種方式實現(xiàn)向目標(biāo)進程寫入加載動態(tài)庫的代碼并激活,這與注入代碼的手段本質(zhì)上相同;通過消息鉤子注入動態(tài)庫。針對通過消息鉤子注入動態(tài)庫對軟件的破壞手段,通過攔截KeUserModeCallBack來監(jiān)控消息鉤子調(diào)用,從而阻止注入動態(tài)庫。結(jié)合圖1所示的監(jiān)控處理過,呈,通過掛鉤上述在調(diào)用消息鉤子時會被調(diào)用的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的上述API是否與受保護軟件有關(guān),進而阻止針對受保護軟件的注入動態(tài)庫操作請求。9)關(guān)于消息操作本發(fā)明的保護策略的另一個方面是對于消息模擬操作的防護。通過前面的分析可以知道,可以通過模擬鼠標(biāo)點擊消息來模擬點擊窗口的關(guān)閉按鈕,來結(jié)束安全軟件的迸程。然而,模擬消息還可以實現(xiàn)很多惡意行為,如模擬消息來關(guān)閉安全軟件的提示窗口,使用戶無法發(fā)現(xiàn)惡意程序的攻擊等。因此應(yīng)該防止惡意程序通過消息模擬操作對軟件的破壞,這里通過監(jiān)控用于消息操作的API來保護安全軟件。設(shè)計出包含以下API集合的攔截策略,通過攔截該集合的API來實現(xiàn)對消息模擬的監(jiān)控,防止通過消息模擬操作來結(jié)束受保護軟件的進程,以及防止通過消息模擬操作對受保護軟件的其他惡意操作a)SendMessage:模擬發(fā)送消息b)Sendlnput:模擬輸入結(jié)合圖1所示的監(jiān)控處理過程,通過掛鉤上述用于消息操作的API,相關(guān)聯(lián)的鉤子處理例程通過判斷所攔截到的上述API是否與受保護軟件有關(guān),阻止針對受保護軟件的消息操作請求。通過對按照本發(fā)明的軟件保護策略所選擇的上述API的監(jiān)控,可以全面有效地保護軟件免遭惡意程序的各種可能方式的攻擊。應(yīng)該注意,上述各組API集合有可能包含相同的API,這只是為了針對不同的保護方面做出更加清楚的描述,并不影響這些API集合的監(jiān)視在功能上的實現(xiàn)。上述各組優(yōu)選的API集合,對于對應(yīng)的保護對象是有機的整體,能夠全面地提高軟件保護的效果。但是,根據(jù)本發(fā)明的軟件保護策略所選擇的上述API集合也不是唯一的,例如,可以用具有相同或相似功能的API進行替換,并且,不同版本的操作系統(tǒng)中,執(zhí)行相同功能的API可能具有不同的名稱,因此,不能將本發(fā)明限制在具體實施例中所給出的API集合,本發(fā)明包含符合本發(fā)明原理的所有修改和變形。權(quán)利要求1、一種全方位的軟件自我保護方法,包括建立多個鉤子來監(jiān)控多個可應(yīng)用于受保護軟件的操作請求;當(dāng)所述多個鉤子中的至少之一攔截到相關(guān)聯(lián)的操作請求時,判斷所攔截到的操作請求是否與受保護軟件有關(guān)如果有關(guān),則拒絕所攔截到的操作請求,如果無關(guān),則允許所攔截到的操作請求;其中,所述多個可應(yīng)用于受保護軟件的操作請求包括可用于篡改文件的操作請求;可用于修改內(nèi)存、讀取內(nèi)存、鎖定內(nèi)存、修改內(nèi)存屬性的操作請求;可用于操作進程的操作請求;可用于結(jié)束線程、掛起線程的操作請求;可用于注入代碼的操作請求;可用于注入動態(tài)庫的操作請求;可用于模擬消息的操作請求。2、如權(quán)利要求1所述的全方位的軟件自我保護方法,其中,所述多個可應(yīng)用于受保護軟件的操作請求還包括可用于篡改注冊表鍵值的操作請求;可用于排隊APC的操作請求。3、如權(quán)利要求2所述的全方位的軟件自我保護方法,其中,監(jiān)控所述可用于篡改文件的操作請求通過攔截文件系統(tǒng)的I/O處理函數(shù)來執(zhí)行;監(jiān)控所述可用于篡改注冊表鍵值的操作請求通過攔截用于篡改注冊表鍵值的API來執(zhí)行;監(jiān)控所述可用于修改內(nèi)存、讀取內(nèi)存、鎖定內(nèi)存、修改內(nèi)存屬性的操作請求分別通過攔截用于寫虛擬內(nèi)存、用于讀虛擬內(nèi)存、用于鎖定虛擬內(nèi)存、用于修改虛擬內(nèi)存屬性的API來執(zhí)行;監(jiān)控所述可用于操作進程的操作請求通過攔截用于進程操作的API來執(zhí)行;監(jiān)控所述可用于結(jié)束、掛起線程的操作請求通過攔截用于結(jié)束、掛起線程的API來執(zhí)行;監(jiān)控所述可用于注入代碼的操作請求通過攔截用于注入代碼的API來執(zhí)行;監(jiān)控所述可用于注入動態(tài)庫的操作請求通過攔截用于調(diào)用消息鉤子的API來執(zhí)行;監(jiān)控所述可用于排隊APC的操作請求通過攔截用于對線程排隊APC的API來執(zhí)行;監(jiān)控所述可用于模擬消息的操作請求通過攔截用于消息操作的API來執(zhí)行。4、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述文件系統(tǒng)的I/O處理函數(shù)包括IRP_MJ_CREATE、IRP一MJ一WRITE、IRPMJ—SETJNFO腿AT畫o5、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于篡改注冊表鍵值的API包括Zw/NtRenameKey、Zw/NtRestoreKey、Zw/NtSetValueKey、Zw/NtDeleteKey、Zw/NtDeleteValueKey。6、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于寫虛擬內(nèi)存、用于讀虛擬內(nèi)存、用于鎖定虛擬內(nèi)存、用于修改虛擬內(nèi)存屬性的API包括Zw/NtWriteVirtualMemory、Zw/NtReadVirtualMemory、Zw/NtLockVirtualMemory、Zw/NtProtectVirtualMemory。7、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于進程操作的API包括Zw/NtSetlnformationProcess、Zw/NtTerminateProcess、Zw/NtDebugActiveProcess、Zw/NtRequestWaitReplyPort。8、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于結(jié)束、掛起線程的API包括Zw/NtTerminateThread、Zw/NtSuspendThread。9、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于注入代碼的API包括Zw/NtWriteVirtualMemoiy、Zw/NtCreateThread、Zw/NtSetThreadContext、Zw/NtQueueApcThread。10、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于調(diào)用消息鉤子的API包括KeUserModeCallBack。11、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述用于消息操作的API包括SendMessage、Sendlnput。12、如權(quán)利要求3所述的全方位的軟件自我保護方法,其中,所述文件系統(tǒng)的I/O處理函數(shù)包括IRP一MJ—CREATE、IRP一MJ—WRITE、IRP一MJ一SET一INFORMATION;所述用于篡改注冊表鍵值的API包括Zw/NtRenameKey、Zw/NtRestoreKey、Zw/NtSetValueKey、Zw/NtDeleteKey、Zw/NtDeleteValueKey;所述用于寫虛擬內(nèi)存、用于讀虛擬內(nèi)存、用于鎖定虛擬內(nèi)存、用于修改虛擬內(nèi)存屬性的API包括Zw/NtWriteVirtualMemory、Zw/NtReadVirtualMemory、Zw/NtLockVirtualMemory、Zw/NtProtectVirtualMemory;所述用于進程操作的API包括Zw/NtSetlnformationProcess、Zw/NtTerminateProcess、Zw/NtDebugActiveProcess、Zw/NtRequestWaitReplyPort;所述用于結(jié)束、掛起線程操作的API包括Zw/NtSuspendThread、Zw/NtTerminateThread;所述用于注入代碼的API包括Zw/NtWriteVirtualMemory、Zw/NtCreateThread、Zw/NtSetThreadContext、Zw/NtQueueApcThread;所述用于調(diào)用消息鉤子的API包括KeUserModeCal舊ack;所述用于消息操作的API包括SendMessage、Sendlnput。全文摘要一種全方位的軟件自我保護方法,包括建立多個鉤子來監(jiān)控多個可應(yīng)用于受保護軟件的操作請求;當(dāng)所述多個鉤子中的至少之一攔截到相關(guān)聯(lián)的操作請求時,判斷所攔截到的操作請求是否與受保護軟件有關(guān)如果有關(guān),則拒絕所攔截到的操作請求,如果無關(guān),則允許所攔截到的操作請求;其中,所述多個可應(yīng)用于受保護軟件的操作請求包括可用于篡改文件的操作請求;可用于篡改注冊表鍵值的操作請求;可用于修改內(nèi)存、讀取內(nèi)存、鎖定內(nèi)存、修改內(nèi)存屬性的操作請求;可用于操作進程的操作請求;可用于結(jié)束、掛起線程的操作請求;可用于注入代碼的操作請求;可用于注入動態(tài)庫的操作請求;可用于排隊APC的操作請求;可用于模擬消息的操作請求。文檔編號G06F9/44GK101414341SQ20071016245公開日2009年4月22日申請日期2007年10月15日優(yōu)先權(quán)日2007年10月15日發(fā)明者軍周申請人:北京瑞星國際軟件有限公司