專利名稱:計(jì)算機(jī)內(nèi)存病毒監(jiān)控和帶毒運(yùn)行方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)的帶毒運(yùn)行技術(shù),更具體地說(shuō),涉及一種監(jiān)控在計(jì)算機(jī)平臺(tái)上已運(yùn)行(在內(nèi)存中)的病毒(包括蠕蟲(chóng)、木馬、惡意程序等)和讓帶毒文件運(yùn)行而不激活病毒的方法。該方法可以阻止帶毒的應(yīng)用程序中的病毒部分運(yùn)行,而不影響宿主應(yīng)用程序的功能。
背景技術(shù):
隨著計(jì)算機(jī)的廣泛使用,計(jì)算機(jī)病毒的數(shù)量和種類也越來(lái)越多,它能清除用戶的重要數(shù)據(jù),甚至破壞計(jì)算機(jī)硬件,給計(jì)算機(jī)用戶帶來(lái)極大的危害。
清除和防治病毒的方法目前主要有兩種,一種是靜態(tài)掃描,通常就是啟動(dòng)殺毒軟件,對(duì)本計(jì)算機(jī)或整個(gè)網(wǎng)絡(luò)進(jìn)行查殺毒;另一種方法是實(shí)時(shí)監(jiān)控,它的基本原理是,當(dāng)用戶要操作某個(gè)文件時(shí),該操作被殺毒軟件捕獲,殺毒軟件對(duì)這個(gè)文件進(jìn)行查殺毒。但是這兩種方法都是基于對(duì)文件的掃描來(lái)進(jìn)行查殺毒的,已經(jīng)越來(lái)越難以滿足查殺毒的需要,這主要有兩點(diǎn)原因首先,現(xiàn)在有很多壓縮工具、文件捆綁工具,這些工具改變了文件應(yīng)有的結(jié)構(gòu),同時(shí)也將病毒隱藏起來(lái),所以基于對(duì)文件的查殺就無(wú)法進(jìn)行;其次,如果在殺毒軟件運(yùn)行之前病毒已經(jīng)運(yùn)行,現(xiàn)有的殺毒軟件將無(wú)法找到病毒源,無(wú)法阻止病毒的運(yùn)行。
另外,目前有一種內(nèi)存查毒的方法,但是也屬于靜態(tài)掃描。也就是說(shuō),它是在用戶啟動(dòng)殺毒軟件并要求掃描內(nèi)存時(shí),才對(duì)內(nèi)存進(jìn)行查殺。它存在兩個(gè)問(wèn)題一是掃描時(shí)間較長(zhǎng),殺掉了一個(gè)病毒,可能另一個(gè)又運(yùn)行起來(lái)了;二是它可能無(wú)法殺毒,因?yàn)橄到y(tǒng)出于安全性考慮,將不會(huì)允許對(duì)某些進(jìn)程的操作。
但是,無(wú)論病毒在文件中存在的位置或形式如何,它要運(yùn)行則必然需要裝入到計(jì)算機(jī)的內(nèi)存中,而且它要傳染或破壞,總要調(diào)用操作系統(tǒng)的一些功能。如果我們能夠攔截住這些功能調(diào)用,在病毒調(diào)用這些功能時(shí)查找病毒將非常準(zhǔn)確,而且非???。此時(shí),我們將可以有兩種選擇,使病毒終止或者使病毒失敗,從而讓宿主程序繼續(xù)運(yùn)行,也就是讓程序帶毒運(yùn)行。
發(fā)明內(nèi)容
針對(duì)上述目前殺毒軟件中存在的問(wèn)題,本發(fā)明的目的在于提供一種在病毒已經(jīng)運(yùn)行但尚未進(jìn)行下次傳染或破壞之前能夠查到病毒并將其殺掉、以及允許染毒文件帶毒運(yùn)行而不激活病毒的計(jì)算機(jī)內(nèi)存查殺毒方法。
按照本發(fā)明的計(jì)算機(jī)內(nèi)存查殺毒方法包括以下步驟病毒分析,找到病毒調(diào)用的關(guān)鍵的操作系統(tǒng)功能;攔截對(duì)操作系統(tǒng)功能的調(diào)用;查毒,當(dāng)所述攔截的操作系統(tǒng)功能被調(diào)用時(shí),對(duì)調(diào)用這個(gè)功能的代碼進(jìn)行分析,識(shí)別出病毒;殺毒,對(duì)于病毒的處理,如果是病毒,則根據(jù)病毒的類型并結(jié)合用戶的選擇,決定是將病毒殺掉,還是讓病毒失敗,從而使染毒文件繼續(xù)運(yùn)行;恢復(fù),如果需要,恢復(fù)原來(lái)的調(diào)用環(huán)境,調(diào)用原來(lái)的系統(tǒng)功能。
根據(jù)本發(fā)明的內(nèi)存查殺毒方法,無(wú)論病毒在文件中存在的位置或形式如何,在其運(yùn)行裝入到計(jì)算機(jī)的內(nèi)存時(shí),以及在其調(diào)用操作系統(tǒng)的一些功能傳染或破壞時(shí),都能夠攔截住這些功能調(diào)用,非常準(zhǔn)確而且非??斓貙⒉《静闅?,使病毒終止或者使病毒失敗,從而讓宿主程序繼續(xù)運(yùn)行,也就是讓程序帶毒運(yùn)行。
通過(guò)以下借助附圖的詳細(xì)描述,將會(huì)更容易地理解本發(fā)明,其中圖1是根據(jù)本發(fā)明優(yōu)選實(shí)施例的計(jì)算機(jī)內(nèi)存查殺毒方法的監(jiān)控過(guò)程建立的流程圖;和圖2是根據(jù)本發(fā)明優(yōu)選實(shí)施例的病毒監(jiān)控處理過(guò)程的流程圖。
具體實(shí)施例方式
下面將結(jié)合附圖詳細(xì)描述本發(fā)明的優(yōu)選實(shí)施例。
在此應(yīng)該指出的是,根據(jù)本發(fā)明的內(nèi)存查殺毒方法不僅適用于WInDOWS 9X(包括WINDOWS95、WINDOWS98、WINDOWS ME)操作系統(tǒng),而且適用于其它的諸如WINDOWS NT(包括WINDOWS NT、WINDOWS2000)之類的操作系統(tǒng)。該方法能夠在各種平臺(tái)上實(shí)現(xiàn)內(nèi)存病毒的實(shí)時(shí)查殺,并能讓染毒文件帶毒運(yùn)行,而不激活病毒。
下面將以WINDOWS 9X平臺(tái)為例具體說(shuō)明本發(fā)明的計(jì)算機(jī)內(nèi)存查殺毒方法的各操作步驟。對(duì)于WINDOWS系統(tǒng)而言,它的系統(tǒng)功能調(diào)用通過(guò)API函數(shù)實(shí)現(xiàn),所以下面的敘述中將使用API函數(shù)代替系統(tǒng)功能調(diào)用。
圖1是根據(jù)本發(fā)明優(yōu)選實(shí)施例的計(jì)算機(jī)內(nèi)存查殺毒方法的監(jiān)控過(guò)程建立的流程圖。
首先,在步驟S11,對(duì)病毒進(jìn)行分析。在該步驟中,對(duì)各種能在WINDOWS平臺(tái)上運(yùn)行的病毒分析進(jìn)行,找到它們要調(diào)用的兩類函數(shù),一類是在第一次運(yùn)行時(shí)判斷其是否能夠初始化時(shí)所要調(diào)用的函數(shù),如果讓該函數(shù)返回病毒不希望的結(jié)果,則病毒將不再運(yùn)行,而是運(yùn)行宿主,從而做到帶毒運(yùn)行;另一類是在它正常運(yùn)行時(shí)必須要調(diào)用的函數(shù),通過(guò)攔截這個(gè)函數(shù),能夠在病毒進(jìn)行下次傳染或破壞之前將其查到并殺掉。這兩類函數(shù)對(duì)于某個(gè)病毒而言,可能各需一個(gè),也可能需要幾個(gè)。將這些信息組合在一起,建立一個(gè)數(shù)據(jù)庫(kù),稱為病毒庫(kù)。它包括調(diào)用的函數(shù)名稱、病毒的特征描述、病毒的處理方法等。
例如,對(duì)于CODERED病毒,它要啟動(dòng),就必須調(diào)用GetProcAddressA這個(gè)API函數(shù),如果在它調(diào)用這個(gè)API函數(shù)失敗時(shí),也就說(shuō),函數(shù)返回空時(shí),它將放棄運(yùn)行,也就不會(huì)感染其它計(jì)算機(jī)系統(tǒng)或?qū)Ρ居?jì)算機(jī)系統(tǒng)進(jìn)行破壞。另外,在正常運(yùn)行過(guò)程中,它要傳染其它計(jì)算機(jī)系統(tǒng)和文件,則必然要調(diào)用socket函數(shù)。
然后,在步驟S12,運(yùn)行病毒監(jiān)控程序,準(zhǔn)備好所有的要攔截API函數(shù)。這些函數(shù)是在步驟S11中分析得到的病毒啟動(dòng)時(shí)和正常運(yùn)行期間所需要調(diào)用的系統(tǒng)功能。
接著,在步驟S13,攔截上述分析得到的函數(shù),使系統(tǒng)功能調(diào)用函數(shù)指向?qū)崟r(shí)病毒監(jiān)控處理過(guò)程。
對(duì)于WINDOWS來(lái)說(shuō),它的每一個(gè)進(jìn)程的地址空間是獨(dú)立的。而要查殺所有進(jìn)程中的病毒,則需要攔截所有進(jìn)程的函數(shù)調(diào)用。為此,需要啟動(dòng)一個(gè)特意編寫(xiě)的設(shè)備驅(qū)動(dòng)程序,該設(shè)備驅(qū)動(dòng)程序的作用是使對(duì)API的攔截對(duì)所有的進(jìn)程起作用,包括現(xiàn)有的和將來(lái)要產(chǎn)生的。通過(guò)對(duì)這個(gè)設(shè)備驅(qū)動(dòng)程序的調(diào)用,攔載所有上述分析過(guò)程中得到的函數(shù),并為這些函數(shù)調(diào)用提供一個(gè)統(tǒng)一的處理程序,將函數(shù)標(biāo)識(shí)和調(diào)用者代碼傳給處理程序,以備查殺毒用。在完成所有的攔截操作后,該設(shè)備驅(qū)動(dòng)程序就不再起任何作用。
具體地說(shuō),是先將要攔截API函數(shù)的處理程序初始化,以準(zhǔn)備接收API函數(shù)的調(diào)用,然后將要攔截的API函數(shù)的入口代碼一一加以修改,使其指向預(yù)定的代碼,這段代碼的作用是將API的標(biāo)識(shí)和調(diào)用者的代碼地址壓入棧中,然后調(diào)用API函數(shù)處理程序,待API函數(shù)處理程序返回后,再運(yùn)行原來(lái)的被取代的指令,然后轉(zhuǎn)到該API函數(shù)的后續(xù)指令執(zhí)行。例如某個(gè)API的入口代碼為PUSH EBPMOV EBP,ESPADD ESP,200后續(xù)指令這是非常常見(jiàn)的API入口指令,我們將這段指令保存到別處,然后將它修改為JMP XXXXXXXX處是一段處理程序,它的代碼如下PUSH API標(biāo)識(shí)CALL API處理程序ADD ESP,4PUSH EBPMOV EBP,ESPADD ESP,200JMP 后續(xù)指令到此,已經(jīng)建立了對(duì)病毒進(jìn)行實(shí)時(shí)監(jiān)控的環(huán)境。也就是說(shuō),當(dāng)一個(gè)染毒文件運(yùn)行時(shí),將會(huì)調(diào)用某個(gè)上述已經(jīng)攔截的函數(shù),這時(shí),通過(guò)在步驟S13中的處理,將會(huì)進(jìn)入到預(yù)定的處理程序,即,進(jìn)入病毒監(jiān)控過(guò)程。
下面,將參照?qǐng)D2所示的病毒監(jiān)控過(guò)程詳細(xì)描述對(duì)系統(tǒng)功能調(diào)用的處理,即,對(duì)帶毒程序所調(diào)用的函數(shù)的處理。
首先,當(dāng)在步驟S21一段代碼調(diào)用被攔截的系統(tǒng)調(diào)用時(shí),則在步驟S22保存當(dāng)前的調(diào)用環(huán)境。
接著,在步驟S23,將函數(shù)的調(diào)用者與病毒庫(kù)進(jìn)行比較,從而知道是什么病毒在運(yùn)行,并標(biāo)識(shí)這是病毒初始運(yùn)行,也就是說(shuō)宿主還未運(yùn)行。
另外一種情況是,如果一個(gè)病毒在根據(jù)本發(fā)明的預(yù)定的處理程序運(yùn)行之前已經(jīng)運(yùn)行,也就是說(shuō)宿主已運(yùn)行,并且病毒駐留在系統(tǒng)中,那么,這時(shí)它要感染其它文件或要進(jìn)行破壞,也要調(diào)用某個(gè)函數(shù),該函數(shù)也屬于在上一步中已經(jīng)攔截的函數(shù),此時(shí)同樣又進(jìn)入所述預(yù)定的處理程序,將函數(shù)調(diào)用者與病毒進(jìn)行比較,找到是什么病毒在運(yùn)行,并標(biāo)識(shí)這是運(yùn)行過(guò)程中的調(diào)用。
比如某個(gè)病毒在啟動(dòng)時(shí)執(zhí)行下面的代碼向系統(tǒng)申請(qǐng)12K內(nèi)存如果申請(qǐng)到了,轉(zhuǎn)M處執(zhí)行C否則,取一個(gè)數(shù)A對(duì)A取反,為B轉(zhuǎn)到B處的地址執(zhí)行。M將自己復(fù)制到申請(qǐng)的內(nèi)存中。
…創(chuàng)建一個(gè)線程,運(yùn)行自己的拷貝轉(zhuǎn)C處執(zhí)行以上代碼就基本構(gòu)成了該病毒的特征,當(dāng)然為安全起見(jiàn),通常不止取一處特征。
對(duì)于它的感染或破壞過(guò)程,它必然執(zhí)行以下列代碼保存文件屬性,保存到F處修改文件屬性為可讀寫(xiě)打開(kāi)文件將文件40字節(jié)讀到G處轉(zhuǎn)3C所指示的偏移讀200字節(jié)取程序入口B,對(duì)B取反后保存到A處,以上代碼也基本構(gòu)成了該病毒的特征,為安全起見(jiàn),可以取更多的特征。
如果在調(diào)用者代碼中查到了這些特征,則認(rèn)為查到了病毒。
然后,在步驟S24中判斷是否發(fā)現(xiàn)病毒。根據(jù)在步驟S23中的比較結(jié)果進(jìn)行判斷,如果沒(méi)有查到病毒,則執(zhí)行步驟S28和S29,恢復(fù)原來(lái)的調(diào)用環(huán)境,調(diào)用原來(lái)的系統(tǒng)函數(shù),然后前進(jìn)到步驟S30,功能調(diào)用返回。否則,如果確定發(fā)現(xiàn)了病毒,則前進(jìn)到步驟S25。
在步驟S25中,根據(jù)在步驟S23中得到的病毒庫(kù)的數(shù)據(jù)和標(biāo)識(shí),如果是病毒初始運(yùn)行,則執(zhí)行步驟S26;如果病毒已經(jīng)運(yùn)行,則執(zhí)行步驟S27。
在步驟S26,讓目前系統(tǒng)的這個(gè)函數(shù)返回給定結(jié)果,該結(jié)果將會(huì)讓病毒失敗。如果該函數(shù)結(jié)果不足以讓病毒失敗,此時(shí)可以修改病毒下一步要運(yùn)行的代碼,從而讓它失敗。
具體到上面的例子,就是讓申請(qǐng)內(nèi)存的函數(shù)返回0,這樣這個(gè)病毒就不會(huì)執(zhí)行,因?yàn)锽是宿主程序的入口。也就是說(shuō),病毒的感染或破壞代碼根本沒(méi)有機(jī)會(huì)執(zhí)行。這樣系統(tǒng)就可以帶毒運(yùn)行,不會(huì)影響宿主的的正常執(zhí)行,病毒也不會(huì)被激活。
如果在步驟S25中判斷病毒已經(jīng)運(yùn)行,則執(zhí)行步驟S27。在步驟S27中,根據(jù)病毒庫(kù)中的數(shù)據(jù),決定是終止當(dāng)前線程,還是終目當(dāng)前進(jìn)程。對(duì)于上面的例子,我們可以終止當(dāng)前線程。
如上所述,采用本發(fā)明的內(nèi)存查殺毒方法,無(wú)論病毒在文件中存在的位置或形式如何,都能夠攔截病毒對(duì)系統(tǒng)功能的調(diào)用,非常準(zhǔn)確而且非常快地實(shí)時(shí)將病毒查殺,使病毒終止或者使病毒失敗,從而讓宿主程序繼續(xù)運(yùn)行,也就是讓程序帶毒運(yùn)行。
雖然本發(fā)明已以前述優(yōu)選實(shí)施例說(shuō)明,然其并非用于限制本發(fā)明,任何本領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,可作各種的更動(dòng)與修改。因此本發(fā)明的保護(hù)范圍以后附的權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種計(jì)算機(jī)內(nèi)存查殺毒方法,包括以下步驟病毒分析,找到病毒調(diào)用的關(guān)鍵的操作系統(tǒng)功能,建立病毒庫(kù);攔截對(duì)操作系統(tǒng)功能的調(diào)用;查毒,當(dāng)所述攔截的操作系統(tǒng)功能被調(diào)用時(shí),對(duì)調(diào)用這個(gè)功能的代碼進(jìn)行分析,識(shí)別出病毒;殺毒,對(duì)于病毒的處理,如果是病毒,則根據(jù)病毒的類型并結(jié)合用戶的選擇,決定是將病毒殺掉,還是讓病毒失敗,從而使染毒文件繼續(xù)運(yùn)行;以及恢復(fù),如果需要,恢復(fù)原來(lái)的調(diào)用環(huán)境,調(diào)用原來(lái)的系統(tǒng)功能。
2.如權(quán)利要求1所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中所述系統(tǒng)指包括WINDOWS95、WINDOWS98、WINDOWS ME的WINDOWS操作系統(tǒng),以及包括WINDOWS NT、WINDOWS2000的WINDOWS NT操作系統(tǒng)。
3.如權(quán)利要求1所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中所述病毒庫(kù)包括病毒所調(diào)用的兩類函數(shù),一類是在第一次運(yùn)行時(shí)判斷病毒是否能夠初始化時(shí)所要調(diào)用的函數(shù),通過(guò)讓該函數(shù)返回病毒不希望的結(jié)果,使病毒將不再運(yùn)行,而是運(yùn)行宿主,從而做到帶毒運(yùn)行;另一類是病毒正常運(yùn)行時(shí)必須要調(diào)用的函數(shù),通過(guò)攔截這個(gè)函數(shù),能夠在病毒進(jìn)行下次傳染或破壞之前將其查到并殺掉。
4.如權(quán)利要求3所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中所述病毒庫(kù)還包括調(diào)用的函數(shù)名稱、病毒的特征描述、病毒的處理方法等。
5.如權(quán)利要求2所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中對(duì)于WINDOWS操作系統(tǒng),所述系統(tǒng)功能調(diào)用通過(guò)API函數(shù)實(shí)現(xiàn)。
6.如權(quán)利要求1所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中在攔截對(duì)操作系統(tǒng)功能的調(diào)用步驟中進(jìn)一步包括下述步驟啟動(dòng)一個(gè)設(shè)備驅(qū)動(dòng)程序,通過(guò)調(diào)用該設(shè)備驅(qū)動(dòng)程序,攔截所有分析過(guò)程中得到的函數(shù),并為這些函數(shù)調(diào)用提供一個(gè)統(tǒng)一的處理程序,將函數(shù)標(biāo)識(shí)和調(diào)用者代碼傳給處理程序,以備查殺毒用;并且在完成所有的攔截操作后,該設(shè)備驅(qū)動(dòng)程序就不再起任何作用。
7.如權(quán)利要求1所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中在查毒步驟中,進(jìn)一步判斷病毒初始運(yùn)行還是已經(jīng)駐留在系統(tǒng)中;如果是初始運(yùn)行,則讓當(dāng)前的系統(tǒng)函數(shù)返回使病毒失敗的給定結(jié)果;如果判斷病毒已經(jīng)運(yùn)行,則根據(jù)病毒庫(kù)中的數(shù)據(jù),決定是終止當(dāng)前線程,還是終止當(dāng)前進(jìn)程。
8.如權(quán)利要求7所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中如果在病毒是初始運(yùn)行時(shí)返回的函數(shù)結(jié)果不足以讓病毒失敗,則修改病毒下一步要運(yùn)行的代碼,從而讓它失敗。
9.如權(quán)利要求1所述的計(jì)算機(jī)內(nèi)存查殺毒方法,其中為安全起見(jiàn),獲取病毒的多種特征。
全文摘要
本發(fā)明涉及一種計(jì)算機(jī)內(nèi)存查殺毒方法,包括以下步驟病毒分析,找到病毒調(diào)用的關(guān)鍵的操作系統(tǒng)功能;攔截對(duì)操作系統(tǒng)功能的調(diào)用;查毒,當(dāng)所述攔截的操作系統(tǒng)功能被調(diào)用時(shí),對(duì)調(diào)用這個(gè)功能的代碼進(jìn)行分析,識(shí)別出病毒;殺毒,對(duì)于病毒的處理,如果是病毒,則根據(jù)病毒的類型并結(jié)合用戶的選擇,決定是將病毒殺掉,還是讓病毒失敗,從而使染毒文件繼續(xù)運(yùn)行;恢復(fù),如果需要,恢復(fù)原來(lái)的調(diào)用環(huán)境,調(diào)用原來(lái)的系統(tǒng)功能。
文檔編號(hào)G06F11/30GK1409222SQ0114215
公開(kāi)日2003年4月9日 申請(qǐng)日期2001年9月14日 優(yōu)先權(quán)日2001年9月14日
發(fā)明者王耀華 申請(qǐng)人:北京瑞星科技股份有限公司