本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別地涉及一種檢測(cè)計(jì)算機(jī)病毒的方法和裝置。
背景技術(shù):隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)病毒也在日益影響著計(jì)算機(jī)用戶(hù)的數(shù)據(jù)安全或使用體驗(yàn)。為此很多計(jì)算機(jī)安裝了防毒軟件(或稱(chēng)殺毒軟件、防火墻等)以抵抗計(jì)算機(jī)病毒。目前防毒軟件多采用特征碼識(shí)別的方式來(lái)檢測(cè)病毒,通過(guò)檢測(cè)病毒的特征碼來(lái)確認(rèn)當(dāng)前掃描的文件中包含病毒。因此一些計(jì)算機(jī)病毒的作者為了避免自己編寫(xiě)的病毒文件被防毒軟件檢測(cè)出來(lái),通常會(huì)將一些無(wú)效的指令加入病毒文件以躲避殺毒軟件的特征碼檢測(cè),從而影響了防毒軟件防御計(jì)算機(jī)病毒的效果?,F(xiàn)有技術(shù)中,對(duì)于采用在病毒文件中添加無(wú)效的指令的方法得到的計(jì)算機(jī)病毒的防御效果不佳,對(duì)于該問(wèn)題,目前尚未提出有效解決方案。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明的主要目的是提供一種檢測(cè)文件的方法和裝置,以解決現(xiàn)有技術(shù)對(duì)于采用病毒免殺的方法得到的計(jì)算機(jī)病毒的防御效果不佳的問(wèn)題。為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種檢測(cè)計(jì)算機(jī)病毒的方法。本發(fā)明的檢測(cè)計(jì)算機(jī)病毒的方法用于確定被測(cè)程序是否包含計(jì)算機(jī)病毒,包括:確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例,其中所述指令以機(jī)器碼表示;當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定所述被測(cè)程序中包含計(jì)算機(jī)病毒。進(jìn)一步地,所述確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令總量中所占的比例之前,包括:用反編譯的方法從所述被測(cè)程序的可執(zhí)行文件中獲取所述被測(cè)程序中的所有指令。進(jìn)一步地,所述確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令總量中所占的比例之前,包括:保存指令機(jī)器碼表,所述指令機(jī)器碼表的每一表項(xiàng)包含一條指令機(jī)器碼和一個(gè)數(shù)值,當(dāng)指令機(jī)器碼為無(wú)效的指令的機(jī)器碼時(shí),該指令機(jī)器碼所在表項(xiàng)中的所述數(shù)值為1,否則為0;所述確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令總量中所占的比例,包括:累加所述被測(cè)程序的所有指令的指令機(jī)器碼所在表項(xiàng)中的數(shù)值,將該數(shù)值與所述被測(cè)程序的指令總數(shù)的比值作為所述比例。根據(jù)本發(fā)明的另一方面,提供了一種檢測(cè)文件的裝置。本發(fā)明的檢測(cè)文件的裝置用于確定被測(cè)程序是否包含計(jì)算機(jī)病毒,包括:確定模塊,用于確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例,其中所述指令以機(jī)器碼表示;判定模塊,用于當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定所述被測(cè)程序中包含計(jì)算機(jī)病毒。進(jìn)一步地,還包括反編譯模塊,用于用反編譯的方法從所述被測(cè)程序的可執(zhí)行文件中獲取所述被測(cè)程序中的所有指令。進(jìn)一步地,所述裝置還包括指令機(jī)器碼表模塊,用于保存指令機(jī)器碼表,所述指令機(jī)器碼表的每一表項(xiàng)包含一條指令機(jī)器碼和一個(gè)數(shù)值,當(dāng)指令機(jī)器碼為無(wú)效的指令的機(jī)器碼時(shí),該指令機(jī)器碼所在表項(xiàng)中的所述數(shù)值為1,否則為0;所述確定模塊還用于:累加所述被測(cè)程序的所有指令的指令機(jī)器碼所在表項(xiàng)中的數(shù)值,將該數(shù)值與所述被測(cè)程序的指令總數(shù)的比值作為所述比例。根據(jù)本發(fā)明的技術(shù)方案,確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例,當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定所述被測(cè)程序中包含計(jì)算機(jī)病毒,使計(jì)算機(jī)病毒的作者采用添加無(wú)效的指令的方式來(lái)避免特征碼檢測(cè)的手段失效,包含無(wú)效指令的病毒程序雖然有可能躲避特征碼的檢測(cè),但仍然會(huì)被檢測(cè)確認(rèn)包含病毒,因此有助于提高對(duì)計(jì)算機(jī)病毒的防御效果。附圖說(shuō)明說(shuō)明書(shū)附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的方法的基本步驟的示意圖;圖2是根據(jù)本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的裝置的基本結(jié)構(gòu)示意圖。具體實(shí)施方式需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的方法由防毒軟件執(zhí)行,可按圖1所示步驟進(jìn)行。圖1是根據(jù)本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的方法的基本步驟的示意圖。如圖1所示,本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的方法主要包括如下步驟:步驟S11:確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例。本步驟中,指令以機(jī)器碼表示。步驟S12:當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定被測(cè)程序中包含計(jì)算機(jī)病毒。從上述步驟可以看出,本實(shí)施例中在被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例大于預(yù)設(shè)值時(shí)判定被測(cè)程序中包含計(jì)算機(jī)病毒,當(dāng)病毒程序中包含無(wú)效指令達(dá)到一定量時(shí)被確定為包含計(jì)算機(jī)病毒,這就使得包含了無(wú)效指令以避免特征碼檢測(cè)的病毒程序仍然能夠被檢測(cè)確認(rèn)包含病毒,有助于提高對(duì)計(jì)算機(jī)病毒的防御效果。在步驟S11之前,可以用反編譯的方法從所述被測(cè)程序的可執(zhí)行文件中獲取所述被測(cè)程序中的所有指令。并且本實(shí)施例中,具體可以先保存指令機(jī)器碼表,該指令機(jī)器碼表的每一表項(xiàng)包含一條指令機(jī)器碼和一個(gè)數(shù)值,當(dāng)指令機(jī)器碼為無(wú)效的指令的機(jī)器碼時(shí),該指令機(jī)器碼所在表項(xiàng)中的所述數(shù)值為1,否則為0;這樣,在步驟S11中,具體可以是累加被測(cè)程序的所有指令的指令機(jī)器碼所在表項(xiàng)中的數(shù)值,將該數(shù)值與被測(cè)程序的指令總數(shù)的比值作為被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令總量中所占的比例。以下對(duì)于本實(shí)施例中的檢測(cè)計(jì)算機(jī)病毒的裝置做出說(shuō)明。圖2是根據(jù)本發(fā)明實(shí)施例的檢測(cè)計(jì)算機(jī)病毒的裝置的基本結(jié)構(gòu)示意圖。如圖2所示,本發(fā)明實(shí)施例中的檢測(cè)計(jì)算機(jī)病毒的裝置20主要包括如下模塊:確定模塊21,用于確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例,其中所述指令以機(jī)器碼表示;判定模塊22,用于當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定所述被測(cè)程序中包含計(jì)算機(jī)病毒。本發(fā)明實(shí)施例中的檢測(cè)計(jì)算機(jī)病毒的裝置20還可包括反編譯模塊(圖中未示出),用于用反編譯的方法從所述被測(cè)程序的可執(zhí)行文件中獲取所述被測(cè)程序中的所有指令。本發(fā)明實(shí)施例中的檢測(cè)計(jì)算機(jī)病毒的裝置20還可包括指令機(jī)器碼表模塊(圖中未示出),用于保存指令機(jī)器碼表,該指令機(jī)器碼表的每一表項(xiàng)包含一條指令機(jī)器碼和一個(gè)數(shù)值,當(dāng)指令機(jī)器碼為無(wú)效的指令的機(jī)器碼時(shí),該指令機(jī)器碼所在表項(xiàng)中的所述數(shù)值為1,否則為0;這樣,確定模塊還可用于:累加被測(cè)程序的所有指令的指令機(jī)器碼所在表項(xiàng)中的數(shù)值,將該數(shù)值與被測(cè)程序的指令總數(shù)的比值作為被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例。根據(jù)本發(fā)明實(shí)施例的技術(shù)方案,確定被測(cè)程序中的無(wú)效的指令在所述被測(cè)程序的指令的總量中所占的比例,當(dāng)所述比例大于預(yù)設(shè)值時(shí)判定所述被測(cè)程序中包含計(jì)算機(jī)病毒,使計(jì)算機(jī)病毒的作者采用添加無(wú)效的指令的方式來(lái)避免特征碼檢測(cè)的手段失效,包含無(wú)效指令的病毒程序雖然有可能躲避特征碼的檢測(cè),但仍然會(huì)被檢測(cè)確認(rèn)包含病毒,因此有助于提高對(duì)計(jì)算機(jī)病毒的防御效果。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。