專(zhuān)利名稱(chēng):經(jīng)由動(dòng)態(tài)轉(zhuǎn)換的主動(dòng)計(jì)算機(jī)惡意軟件保護(hù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算設(shè)備,尤其涉及針對(duì)惡意軟件的計(jì)算設(shè)備保護(hù)。
背景技術(shù):
隨著越來(lái)越多的計(jì)算機(jī)和其它計(jì)算設(shè)備經(jīng)由諸如因特網(wǎng)等各種網(wǎng)絡(luò)互連,計(jì) 算機(jī)安全變得日益重要,尤其對(duì)于經(jīng)由網(wǎng)絡(luò)或信息流傳遞的侵入或攻擊。如本領(lǐng)域 的技術(shù)人員可以認(rèn)識(shí)到的,這些攻擊具有各種形式,包括但當(dāng)然不限于,計(jì)算機(jī)病 毒、計(jì)算機(jī)蠕蟲(chóng)、系統(tǒng)組件替換、服務(wù)拒絕攻擊、甚至是對(duì)合法的計(jì)算機(jī)系統(tǒng)特性 的誤用/濫用,所有這些都為不合法的目的而利用一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)的漏洞。 盡管本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到各種計(jì)算機(jī)攻擊在技術(shù)上彼此不同,但為本發(fā)明的 目的以及描述的簡(jiǎn)明性起見(jiàn),所有惡意計(jì)算機(jī)程序在后文中一般被稱(chēng)為計(jì)算機(jī)惡意 軟件,或簡(jiǎn)稱(chēng)為惡意軟件。
當(dāng)計(jì)算設(shè)備被計(jì)算機(jī)惡意軟件攻擊或"感染"時(shí),不利的結(jié)果是各有不同的, 包括禁用系統(tǒng)設(shè)備;擦除或破壞固件、應(yīng)用程序或數(shù)據(jù)文件;將潛在敏感的數(shù)據(jù)發(fā) 送給網(wǎng)絡(luò)上的另一位置;關(guān)閉計(jì)算機(jī)設(shè)備;或使計(jì)算設(shè)備崩潰。眾多而不是全部計(jì) 算機(jī)惡意軟件的另一有害方面在于,受感染的計(jì)算設(shè)備被用于感染其它系統(tǒng)。
針對(duì)計(jì)算機(jī)惡意軟件,尤其是計(jì)算機(jī)病毒和蠕蟲(chóng)的傳統(tǒng)防御是反病毒軟件。 一般而言,反病毒軟件掃描傳入的數(shù)據(jù)、查找與已知計(jì)算機(jī)惡意軟件相關(guān)聯(lián)的可標(biāo) 識(shí)模式。而且,反病毒軟件越來(lái)越多地利用將傳入的數(shù)據(jù)與已知惡意軟件的特征進(jìn) 行比較的試探技術(shù)。在任何情況中,當(dāng)檢測(cè)到計(jì)算機(jī)惡意軟件時(shí),反病毒軟件可通 過(guò)從受感染的數(shù)據(jù)中移除該計(jì)算機(jī)惡意軟件、隔離該數(shù)據(jù)或刪除受感染的傳入數(shù)據(jù) 來(lái)響應(yīng)。不幸的是,反病毒軟件一般對(duì)已知的、可標(biāo)識(shí)的計(jì)算機(jī)惡意軟件起作用。 通常,這是通過(guò)將數(shù)據(jù)內(nèi)的模式與所謂的惡意軟件的"簽名"進(jìn)行比較來(lái)完成的。 這種惡意軟件檢測(cè)模型的核心缺陷之一在于,未知的計(jì)算機(jī)惡意軟件可在網(wǎng)絡(luò)中未 經(jīng)檢查地傳播,直到計(jì)算設(shè)備上的反病毒軟件被更新來(lái)標(biāo)識(shí)并響應(yīng)該惡意軟件。
隨著反病毒軟件對(duì)識(shí)別成千種己知計(jì)算機(jī)惡意軟件變得越來(lái)越老練且高效,計(jì)算機(jī)惡意軟件也變得越來(lái)越復(fù)雜。例如,惡意計(jì)算機(jī)用戶(hù)現(xiàn)在對(duì)惡意軟件加密以
便在不可識(shí)別模式背后模糊惡意軟件簽名。例如,多形(polymorphic)惡意軟件 由惡意軟件解密例程和經(jīng)加密的惡意軟件"有效負(fù)載"組成。當(dāng)用戶(hù)執(zhí)行受感染程 序時(shí),惡意軟件解密例程獲取對(duì)該計(jì)算設(shè)備的控制,并對(duì)之前加密的惡意軟件有效 負(fù)載解密。然后,解密例程將對(duì)計(jì)算設(shè)備的控制傳送給已解密的惡意軟件有效負(fù)載。 每當(dāng)新目標(biāo)被感染時(shí),惡意軟件復(fù)制解密例程和惡意軟件有效負(fù)載兩者。 一般,用 于加密惡意軟件有效負(fù)載的加密密鑰在惡意軟件被復(fù)制時(shí)被改變。結(jié)果是,經(jīng)加密 的惡意軟件不具有反病毒軟件可用于識(shí)別惡意軟件的可標(biāo)識(shí)模式或"簽名"。
當(dāng)寡形(oligomorphic)惡意軟件被創(chuàng)建時(shí),反病毒軟件開(kāi)發(fā)員認(rèn)識(shí)到,解密 例程在惡意軟件的各版本之間保持不變。反病毒軟件開(kāi)發(fā)員通過(guò)不僅掃描惡意軟件 簽名,還掃描已知與惡意軟件相關(guān)聯(lián)的專(zhuān)用解密例程來(lái)利用該弱點(diǎn)。作為響應(yīng),惡 意計(jì)算機(jī)用戶(hù)開(kāi)發(fā)了被設(shè)計(jì)成防止解密例程被標(biāo)識(shí)的更復(fù)雜的惡意軟件(后文中,
使用被設(shè)計(jì)成隱藏惡意軟件簽名的技術(shù)的所有類(lèi)型的惡意軟件將被稱(chēng)為"隱蔽 (obscured)惡意軟件")。
圖1是示出可用于分發(fā)"有效負(fù)載"的被稱(chēng)為多形惡意軟件100的一種隱蔽 惡意軟件的示意圖。如圖1中所示,多形惡意軟件100附加到主機(jī)程序102,且在 此實(shí)例中,它被示為包括加密引擎106、解密例程108以及多形文件傳染者110的 病毒104。多形惡意軟件100對(duì)病毒104的片段加密以防止可標(biāo)識(shí)簽名被標(biāo)識(shí)。然 而,病毒104還包括每當(dāng)病毒104傳播時(shí)即生成隨機(jī)加密例程的加密引擎106。當(dāng) 病毒104運(yùn)行時(shí),多形文件傳染者110標(biāo)識(shí)新目標(biāo),并在計(jì)算機(jī)存儲(chǔ)器中復(fù)制病毒 104。此時(shí),加密引擎106隨機(jī)生成具有極少或不具有與之前開(kāi)發(fā)的加密例程的相 似性的新加密例程。然后,病毒104的經(jīng)加密的副本被追加給被標(biāo)識(shí)的目標(biāo)。結(jié)果, 病毒104被加密,且用于加密和解密的例程隨感染而有所不同。在沒(méi)有固定惡意軟 件簽名或固定加密例程的情況中,常規(guī)的反病毒軟件不可能檢測(cè)多形惡意軟件 100,因?yàn)楹灻豢蓸?biāo)識(shí)。
考慮到上述問(wèn)題,計(jì)算機(jī)用戶(hù)擁有針對(duì)諸如隱蔽惡意軟件等惡意軟件來(lái)主動(dòng) 保護(hù)計(jì)算機(jī)的軟件將是有利的。
發(fā)明概述
本發(fā)明提供用于針對(duì)惡意軟件保護(hù)計(jì)算設(shè)備的安全模型。根據(jù)本發(fā)明的一個(gè) 方面,提供了一種用于將與計(jì)算設(shè)備相關(guān)聯(lián)的潛在惡意軟件轉(zhuǎn)換成安全程序代碼的方法。本發(fā)明的這一方面以在存儲(chǔ)器中所標(biāo)識(shí)的程序入口點(diǎn)處分析潛在惡意軟件開(kāi) 始。對(duì)惡意軟件的初始分析包括通過(guò)對(duì)指令解碼直到遇到基本塊中的最后一條指令 來(lái)將程序代碼分成"基本塊"。在基本塊中的指令之前未經(jīng)掃描的情況中,掃描器 搜索基本塊以查找惡意軟件。如果檢測(cè)到惡意軟件且以足夠級(jí)別的精確性得出該惡 意軟件的身份,則包含該惡意軟件的文件被報(bào)告為受到感染。在這種情況中,本發(fā) 明的進(jìn)一步分析是不必要的。在其它情況中,基本塊中的已解碼指令被轉(zhuǎn)換成可執(zhí) 行的等效且安全的程序代碼。這種轉(zhuǎn)換可從潛在惡意軟件直接執(zhí)行。或者,可使用 被"編譯"成可執(zhí)行程序代碼的體系結(jié)構(gòu)中立格式來(lái)執(zhí)行轉(zhuǎn)換。
根據(jù)本發(fā)明的另一方面,提供了一種用于安全地執(zhí)行經(jīng)轉(zhuǎn)換程序代碼的基本 塊的方法。本發(fā)明的這一方面包括確定經(jīng)轉(zhuǎn)換的程序代碼的基本塊在轉(zhuǎn)換之后是否 被更改。在發(fā)生更改的情況中,經(jīng)修改的基本塊在執(zhí)行之前被轉(zhuǎn)換。當(dāng)沒(méi)有發(fā)生更 改時(shí),不需要額外的轉(zhuǎn)換,且執(zhí)行現(xiàn)有的"經(jīng)編譯"的程序代碼??蓤?zhí)行程序代碼 能夠確定之前轉(zhuǎn)換的程序代碼是否作為執(zhí)行結(jié)果而被更改。曾被更改的程序代碼的 任何基本塊被丟棄并在執(zhí)行之前被再次轉(zhuǎn)換。當(dāng)執(zhí)行完成之后,當(dāng)前執(zhí)行點(diǎn)被更新, 且執(zhí)行控制被轉(zhuǎn)移給后續(xù)基本塊。然后重復(fù)基本塊的轉(zhuǎn)換和執(zhí)行直到惡意軟件被標(biāo) 識(shí)、中斷條件出現(xiàn)、或程序完成執(zhí)行。
附圖簡(jiǎn)述
通過(guò)結(jié)合附圖考慮參考以下詳細(xì)描述,本發(fā)明的前述方面和眾多伴隨的優(yōu)點(diǎn)
將更容易被領(lǐng)會(huì)且將更好地被理解,附圖中
圖1是示出可使用本發(fā)明來(lái)標(biāo)識(shí)的多形惡意軟件的組件的框圖2是根據(jù)本發(fā)明的適用于執(zhí)行動(dòng)態(tài)轉(zhuǎn)換并執(zhí)行程序代碼的計(jì)算設(shè)備的組件
的框圖3是根據(jù)本發(fā)明的利用體系結(jié)構(gòu)中立格式(neutral format)將潛在的惡意軟 件轉(zhuǎn)換成安全程序代碼的過(guò)程的框圖4是示出根據(jù)本發(fā)明的可用于將潛在的惡意軟件轉(zhuǎn)換成安全程序代碼的轉(zhuǎn) 換方法的示例性實(shí)施例的流程圖5是示出根據(jù)本發(fā)明的可用于執(zhí)行程序代碼的執(zhí)行方法的示例性實(shí)施例的 流程圖。
詳細(xì)描述根據(jù)本發(fā)明,提供了一種用于將與計(jì)算設(shè)備相關(guān)聯(lián)的潛在的惡意軟件轉(zhuǎn)換成 安全代碼的系統(tǒng)、方法和計(jì)算機(jī)可讀介質(zhì)。潛在的惡意軟件從包括但不限于本機(jī)
CPU程序代碼、平臺(tái)無(wú)關(guān).NET字節(jié)代碼、以及腳本程序代碼等的多種不同類(lèi)型的
源語(yǔ)言中的任何一種被轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的安全且功能上相等的程序代碼。
然后,所轉(zhuǎn)換的程序代碼被"編譯"回可由本機(jī)CPU執(zhí)行的程序代碼。在執(zhí)行之 前和/或期間,本發(fā)明使掃描器搜索存儲(chǔ)器中所存儲(chǔ)的惡意軟件。如果未檢測(cè)到惡 意軟件,則計(jì)算設(shè)備使CPU執(zhí)行經(jīng)轉(zhuǎn)換的程序代碼。然而,如果存儲(chǔ)潛在惡意軟 件的計(jì)算機(jī)存儲(chǔ)器在執(zhí)行期間被更改,則執(zhí)行可被中斷。在這種情況中,現(xiàn)在存儲(chǔ) 在存儲(chǔ)器中的新的潛在惡意軟件將在被執(zhí)行之前被轉(zhuǎn)換成安全程序代碼。
盡管將主要在專(zhuān)用計(jì)算機(jī)體系結(jié)構(gòu)和源語(yǔ)言的上下文中描述本發(fā)明,但相關(guān) 領(lǐng)域的技術(shù)人員和其他人將理解,本發(fā)明也可應(yīng)用于除所述以外的其它計(jì)算機(jī)體系 結(jié)構(gòu)或源語(yǔ)言。以下描述首先提供了可在其中實(shí)現(xiàn)本發(fā)明的系統(tǒng)的概觀(guān)。然后,描 述實(shí)現(xiàn)本發(fā)明的方法。此處提供的說(shuō)明性的示例不旨在是詳盡的,或?qū)⒈景l(fā)明限制 于所公開(kāi)的精確形式。類(lèi)似地,此處所述的任何步驟可與其它步驟或步驟的組合互 換,以便達(dá)到相同的結(jié)果。
現(xiàn)在參考圖2,以下旨在提供可在其中實(shí)現(xiàn)本發(fā)明的一個(gè)合適的惡意軟件檢測(cè) 系統(tǒng)200的示例性概觀(guān)。所示的惡意軟件檢測(cè)系統(tǒng)200包括中央處理單元202、掃 描器204、轉(zhuǎn)換引擎206、塊管理器208、編譯引擎210以及虛擬環(huán)境212。在本發(fā) 明的一個(gè)實(shí)施例中,虛擬環(huán)境212包括虛擬I/O系統(tǒng)214和虛擬存儲(chǔ)器216。而且, 如以下進(jìn)一步詳細(xì)描述的,轉(zhuǎn)換引擎206和編譯引擎210各自可支持一個(gè)或多個(gè)插 件模塊,諸如插件模塊218和220。在描述本發(fā)明的一個(gè)實(shí)施例的一般術(shù)語(yǔ)中,惡 意軟件檢測(cè)系統(tǒng)200的組件提供掃描器204檢測(cè)隱蔽惡意軟件所需的基礎(chǔ)架構(gòu)。而 且,惡意軟件檢測(cè)系統(tǒng)200的組件允許在執(zhí)行從潛在惡意軟件轉(zhuǎn)換的安全程序代碼 時(shí)對(duì)惡意軟件的快速解密和檢測(cè)。
如圖2中所示,惡意軟件檢測(cè)系統(tǒng)200包括CPU 202。本領(lǐng)域中的技術(shù)人員 及其他人將認(rèn)識(shí)到,CPU 202通過(guò)支持本機(jī)程序代碼的執(zhí)行來(lái)用作惡意軟件檢測(cè)系 統(tǒng)200的計(jì)算中心。用于檢測(cè)隱蔽惡意軟件的一種現(xiàn)有技術(shù)系統(tǒng)在包括虛擬CPU 的虛擬操作環(huán)境中"模擬"程序執(zhí)行。在模擬期間,基于在虛擬操作環(huán)境中所觀(guān)察 到的程序事件生成行為簽名。行為簽名適用于分析來(lái)確定所模擬的程序是否是惡意 軟件。在這種類(lèi)型的系統(tǒng)中,程序中的每一指令在虛擬CPU上被模擬。結(jié)果是, 模擬可能是耗時(shí)的,且與由本發(fā)明提供的惡意軟件檢測(cè)基礎(chǔ)架構(gòu)相比可能導(dǎo)致可觀(guān)的性能降級(jí)。例如,經(jīng)由循環(huán)為每一迭代在虛擬CPU上模擬循環(huán)中的程序指令, 即使程序指令的效果在之前迭代中已被觀(guān)察到。而且,程序在消費(fèi)顯著計(jì)算開(kāi)銷(xiāo)的
軟件實(shí)現(xiàn)的虛擬CPU上被模擬。作為對(duì)比,本發(fā)明在實(shí)際或基于硬件的CPU 202 上執(zhí)行程序代碼。為了確保惡意軟件不被執(zhí)行,潛在惡意軟件中的程序代碼在被執(zhí) 行之前被轉(zhuǎn)換成安全程序代碼。
如圖2中所示,惡意軟件檢測(cè)系統(tǒng)200包括被設(shè)計(jì)成檢測(cè)惡意軟件的掃描器 204。如本領(lǐng)域的技術(shù)人員及其他人所知的,眾多不同的軟件廠(chǎng)商在反病毒軟件中 包括被配置成標(biāo)識(shí)惡意軟件的程序代碼特征的掃描器。不幸的是,現(xiàn)有的掃描器未 被配置成結(jié)合在執(zhí)行之前將潛在惡意軟件轉(zhuǎn)換成安全程序代碼的系統(tǒng)一起工作。相 反,某些現(xiàn)有的掃描器與上述類(lèi)型的模擬系統(tǒng)一起工作。在這些系統(tǒng)中,掃描器增 加了附加的開(kāi)銷(xiāo),使得模擬過(guò)程將花費(fèi)不合理的時(shí)間量。然而,由本發(fā)明實(shí)現(xiàn)的軟 件例程向掃描器204提供迅速標(biāo)識(shí)諸如在運(yùn)行時(shí)"被打開(kāi)"(即,解密)或加載到 存儲(chǔ)器內(nèi)的惡意軟件等隱蔽惡意軟件所需的基礎(chǔ)架構(gòu)。
惡意軟件檢測(cè)系統(tǒng)200還包括被設(shè)計(jì)成將潛在惡意軟件轉(zhuǎn)換成體系結(jié)構(gòu)中立 程序代碼的轉(zhuǎn)換引擎206。更具體地,轉(zhuǎn)換引擎206可從按照包括但不限于本機(jī) CPU程序代碼、獨(dú)立于平臺(tái)的字節(jié)代碼以及腳本程序代碼等多種不同格式中的任 何一種的源語(yǔ)言對(duì)潛在的惡意軟件解碼。然后,己解碼程序代碼中的每一指令被轉(zhuǎn) 換成體系結(jié)構(gòu)中立格式。在轉(zhuǎn)換期間,已解碼的程序代碼可被分成基本塊。如本領(lǐng) 域中的技術(shù)人員及其他人所知的,基本塊是僅在序列的開(kāi)始處包含單個(gè)入口點(diǎn)且在 序列結(jié)尾處包含單個(gè)出口點(diǎn)的程序代碼序列。換言之,基本塊至多包含單條"跳轉(zhuǎn)" 指令。經(jīng)轉(zhuǎn)換的程序代碼的基本塊是本發(fā)明轉(zhuǎn)換并執(zhí)行潛在惡意軟件的單位。由于 程序代碼可從眾多源語(yǔ)言轉(zhuǎn)換,因此轉(zhuǎn)換引擎206支持諸如插件模塊218等插件模 塊。插件模塊提供用于將源語(yǔ)言的程序代碼轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的安全程序代
碼的邏輯。在替換實(shí)施例中,轉(zhuǎn)換引擎206將潛在惡意軟件直接從源語(yǔ)言轉(zhuǎn)換成可 被執(zhí)行的安全程序代碼。在此實(shí)施例中,不使用體系結(jié)構(gòu)中立格式。然而,體系結(jié) 構(gòu)中立格式在轉(zhuǎn)換引擎206被配置成從多種源語(yǔ)言轉(zhuǎn)換程序代碼的情況中簡(jiǎn)化了 轉(zhuǎn)換過(guò)程的實(shí)現(xiàn)。
惡意軟件檢測(cè)系統(tǒng)200還包括用于管理基本塊的執(zhí)行的塊管理器208。塊管理 器208被配置成分析基本塊,并構(gòu)建存儲(chǔ)關(guān)于不同基本塊之間的關(guān)系的信息的數(shù)據(jù) 結(jié)構(gòu)。當(dāng)執(zhí)行了經(jīng)轉(zhuǎn)換的程序代碼之后,塊管理器208中所包含的邏輯提供用于確 定何時(shí)轉(zhuǎn)換其它程序代碼的決策制定過(guò)程。在這點(diǎn)上,塊管理器208將參考并更新
10數(shù)據(jù)結(jié)構(gòu)中所存儲(chǔ)的數(shù)據(jù)。塊管理器208還包含用于確定何時(shí)應(yīng)由掃描器204對(duì)程 序代碼搜索惡意軟件的邏輯。
如圖2中所示,惡意軟件檢測(cè)系統(tǒng)200包括生成可由CPU 202執(zhí)行的程序代 碼的編譯引擎210。更具體地,由轉(zhuǎn)換引擎206生成的體系結(jié)構(gòu)中立程序代碼由編 譯引擎210編譯成體系結(jié)構(gòu)專(zhuān)用格式。由于可能需要對(duì)不同的體系結(jié)構(gòu)編譯程序代 碼,因此編譯引擎210支持插件模塊,諸如插件模塊220。插件模塊提供用于將體 系結(jié)構(gòu)中立程序代碼編譯成遵循由專(zhuān)用計(jì)算機(jī)體系結(jié)構(gòu)施加的約束的程序代碼的 邏輯。
如圖2中所示,惡意軟件檢測(cè)系統(tǒng)200還支持虛擬環(huán)境212,它包括虛擬IZO 系統(tǒng)214和虛擬存儲(chǔ)器216。由于虛擬環(huán)境的眾多功能對(duì)理解本發(fā)明而言不是重要 的,因此它們將不在此處詳細(xì)說(shuō)明。而且,因?yàn)樗鼈儗?duì)理解本發(fā)明而言不是重要的, 因此虛擬環(huán)境212中的眾多組件將不在圖2中示出。就本發(fā)明而言,虛擬環(huán)境212 提供關(guān)于潛在惡意軟件對(duì)資源的使用的信息。例如,塊管理器208提供用于確定何 時(shí)轉(zhuǎn)換程序代碼的決策制定過(guò)程。在這點(diǎn)上,塊管理器208可對(duì)虛擬環(huán)境212作出 調(diào)用以確定基本塊在執(zhí)行期間是否在存儲(chǔ)器中被更改。虛擬環(huán)境212被配置成向由
本發(fā)明實(shí)現(xiàn)的軟件例程提供關(guān)于資源使用的信息,包括存儲(chǔ)器分配中的改變。
如圖2中所示,惡意軟件檢測(cè)系統(tǒng)200的每一組件,例如中央處理單元202、 掃描器204、轉(zhuǎn)換引擎206、塊管理器208、編譯引擎210以及虛擬環(huán)境212被互 連且能夠與其它組件通信。如本領(lǐng)域的技術(shù)人員及其他人所知的,圖2是能夠執(zhí)行 由本發(fā)明實(shí)現(xiàn)的功能的一種惡意軟件檢測(cè)系統(tǒng)200的簡(jiǎn)化示例。惡意軟件檢測(cè)系統(tǒng) 200的實(shí)際實(shí)施例將具有未在圖2中示出或未在附隨的文字中描述的其它組件。而 且,圖2示出用于安全執(zhí)行經(jīng)轉(zhuǎn)換的程序代碼的一種組件體系結(jié)構(gòu),但其它組件體 系結(jié)構(gòu)也是可能的。
現(xiàn)在參考圖3,將描述為惡意軟件檢測(cè)的目的而由本發(fā)明實(shí)現(xiàn)以產(chǎn)生安全程序 代碼的組件和例程。圖3示出包括AMD-64可執(zhí)行代碼302、 X86-32可執(zhí)行代碼 304以及.NET字節(jié)代碼306的潛在惡意軟件的三個(gè)示例。圖3中還示出圖2中所 示的轉(zhuǎn)換引擎206、編譯引擎210、以及插件模塊218-220。 一般而言,轉(zhuǎn)換引擎 206和編譯引擎210 —起工作來(lái)產(chǎn)生執(zhí)行安全的程序代碼。圖3中所示的本發(fā)明的 實(shí)施例利用體系結(jié)構(gòu)中立格式來(lái)產(chǎn)生安全程序代碼。然而,在替換實(shí)施例中,潛在 惡意軟件302-306可無(wú)需利用體系結(jié)構(gòu)中立格式而被直接轉(zhuǎn)換成安全程序代碼。
動(dòng)態(tài)轉(zhuǎn)換一般被定義為用于將程序代碼從源語(yǔ)言轉(zhuǎn)化成目標(biāo)語(yǔ)言或格式的過(guò)程。程序代碼一般被轉(zhuǎn)換以便滿(mǎn)足目的。例如,某些現(xiàn)有的轉(zhuǎn)換器通過(guò)將指令集縮 減成較小但功能上相等的指令集來(lái)優(yōu)化程序代碼。作為另一示例,某些CPU支持 將程序代碼從由老計(jì)算機(jī)體系結(jié)構(gòu)所理解的語(yǔ)言轉(zhuǎn)換成最近開(kāi)發(fā)的語(yǔ)言,使得傳統(tǒng) 程序可在新計(jì)算設(shè)備上執(zhí)行。大多數(shù)現(xiàn)代轉(zhuǎn)換器是動(dòng)態(tài)的,這表現(xiàn)在轉(zhuǎn)化程序代碼 的過(guò)程在運(yùn)行時(shí)或當(dāng)程序代碼被執(zhí)行時(shí)"在運(yùn)行中"被執(zhí)行。實(shí)現(xiàn)動(dòng)態(tài)轉(zhuǎn)換的過(guò)程 被限于惡意軟件檢測(cè)的區(qū)域之外。然而,如圖3中所示,本發(fā)明提供了轉(zhuǎn)換引擎
206中的一般框架,以便為惡意軟件檢測(cè)的目的而將程序代碼從源語(yǔ)言(即,AMD 64位、X86 32位、以及.NET字節(jié)代碼)轉(zhuǎn)換成目標(biāo)格式(即,體系結(jié)構(gòu)中立格式)。 換言之,轉(zhuǎn)換引擎206不限于僅在兩種語(yǔ)言之間轉(zhuǎn)換程序代碼。相反,轉(zhuǎn)換引擎 206可被配置成支持從多種源語(yǔ)言轉(zhuǎn)換。在這一點(diǎn)上,插件模塊可被添加到轉(zhuǎn)換引 擎206來(lái)支持源語(yǔ)言與體系結(jié)構(gòu)中立格式之間的轉(zhuǎn)換。圖3中所示的這種類(lèi)型的源 語(yǔ)言應(yīng)被解釋為示例性而非限制性的。例如,本發(fā)明可被配置成從圖3中未示出的 腳本語(yǔ)言或體系結(jié)構(gòu)無(wú)關(guān)源語(yǔ)言轉(zhuǎn)換程序代碼。
在本發(fā)明的一個(gè)實(shí)際實(shí)施例中,插件模塊218支持滿(mǎn)足"X86" 32位指令集 要求的語(yǔ)言與體系結(jié)構(gòu)中立格式之間的轉(zhuǎn)換。在轉(zhuǎn)換過(guò)程期間,不僅程序代碼從源 語(yǔ)言轉(zhuǎn)換成使用目標(biāo)語(yǔ)言的功能上相等的代碼,而且程序代碼也變?yōu)?安全的" (即,如果執(zhí)行則不能夠引起對(duì)計(jì)算設(shè)備的損害)。例如,以下指令可使用源語(yǔ) 言——"X/Y"來(lái)實(shí)現(xiàn),其中"X"和"Y"是數(shù)字變量。如果"Y"等于值O,則 這種類(lèi)型的指令將引起程序崩潰。在這種情況中,指令被轉(zhuǎn)換成"只要Y^O則為 X/Y"。作為另一示例,插件模塊218轉(zhuǎn)換試圖訪(fǎng)問(wèn)諸如硬件設(shè)備、存儲(chǔ)器和寄存 器等資源的指令。如以上參考圖2所述的,結(jié)合維護(hù)虛擬資源的虛擬環(huán)境212來(lái)實(shí) 現(xiàn)本發(fā)明。在這種情況中,本發(fā)明轉(zhuǎn)換訪(fǎng)問(wèn)資源的指令,以便完成虛擬資源與實(shí)際 資源之間必需的映射。
如圖3中所示,當(dāng)潛在惡意軟件302-306被轉(zhuǎn)換成體系結(jié)構(gòu)中立程序代碼308 之后,編譯引擎210和插件模塊220將體系結(jié)構(gòu)中立程序代碼308 "編譯"成安全 程序代碼。在圖3中,安全程序代碼由安全程序代碼310、安全程序代碼312、以 及安全程序代碼314表示。如圖所示,安全程序代碼可取決于CPU202 (圖2)的 體系結(jié)構(gòu)使用多種不同格式中的任一種。如本領(lǐng)域中的技術(shù)人員及其他人所已知 的,編譯在傳統(tǒng)上被定義為將高級(jí)程序代碼轉(zhuǎn)換成可執(zhí)行代碼。就本發(fā)明而言,編 譯引擎210從體系結(jié)構(gòu)中立程序代碼308生成可執(zhí)行程序代碼。在本發(fā)明的一個(gè)實(shí) 施例中,體系結(jié)構(gòu)中立程序代碼308是二進(jìn)制格式的。因此,由編譯引擎210執(zhí)行的"編譯"被定義為從體系結(jié)構(gòu)中立二進(jìn)制代碼生成可執(zhí)行程序代碼。而且,編譯 引擎210提供用于將程序代碼從體系結(jié)構(gòu)中立格式"編譯"成滿(mǎn)足專(zhuān)用計(jì)算機(jī)體系 結(jié)構(gòu)的約束的可執(zhí)行代碼的一般框架。換言之,編譯引擎210不限于在兩種格式之
間"編譯"程序代碼。相反,取決于CPU 202的體系結(jié)構(gòu),編譯引擎210可將體 系結(jié)構(gòu)中立程序代碼308編譯成多種格式中的任一種的程序代碼。在這點(diǎn)上,由編 譯引擎210提供的功能可由插件模塊擴(kuò)展。在本發(fā)明的一個(gè)實(shí)際實(shí)施例中,插件模 塊220支持將體系結(jié)構(gòu)中立程序代碼"編譯"成滿(mǎn)足"X86" 32位指令集的約束的 程序代碼。
圖4是示出根據(jù)本發(fā)明形成的轉(zhuǎn)換方法400的一個(gè)示例性實(shí)施例的流程圖。 響應(yīng)于接收?qǐng)?zhí)行潛在惡意軟件的請(qǐng)求,轉(zhuǎn)換方法400順序分析潛該惡意軟件中的指 令。當(dāng)遇到作為之前未由本發(fā)明分析的基本塊中的第一條指令的指令時(shí),轉(zhuǎn)換方法 400使掃描器執(zhí)行對(duì)基本塊中的惡意軟件的搜索。所選指令被解碼成描述該指令屬 性的數(shù)據(jù)集。然而,該數(shù)據(jù)集被用于將所選指令轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的安全且 功能上相等的程序代碼。當(dāng)程序代碼的基本塊被轉(zhuǎn)換成體系結(jié)構(gòu)中立格式之后,經(jīng) 轉(zhuǎn)換的程序代碼被"編譯"成可執(zhí)行代碼。繼續(xù)參考圖l-3及其所伴隨的描述,現(xiàn) 在將描述圖4中所示的示例性轉(zhuǎn)換方法400。
在步驟402處,轉(zhuǎn)換方法400保持空閑,并等待執(zhí)行潛在惡意軟件的請(qǐng)求。 如本領(lǐng)域中的技術(shù)人員及其他人所知的,可經(jīng)由各種不同的機(jī)制發(fā)起執(zhí)行潛在惡意 軟件的請(qǐng)求。例如,計(jì)算機(jī)用戶(hù)可通過(guò)在與程序相關(guān)聯(lián)的圖標(biāo)上"雙擊"而發(fā)出啟 動(dòng)程序執(zhí)行的請(qǐng)求。作為另一示例,計(jì)算機(jī)用戶(hù)可通過(guò)從下拉式菜單或其它基于圖 形的輸入系統(tǒng)發(fā)出"打開(kāi)文件"命令來(lái)發(fā)起與文件相關(guān)聯(lián)的程序的執(zhí)行。然而,如 本領(lǐng)域中的技術(shù)人員及其他人所知的,以上提供的示例應(yīng)被解釋為示例性而非限制 性的,因?yàn)閷?duì)發(fā)出執(zhí)行潛在惡意軟件的請(qǐng)求而言存在眾多不同的機(jī)制。
為了滿(mǎn)足步驟402處接收的請(qǐng)求,操作系統(tǒng)的現(xiàn)有組件在步驟404處執(zhí)行動(dòng) 作來(lái)為執(zhí)行潛在惡意軟件作準(zhǔn)備。 一般,為了執(zhí)行程序,操作系統(tǒng)為程序初始化地 址空間(即,存儲(chǔ)器),并將所需程序代碼復(fù)制到經(jīng)初始化的地址空間內(nèi)。然而, 如本領(lǐng)域中的技術(shù)人員及其他人所知的,惡意軟件可能通過(guò)在惡意軟件簽名可被標(biāo) 識(shí)之前對(duì)有效負(fù)載解密或"打開(kāi)"來(lái)在執(zhí)行期間更改存儲(chǔ)器中的數(shù)據(jù)。 一般,惡意 軟件有效負(fù)載作為對(duì)已經(jīng)存儲(chǔ)在存儲(chǔ)器中的數(shù)據(jù)的算術(shù)和/或邏輯運(yùn)算的應(yīng)用的結(jié) 果而被"打開(kāi)"。在任何情況中,與潛在惡意軟件相關(guān)聯(lián)的程序代碼在步驟404 處被加載到存儲(chǔ)器中。
13在步驟406處,轉(zhuǎn)換方法400初始化描述潛在惡意軟件中包括基本塊之間的 執(zhí)行流在內(nèi)的基本塊屬性的數(shù)據(jù)結(jié)構(gòu)。如以下將參考圖5進(jìn)一步詳細(xì)描述的,本發(fā) 明一般執(zhí)行程序代碼的單位是基本塊。在步驟406處,使用描述每一基本塊的信息 初始化數(shù)據(jù)結(jié)構(gòu)。例如,標(biāo)識(shí)被調(diào)度成在當(dāng)前基本塊之后執(zhí)行的基本塊的后繼基本 塊并將其存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中。而且,標(biāo)識(shí)在基本塊之間發(fā)生的控制轉(zhuǎn)移的類(lèi)型(即, 條件和非條件分支等)并將其存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中。在這一點(diǎn)上,標(biāo)識(shí)從其它基本塊 中接受控制或?qū)⒖刂妻D(zhuǎn)移給另一基本塊的指令。
在步驟408處,選擇將由轉(zhuǎn)換方法400分析的指令。如前所述,程序中的指
令以定義的順序被執(zhí)行。然而,諸如分支等某些指令通過(guò)在用于標(biāo)識(shí)被調(diào)度來(lái)執(zhí)行 的下一指令的寄存器中置新值來(lái)中斷正常的執(zhí)行順序。如將在以下進(jìn)一步詳細(xì)描述 的,中斷正常執(zhí)行順序的指令標(biāo)記基本塊的末尾。由轉(zhuǎn)換方法400執(zhí)行的分析遵循 程序執(zhí)行時(shí)發(fā)生的同一執(zhí)行流。然而,分析以及之后執(zhí)行程序代碼的基本單位是基 本塊。由于可使用本領(lǐng)域中公知的技術(shù)來(lái)標(biāo)識(shí)位于執(zhí)行流中的指令,因此將不在此 處提供對(duì)轉(zhuǎn)換方法在步驟408處使用的技術(shù)的進(jìn)一步描述。
如圖4中所示,轉(zhuǎn)換方法400在步驟410處確定步驟408處所選的指令是否 是基本塊中之前未被本發(fā)明分析過(guò)的第一條指令。在本發(fā)明的一個(gè)實(shí)施例中,位于 程序入口點(diǎn)處或位于跳轉(zhuǎn)指令的目的地地址處的指令被標(biāo)識(shí)為基本塊中的第一條 指令。而且,轉(zhuǎn)換方法400通過(guò)將所選指令的地址與之前分析過(guò)的每一基本塊(如 有)中的第一條指令的地址進(jìn)行比較來(lái)確定基本塊之前是否已被轉(zhuǎn)換成安全程序代 碼。如果所選指令不匹配之前分析的基本塊中的第一條指令的地址,則所選指令是 之前未被轉(zhuǎn)換成安全程序代碼的新基本塊的開(kāi)頭,且轉(zhuǎn)換方法400前進(jìn)至步驟412。 反之,如果所選指令不是基本塊中的第一條指令或者當(dāng)前基本塊之前已被分析,則 轉(zhuǎn)換方法400前進(jìn)至步驟414。
在步驟412處,在步驟406處初始化的數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建步驟410處所標(biāo)識(shí)的 基本塊的條目。如前所述,由本發(fā)明維護(hù)的數(shù)據(jù)結(jié)構(gòu)描述了被轉(zhuǎn)換成安全程序代碼 的基本塊的屬性。例如,每一基本塊的起始地址以及描述基本塊的屬性的其它數(shù)據(jù) 被存儲(chǔ)在該數(shù)據(jù)結(jié)構(gòu)中。而且,步驟412處在數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建條目包括實(shí)例化與基 本塊相關(guān)聯(lián)的某些變量。例如,實(shí)例化指示是否已對(duì)基本塊掃描惡意軟件的變量(后 文中稱(chēng)為"掃描變量")以及指示基本塊是否被轉(zhuǎn)換成安全程序代碼的變量(后文 中稱(chēng)為"轉(zhuǎn)換變量")并將其存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中。當(dāng)實(shí)例化這些變量時(shí),在步驟 412處,它們的值指示尚未對(duì)基本塊掃描惡意軟件或基本塊尚未被轉(zhuǎn)換成安全程序代碼。
在步驟414處,轉(zhuǎn)換方法400確定是否需要在執(zhí)行包含所選指令的基本塊前 對(duì)其搜索惡意軟件。如上所述,"掃描"變量與每一基本塊相關(guān)聯(lián),它指示之前是 否對(duì)該基本塊掃描過(guò)惡意軟件。在步驟414處,轉(zhuǎn)換方法400標(biāo)識(shí)與當(dāng)前基本塊相 關(guān)聯(lián)的變量的值。如果之前未對(duì)當(dāng)前基本塊搜索惡意軟件,則轉(zhuǎn)換方法400前進(jìn)至 步驟416。反之,如果之前搜索過(guò)該基本塊,則轉(zhuǎn)換方法400前進(jìn)至下述步驟426。
在步驟416處,轉(zhuǎn)換方法400使得為步驟408處所選指令所在的基本塊執(zhí)行 掃描。在本發(fā)明的一個(gè)實(shí)施例中,掃描器204 (圖2)中的軟件實(shí)現(xiàn)的例程對(duì)當(dāng)前 基本塊搜索惡意軟件。如上所述,大多數(shù)防病毒軟件應(yīng)用程序或掃描器通過(guò)將數(shù)據(jù) 模式與惡意軟件"簽名"進(jìn)行匹配來(lái)搜索惡意軟件。然而,當(dāng)數(shù)據(jù)被"打開(kāi)"(即 解密)或在執(zhí)行期間下載到存儲(chǔ)器中時(shí),隨著某些隱蔽惡意軟件的出現(xiàn)而出現(xiàn)現(xiàn)有 反病毒軟件的漏洞。在這種情況中,潛在惡意軟件中的程序代碼的執(zhí)行繼續(xù),而沒(méi) 有執(zhí)行對(duì)惡意軟件的附加掃描。換言之,當(dāng)數(shù)據(jù)在運(yùn)行時(shí)被"打開(kāi)"時(shí),執(zhí)行不會(huì) 被中斷。然而,如將在以下參考圖5更詳細(xì)描述的,本發(fā)明當(dāng)數(shù)據(jù)在運(yùn)行時(shí)被"打 開(kāi)"時(shí)會(huì)中斷程序執(zhí)行。因此,在步驟416處,在惡意軟件有效負(fù)載被"打開(kāi)"或 加載到存儲(chǔ)器中之后,掃描器204可搜索隱蔽惡意軟件。而且,在當(dāng)前基本塊被掃 描之后,在步驟416處,轉(zhuǎn)換方法400設(shè)置與當(dāng)前基本塊相關(guān)聯(lián)的"掃描"變量的 值來(lái)指示已對(duì)當(dāng)前基本塊掃描了惡意軟件。
如圖4中所示,在步驟418處,轉(zhuǎn)換方法400確定當(dāng)前基本塊在步驟416處 是否被標(biāo)識(shí)為受到惡意軟件感染。如果標(biāo)識(shí)了惡意軟件感染,則方法400進(jìn)而在步 驟420處使用本領(lǐng)域中公知的技術(shù)向用戶(hù)報(bào)告感染。如果未標(biāo)識(shí)惡意軟件感染,則 轉(zhuǎn)換方法400前進(jìn)至下述步驟426。
在步驟422處,轉(zhuǎn)換方法400確定是否以足夠的精確性得出惡意軟件的身份。 當(dāng)檢測(cè)到惡意軟件時(shí),通??蓮膼阂廛浖暮灻蚱渌匦灾忻黠@得出惡意軟件的 身份。然而,在某些情況中,惡意軟件的感染是顯而易見(jiàn)的,但不知道惡意軟件的 確切身份。例如,某些惡意軟件具有難以區(qū)分的變體。在任何情況中,如果基本塊 受到感染,且以足夠的精確性得出惡意軟件的身份,則轉(zhuǎn)換方法400前進(jìn)至步驟 424,在那里它終止。反之,如果不能以足夠的精確性得出惡意軟件的身份,則轉(zhuǎn) 換方法400前進(jìn)至步驟426。
在步驟426處,轉(zhuǎn)換方法400確定包含所選指令的基本塊在被執(zhí)行之前是否 需要被轉(zhuǎn)換成安全程序代碼。如前所述,本發(fā)明使"轉(zhuǎn)換"變量與每一基本塊相關(guān)聯(lián),該變量指示該基本塊之前是否被轉(zhuǎn)換并被"編譯"成安全且可執(zhí)行的程序代碼。 如果基本塊之前未被轉(zhuǎn)換并"編譯"成可執(zhí)行且安全的程序代碼,則轉(zhuǎn)換變量指示
該基本塊是潛在惡意軟件。在步驟426處,轉(zhuǎn)換方法400標(biāo)識(shí)當(dāng)前基本塊的轉(zhuǎn)換變 量的值。如果當(dāng)前基本塊是潛在惡意軟件,則轉(zhuǎn)換方法400前進(jìn)至步驟428。反之, 如果基本塊之前被轉(zhuǎn)換并被"編譯"成可執(zhí)行且安全的程序代碼,則轉(zhuǎn)換方法400 前進(jìn)至步驟440,在那里它終止。在這種情況中,基本塊可根據(jù)以下參考圖5描述 的執(zhí)行方法500被安全地執(zhí)行。
如圖4中所示,轉(zhuǎn)換方法400在步驟428處將所選指令從源語(yǔ)言(g卩,本機(jī) CPU程序代碼、平臺(tái)無(wú)關(guān)字節(jié)代碼、腳本程序代碼等)解碼成描述該指令的數(shù)據(jù) 集。該數(shù)據(jù)集包括但不限于,指令的長(zhǎng)度和類(lèi)型、操作數(shù)的個(gè)數(shù)和類(lèi)型、執(zhí)行該指 令所需的特權(quán)級(jí)別。在步驟428處,將所選指令從源語(yǔ)言解碼成描述指令的數(shù)據(jù)集, 以使由所選指令提供的功能可被轉(zhuǎn)換成體系結(jié)構(gòu)中立格式。由于所選指令可使用本 領(lǐng)域中公知的技術(shù)來(lái)解碼,因此將不在此處提供對(duì)本發(fā)明所使用的技術(shù)的進(jìn)一步描 述。
在步驟430處,所選指令被轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的安全程序代碼。這種 轉(zhuǎn)換可由轉(zhuǎn)換引擎206的插件模塊,諸如插件模塊218 (圖2)來(lái)執(zhí)行。在描述本 發(fā)明的一個(gè)示例性實(shí)施例的一般情況中,轉(zhuǎn)換方法400將正被分析的所選指令轉(zhuǎn)換 成體系結(jié)構(gòu)中立格式的安全指令。為了執(zhí)行這種轉(zhuǎn)換,可用于"打開(kāi)"(即,解密) 或?qū)е聬阂廛浖δ艿拿恳活?lèi)指令由轉(zhuǎn)換引擎206的插件模塊中所包含的例程轉(zhuǎn) 換成安全程序代碼。在這一點(diǎn)上,實(shí)現(xiàn)算術(shù)運(yùn)算(即,"加"、"乘"等)、逐位 運(yùn)算(g卩,"與"、"或"、"異或"等)、使用硬件設(shè)備的輸入/輸出(即,"讀"、 "寫(xiě)"等)等的指令被轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的功能相等的程序代碼。例如,本 發(fā)明使用包括虛擬I/0系統(tǒng)214的虛擬環(huán)境212 (圖2)中的資源。因此,如果所 選指令試圖訪(fǎng)問(wèn)I/0設(shè)備,則方法400轉(zhuǎn)換該指令,以使輸入和輸出被發(fā)送給虛擬 I/O系統(tǒng)214。盡管描述了本發(fā)明轉(zhuǎn)換的指令的具體示例,但所提供的示例應(yīng)該被 解釋為示例性而非限制性的。
如圖4中所示,轉(zhuǎn)換方法400在步驟432處確定步驟408處所選的指令是否 是基本塊中的最后一條指令。本領(lǐng)域中的技術(shù)人員及其他人可以認(rèn)識(shí)到,基本塊以 諸如跳轉(zhuǎn)指令等單個(gè)退出點(diǎn)結(jié)束。在步驟432處,轉(zhuǎn)換方法400確定所分析的指令 是否是基本塊中的最后一條指令。由于基本塊中的最后一條指令可使用本領(lǐng)域中公 知的技術(shù)來(lái)標(biāo)識(shí),因此將不在此處更詳細(xì)描述本發(fā)明所使用的技術(shù)的進(jìn)一步描述。如果所分析的指令是當(dāng)前基本塊中的最后一條指令,則轉(zhuǎn)換方法400前進(jìn)至步驟
432。反之,如果所選指令不是基本塊中的最后一條指令,則轉(zhuǎn)換方法400回到步 驟408,并重復(fù)步驟408到432直到選擇了當(dāng)前基本塊中的最后一條指令。
如圖4中所示,在步驟434處,轉(zhuǎn)換方法400使當(dāng)前基本塊被"編譯"成可 執(zhí)行程序代碼。如本領(lǐng)域的技術(shù)人員及其他人所知的,編譯器是獲取以源語(yǔ)言編寫(xiě) 的程序代碼并生成為特定體系結(jié)構(gòu)設(shè)計(jì)的可執(zhí)行程序代碼的程序。 一般,編譯器首 先從源語(yǔ)言逐個(gè)解析所有的程序代碼。然后,在一個(gè)或多個(gè)相繼階段,編譯器以確 保指令正確引用其它指令的方式來(lái)構(gòu)建可執(zhí)行代碼。由編譯器產(chǎn)生的輸出滿(mǎn)足計(jì)算 設(shè)備的體系結(jié)構(gòu)要求,并允許CPU順序執(zhí)行指令。對(duì)于本發(fā)明,在步驟434處, 轉(zhuǎn)換方法400從體系結(jié)構(gòu)中立程序代碼生成可執(zhí)行程序代碼。由于體系結(jié)構(gòu)中立程 序代碼是二進(jìn)制格式,因此在步驟434處進(jìn)行的"編譯"涉及從體系結(jié)構(gòu)中立二進(jìn) 制代碼生成可執(zhí)行程序代碼。而且,如將在以下進(jìn)一步詳細(xì)描述的,在"編譯"期 間,可將一條或多條指令添加到已編譯代碼中。在本發(fā)明的一個(gè)實(shí)際實(shí)施例中,編 譯引擎210的插件模塊220支持將體系結(jié)構(gòu)中立程序代碼"編譯"成滿(mǎn)足"X86" 32位指令集的約束的程序代碼。然后,轉(zhuǎn)換方法前進(jìn)至步驟436,在那里它終止。
在步驟436處,轉(zhuǎn)換方法400確定"已編譯"程序代碼中的最后一條指令是 否是跳轉(zhuǎn)指令。 一般,基本塊以將執(zhí)行控制轉(zhuǎn)移給當(dāng)前基本塊以外的程序代碼的跳 轉(zhuǎn)指令結(jié)束。在步驟430處,本發(fā)明將所遇到的跳轉(zhuǎn)指令轉(zhuǎn)換成在基本塊執(zhí)行之后 使執(zhí)行控制返回給塊管理器208 (圖2)的新跳轉(zhuǎn)指令。在基本塊被執(zhí)行之前,塊 管理器208執(zhí)行上述包括使掃描器204搜索惡意軟件在內(nèi)的一些動(dòng)作。然而,程序 代碼的基本塊可由本發(fā)明為惡意軟件檢測(cè)的目的而被拆分、合并或以其它方式處 理。例如,如將在以下參考圖5更詳細(xì)描述的,當(dāng)執(zhí)行使得存儲(chǔ)器中的程序代碼在 當(dāng)前執(zhí)行點(diǎn)之后在基本塊中改變時(shí),在沒(méi)有對(duì)該基本塊掃描惡意軟件的情況下繼續(xù) 執(zhí)行可能導(dǎo)致不合需要的功能。在這種情況中,基本塊被"拆分"成兩個(gè)或更多的 基本塊。結(jié)果,在這種或其它情況中,轉(zhuǎn)換方法400將遇到不以跳轉(zhuǎn)指令結(jié)束的基 本塊。如果已編譯程序代碼中的最后一條指令是跳轉(zhuǎn)指令,則程序控制將在當(dāng)前基 本塊執(zhí)行之后被返回給塊管理器208。在這種情況中,轉(zhuǎn)換方法400前進(jìn)至塊440, 在那里它終止。反之,如果已編譯程序代碼中的最后一條指令不是跳轉(zhuǎn)指令,則在 當(dāng)前基本塊執(zhí)行之后控制將不會(huì)正常地返回給塊管理器208。在這種情況中,轉(zhuǎn)換 方法400前進(jìn)至步驟438。
在步驟438處,向"已編譯"程序代碼添加在基本塊的執(zhí)行完成之后使程序控制返回給塊管理器208 (圖2)的指令。本發(fā)明管理程序執(zhí)行流的各方面,使得
加載到存儲(chǔ)器中的潛在惡意軟件在執(zhí)行之前可被掃描并被轉(zhuǎn)換成安全程序代碼。如
前所述,塊管理器208控制執(zhí)行流。因此,在步驟438處向已編譯程序代碼添加在 基本塊執(zhí)行完成之后使程序控制返回給塊管理器208的指令。
在本發(fā)明的替換實(shí)施例中,向"已編譯"程序代碼添加不會(huì)將程序控制轉(zhuǎn)移 給塊管理器208的指令。在該實(shí)施例中,如果被調(diào)度來(lái)執(zhí)行的下一基本塊是干凈的, 例如之前曾掃描過(guò)惡意軟件且不會(huì)作為執(zhí)行結(jié)果而被更改,則在步驟438添加將程 序控制轉(zhuǎn)移給調(diào)度來(lái)執(zhí)行的下一基本塊的指令。
參考圖4描述的轉(zhuǎn)換方法400中的步驟也可按照不同于所示的順序執(zhí)行。而 且,某些步驟可被添加或可從轉(zhuǎn)換方法400移除,而不背離本發(fā)明的范圍。例如, 當(dāng)潛在惡意軟件的基本塊被轉(zhuǎn)換成程序代碼之后,安全程序代碼可被"優(yōu)化",即 重新配置,以便迅速執(zhí)行。因此,圖4中所述的方法400僅提供可在其中實(shí)現(xiàn)本發(fā) 明的實(shí)施例的方式的一個(gè)示例。
圖5是可結(jié)合以上參考圖4所述的轉(zhuǎn)換400使用以執(zhí)行已轉(zhuǎn)換程序代碼的基 本塊的一個(gè)示例性執(zhí)行方法500的流程圖。特別地,在基于硬件的CPU上順序選 擇并執(zhí)行基本塊中的指令。在某些情況中,存儲(chǔ)器中的程序代碼被"打開(kāi)"(即, 解密),且之前轉(zhuǎn)換的程序代碼被更改。在這種情況中,曾被更改的基本塊為"臟", 例如需要在被執(zhí)行之前對(duì)其搜索惡意軟件并被轉(zhuǎn)換成安全程序代碼。繼續(xù)參考圖 1-4以及伴隨的描述,現(xiàn)在將描述圖5中所示的示例性執(zhí)行方法500。
在步驟502處,執(zhí)行方法500保持空閑并等待,直到已轉(zhuǎn)換程序代碼準(zhǔn)備好 被執(zhí)行。在本發(fā)明的實(shí)際實(shí)施例中,當(dāng)轉(zhuǎn)換方法400 (圖4)完成基本塊的轉(zhuǎn)換時(shí), 已轉(zhuǎn)換程序代碼準(zhǔn)備好被執(zhí)行。
在步驟504處,執(zhí)行方法500選擇被調(diào)度來(lái)執(zhí)行的基本塊中的指令。在本發(fā) 明的一個(gè)實(shí)施例中,已被轉(zhuǎn)換成安全程序代碼的基本塊被存儲(chǔ)在用于臨時(shí)存儲(chǔ)的 "緩沖區(qū)"或存儲(chǔ)區(qū)中。分配給"緩沖區(qū)"的存儲(chǔ)器地址可能不會(huì)被潛在惡意軟件 更改。對(duì)所選的每一指令,執(zhí)行方法500使得指令被執(zhí)行。然后作出執(zhí)行是否導(dǎo)致 中斷條件的判斷。在所選指令導(dǎo)致中斷條件的情況中,執(zhí)行方法500標(biāo)識(shí)中斷條件 的來(lái)源。在某些情況中,中斷條件源于存儲(chǔ)器中正被"打開(kāi)"(即,解密)的程序 代碼。在這種情況中,曾被更改或重寫(xiě)的基本塊在被執(zhí)行之前被重新轉(zhuǎn)換成安全程 序代碼。
在步驟506處,執(zhí)行方法500使所選指令被執(zhí)行。如本領(lǐng)域的技術(shù)人員及其他人所知的,CPU的主要用途是執(zhí)行指令。因此,多種市場(chǎng)上銷(xiāo)售的CPU中的任
一種可用于實(shí)現(xiàn)執(zhí)行方法500的這一方面。 一般,CPU遵循"取出并執(zhí)行"周期,
其中指令被順序地從存儲(chǔ)器中"取出"然后被"執(zhí)行"。對(duì)于本發(fā)明,從緩沖區(qū)而 非存儲(chǔ)潛在惡意軟件的存儲(chǔ)器位置中"取出"指令。如上所述,緩沖區(qū)包含可被安 全執(zhí)行而不會(huì)使計(jì)算設(shè)備受到惡意軟件的影響的已轉(zhuǎn)換程序代碼。
在執(zhí)行期間,方法500確定所選指令是否試圖執(zhí)行非法或特許操作。例如, 所選指令可能試圖執(zhí)行數(shù)字除以0的算術(shù)運(yùn)算或訪(fǎng)問(wèn)特許存儲(chǔ)器位置。在本發(fā)明的 一個(gè)實(shí)施例中,從潛在惡意軟件轉(zhuǎn)換的安全程序代碼被配置成使得程序代碼能夠檢 測(cè)在執(zhí)行期間出現(xiàn)的出錯(cuò)條件并中斷執(zhí)行。如果在執(zhí)行期間標(biāo)識(shí)了出錯(cuò)條件,則之 前開(kāi)發(fā)的異常處理程序?qū)⒃噲D從出錯(cuò)條件恢復(fù)。如本領(lǐng)域的技術(shù)人員及其他人所知 的,異常處理程序是使用處理中斷的結(jié)構(gòu)化方法的事件驅(qū)動(dòng)的例程。在某些情況中, 出錯(cuò)條件是可恢復(fù)的,且程序執(zhí)行可在遇到中斷條件之后恢復(fù)。在其它情況中,中 斷條件是臨界的,且程序執(zhí)行在完成之前停止。然而,在出錯(cuò)條件可恢復(fù)的情況中, 在程序控制被轉(zhuǎn)移給異常處理程序之前,存儲(chǔ)恢復(fù)執(zhí)行所必需的信息。
如圖5中所示,在步驟508處,當(dāng)所選指令被執(zhí)行之后,執(zhí)行方法500確定 作為執(zhí)行結(jié)果是否導(dǎo)致了中斷條件。中斷條件可在不同的情況中出現(xiàn),包括但不限 于當(dāng)執(zhí)行導(dǎo)致(1)當(dāng)前基本塊中執(zhí)行點(diǎn)之后的數(shù)據(jù)被更改;以及(2)被調(diào)度來(lái)將 執(zhí)行的后續(xù)基本塊中的數(shù)據(jù)被更改時(shí)的情況。如將在以下更詳細(xì)描述的,執(zhí)行方法 500有差別地處理這些中斷條件。如果在步驟508處檢測(cè)到中斷條件,則執(zhí)行方法 500前進(jìn)至如下所述的框512。反之,如果未在步驟508處檢測(cè)到中斷條件,則執(zhí) 行方法500前進(jìn)至步驟510。
在步驟510處,執(zhí)行方法500確定是否當(dāng)前基本塊中的所有指令均已被執(zhí)行。 如前所述,本發(fā)明執(zhí)行程序代碼的基本單位是基本塊。如果當(dāng)前基本塊中的所有指 令都已被執(zhí)行,則執(zhí)行方法500前進(jìn)至下述步驟520。反之,如果當(dāng)前基本塊中還 有未被執(zhí)行的指令,則方法500回到步驟504,并重復(fù)步驟504到510直到當(dāng)前基 本塊中的所有指令均被執(zhí)行。
在步驟512處,執(zhí)行方法500確定步驟508處所標(biāo)識(shí)的中斷條件是否需要立 即轉(zhuǎn)換程序代碼。例如,在執(zhí)行導(dǎo)致潛在惡意軟件被"打開(kāi)"(即,解密)使得當(dāng) 前基本塊中被調(diào)度來(lái)在所選指令之后執(zhí)行的程序代碼被更改的情況中,在執(zhí)行恢復(fù)
之前執(zhí)行對(duì)被更改的程序代碼的轉(zhuǎn)換。如前參考圖4所述的,程序代碼的基本塊可 由本發(fā)明為惡意軟件檢測(cè)的目的而被拆分、合并或以其它方式處理。在當(dāng)前基本塊中當(dāng)前執(zhí)行點(diǎn)之后的程序代碼被更改的情況中,該基本塊被拆分成兩個(gè)基本塊;第 一個(gè)塊包含已經(jīng)執(zhí)行的程序代碼,第二個(gè)塊包含所選指令之后的程序代碼。如以下 進(jìn)一步詳細(xì)描述的,對(duì)第二基本塊掃描惡意軟件,并在執(zhí)行之前將其轉(zhuǎn)換成安全程
序代碼。如果不需要立即轉(zhuǎn)換程序代碼,則執(zhí)行方法500前進(jìn)至下述的步驟516。 反之,如果需要立即轉(zhuǎn)換程序代碼,則執(zhí)行方法500前進(jìn)至步驟514。
在步驟514處,執(zhí)行方法500使得基本塊被掃描并被轉(zhuǎn)換成安全程序代碼。 更具體地,如果到達(dá)步驟514,則基于當(dāng)前執(zhí)行點(diǎn)將基本塊拆分成兩個(gè)基本塊。包 含被調(diào)度來(lái)在所選指令之后執(zhí)行的程序代碼的基本塊被標(biāo)記為在執(zhí)行之前需要掃 描并轉(zhuǎn)換成安全程序代碼。以上參考圖4描述了用于將程序代碼的基本塊轉(zhuǎn)換成安 全程序代碼的方法的一個(gè)實(shí)施例。然后,執(zhí)行方法500前進(jìn)至下述步驟520。
在步驟516處,執(zhí)行方法500確定是否因?yàn)楸徽{(diào)度來(lái)在當(dāng)前基本塊之后執(zhí)行 的隨后基本塊中的程序代碼作為執(zhí)行結(jié)果而被更改而導(dǎo)致步驟508處所標(biāo)識(shí)的中 斷條件。例如,在執(zhí)行所選指令使程序代碼"打開(kāi)"(即,解密)使得后續(xù)基本塊 中的數(shù)據(jù)被更改的情況中,則在執(zhí)行該后續(xù)基本塊之前對(duì)該其搜索惡意軟件并將其 轉(zhuǎn)換成安全程序代碼。如果因?yàn)楹罄m(xù)基本塊中的程序代碼被更改而導(dǎo)致步驟506 處標(biāo)識(shí)的中斷條件,則執(zhí)行方法500前進(jìn)至步驟518。反之,如有由于一不同的原 因而導(dǎo)致中斷條件,則執(zhí)行方法500前進(jìn)至下述步驟520。
在步驟518處,執(zhí)行方法500標(biāo)記作為所選指令的執(zhí)行結(jié)果而被更改的基本 塊,以便在這些基本塊執(zhí)行之前對(duì)其搜索惡意軟件并將其轉(zhuǎn)換成安全程序代碼。如 參考圖4所述(步驟412), 一掃描變量和轉(zhuǎn)換變量與每一基本塊相關(guān)聯(lián)。這些變 量指示是否對(duì)基本塊搜索了惡意軟件或者它們是否已被轉(zhuǎn)換成安全程序代碼。在步 驟518處,執(zhí)行方法500改變與作為執(zhí)行結(jié)果而被更改的每一基本塊相關(guān)聯(lián)的變量 的值,以指示這些基本塊需要執(zhí)行之前針掃描惡意軟件并轉(zhuǎn)換成安全程序代碼。
在步驟520處,執(zhí)行方法500使步驟406 (圖4)處初始化的數(shù)據(jù)結(jié)構(gòu)被更新。 如前所述,本發(fā)明使用數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤基本塊之間的執(zhí)行流。當(dāng)實(shí)現(xiàn)本發(fā)明的這一 方面時(shí),塊管理器208 (圖2)獲取執(zhí)行的控制,并對(duì)數(shù)據(jù)結(jié)構(gòu)執(zhí)行更新。本領(lǐng)域 的技術(shù)人員及其他人可以認(rèn)識(shí)到,使用執(zhí)行方法500執(zhí)行基本塊可導(dǎo)致原始執(zhí)行流 改變。例如,執(zhí)行基本塊可導(dǎo)致加載到存儲(chǔ)器中的數(shù)據(jù)被之前解密的數(shù)據(jù)更改。顯 然,在這種情況中,改變了基本塊之間的原始執(zhí)行流。結(jié)果,執(zhí)行方法500更新數(shù) 據(jù)結(jié)構(gòu)來(lái)反映作為執(zhí)行結(jié)果而發(fā)生的改變。 一般,被調(diào)度來(lái)執(zhí)行的下一基本塊然后 將根據(jù)轉(zhuǎn)換方法400和執(zhí)行方法500被轉(zhuǎn)換成安全程序代碼并被執(zhí)行。然后,執(zhí)行方法500前進(jìn)至步驟522,在那里它終止。
盡管示出和描述了本發(fā)明的較佳實(shí)施例,但可以理解,可在其中進(jìn)行各種改 變而不背離本發(fā)明的精神和范圍。
權(quán)利要求
1. 一種用于響應(yīng)于接收?qǐng)?zhí)行潛在惡意軟件的請(qǐng)求而生成安全程序代碼的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包括(a)對(duì)所述潛在惡意軟件中所包含的程序代碼解碼;(b)將所述已解碼程序代碼轉(zhuǎn)換成安全且功能上相等的程序代碼;以及(c)在計(jì)算設(shè)備上執(zhí)行所述安全且功能上相等的程序代碼。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括將所述潛在惡意軟件的基 本塊加載到存儲(chǔ)器中。
3. 如權(quán)利要求2所述的方法,其特征在于,還包括使掃描器對(duì)存儲(chǔ)器中所加 載的基本塊執(zhí)行分析以確定所述潛在惡意軟件是否由具有惡意的程序代碼特征組 成。
4. 如權(quán)利要求2所述的方法,其特征在于,所述基本塊中的第一條指令被標(biāo)識(shí)。
5. 如權(quán)利要求2所述的方法,其特征在于,所述基本塊中的最后一條指令被標(biāo)識(shí)。
6. 如權(quán)利要求l所述的方法,其特征在于,還包括,生成描述所述潛在惡意 軟件中的基本塊之間的執(zhí)行流的數(shù)據(jù)結(jié)構(gòu)。
7. 如權(quán)利要求l所述的方法,其特征在于,所述對(duì)潛在惡意軟件中所包含的 程序代碼解碼包括從所述潛在惡意軟件生成體系結(jié)構(gòu)中立程序代碼。
8. 如權(quán)利要求7所述的方法,其特征在于,所述源語(yǔ)言滿(mǎn)足X86-32位計(jì)算 機(jī)體系結(jié)構(gòu)的規(guī)范。
9. 如權(quán)利要求l所述的方法,其特征在于,所述將已解碼程序代碼轉(zhuǎn)換成安 全且功能上相等的程序代碼包括(a) 選擇所述潛在惡意軟件中的一條指令;(b) 生成不能實(shí)現(xiàn)惡意軟件功能的體系結(jié)構(gòu)中立格式的等效的指令集;以及(c) 將所述體系結(jié)構(gòu)中立格式的指令集編譯成可執(zhí)行的程序代碼。
10. 如權(quán)利要求1所述的方法,其特征在于,所述將已解碼的程序代碼轉(zhuǎn)換成安全且功能上相等的程序代碼包括(a)選擇所述已解碼程序代碼中的一條指令;以及(b)生成不能實(shí)現(xiàn)惡意軟件功能的功能上相等且安全的可執(zhí)行指令集。
11. 如權(quán)利要求1所述的方法,其特征在于,執(zhí)行所述安全且功能上相等的 程序代碼的單位是基本塊。
12. 如權(quán)利要求ll所述的方法,其特征在于,所述基本塊的執(zhí)行包括(a) 選擇所述基本塊中的一條指令;(b) 使所述指令由中央處理單元執(zhí)行;以及 (C)確定對(duì)所選指令的執(zhí)行是否導(dǎo)致中斷條件。
13. 如權(quán)利要求12所述的方法,其特征在于,當(dāng)對(duì)所選指令的執(zhí)行使所述基 本塊中被調(diào)度來(lái)在所選指令之后執(zhí)行的程序代碼被更改時(shí),所述基本塊被拆分成兩 個(gè)基本塊。
14. 如權(quán)利要求12所述的方法,其特征在于,所執(zhí)行的安全且功能上相等的程序代碼被配置成(a) 檢測(cè)在執(zhí)行期間發(fā)生的出錯(cuò);(b) 中斷執(zhí)行并調(diào)用異常處理程序;以及(C)使所述異常處理程序完成執(zhí)行之后恢復(fù)執(zhí)行所必需的信息被存儲(chǔ)。
15. —種承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述指令當(dāng)被執(zhí)行時(shí)實(shí)現(xiàn)用于響應(yīng)于接收?qǐng)?zhí)行潛在惡意軟件的請(qǐng)求而生成安全程序代碼的方法,所述方法包括(a) 對(duì)所述潛在惡意軟件中所包含的程序代碼解碼;(b) 將所述已解碼程序代碼轉(zhuǎn)換成安全且功能上相等的程序代碼;以及 (C)在計(jì)算設(shè)備上執(zhí)行所述安全且功能上相等的程序代碼。
16. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括將所述潛在惡意軟件的基本塊加載到存儲(chǔ)器中。
17. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括使掃描器對(duì) 存儲(chǔ)器中所加載的基本塊執(zhí)行分析以確定所述潛在惡意軟件是否由具有惡意軟件 特征的程序代碼組成。
18. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述基本塊中的第 一條指令被標(biāo)識(shí)。
19. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述基本塊中的最 后一條指令被標(biāo)識(shí)。
20. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括生成描述所述潛在惡意軟件中的基本塊之間的執(zhí)行流的數(shù)據(jù)結(jié)構(gòu)。
21. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述對(duì)潛在惡意軟 件中所包含的程序代碼解碼包括從所述潛在惡意軟件生成體系結(jié)構(gòu)中立程序代碼。
22. 如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述源語(yǔ)言滿(mǎn)足 X86-32位計(jì)算機(jī)體系結(jié)構(gòu)的規(guī)范。
23. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述將已解碼程序 代碼轉(zhuǎn)換成安全且功能上相等的程序代碼包括(a) 選擇所述潛在惡意軟件中的一條指令;(b) 生成不能實(shí)現(xiàn)惡意軟件功能的體系結(jié)構(gòu)中立格式的等效的指令集;以及(c) 將所述體系結(jié)構(gòu)中立格式的指令集編譯成可執(zhí)行的程序代碼。
24. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述將已解碼程序代碼轉(zhuǎn)換成安全且功能上相等的程序代碼包括(a) 選擇所述己解碼程序代碼中的一條指令;以及(b) 生成不能實(shí)現(xiàn)惡意軟件功能的功能上相等且安全的可執(zhí)行指令集。
25. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,執(zhí)行所述安全且功 能上相等的程序代碼的單位是基本塊。
26. 如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述基本塊的執(zhí)行包括(a) 選擇所述基本塊中的一條指令;(b) 使所述指令由中央處理單元執(zhí)行;以及(c) 確定對(duì)所選指令的執(zhí)行是否導(dǎo)致中斷條件。
27. 如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,當(dāng)對(duì)所選指令的執(zhí) 行使所述基本塊中被調(diào)度來(lái)在所選指令之后執(zhí)行的程序代碼被更改時(shí),所述基本塊 被拆分成兩個(gè)基本塊。
28. 如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所執(zhí)行的安全且功 能上相等的程序代碼被配置成(a) 檢測(cè)在執(zhí)行期間發(fā)生的出錯(cuò);(b) 中斷執(zhí)行并調(diào)用異常處理程序;以及(c) 使所述異常處理程序完成執(zhí)行之后恢復(fù)執(zhí)行所必需的信息被存儲(chǔ)。
29. —種用于在計(jì)算設(shè)備上安全地執(zhí)行潛在惡意軟件的軟件系統(tǒng),所述軟件系統(tǒng)包括(a) 用于確定加載到存儲(chǔ)器中的程序代碼是否是惡意軟件的掃描器;(b) 用于將源語(yǔ)言轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的功能上相等且安全的程序代碼 的轉(zhuǎn)換引擎;(C)用于將所述體系結(jié)構(gòu)中立程序代碼編譯成可執(zhí)行程序代碼的編譯引擎;以及(d)跟蹤所述潛在惡意軟件的基本塊之間的程序執(zhí)行流的塊管理器。
30. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,還包括執(zhí)行由所述編譯引擎編譯的程序代碼的中央處理單元。
31. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,還包括被配置成當(dāng)加載到 存儲(chǔ)器中的程序代碼被更改時(shí)與所述塊管理器通信的虛擬環(huán)境。
32. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,所述轉(zhuǎn)換引擎被配置成支持用于將源語(yǔ)言轉(zhuǎn)換成體系結(jié)構(gòu)中立格式的程序代碼的插件模塊。
33. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,所述編譯引擎被配置成支 持用于將所述體系結(jié)構(gòu)中立格式的程序代碼編譯成可在所述計(jì)算設(shè)備上執(zhí)行的程 序代碼的插件模塊。
34. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,所述塊管理器被配置成將 跳轉(zhuǎn)指令插入到不以跳轉(zhuǎn)指令結(jié)束的基本塊中,其中所述跳轉(zhuǎn)指令使執(zhí)行控制在所 述基本塊執(zhí)行之后返回給所述塊管理器或后續(xù)基本塊;以及將跳轉(zhuǎn)指令插入到被拆 分的基本塊中。
35. 如權(quán)利要求29所述的軟件系統(tǒng),其特征在于,所述轉(zhuǎn)換引擎被配置成將 所述潛在惡意軟件中的跳轉(zhuǎn)指令轉(zhuǎn)換成在基本塊執(zhí)行完成之后將程序控制返回給 所述塊管理器或?qū)?zhí)行控制轉(zhuǎn)移給所述后續(xù)基本塊的指令。
全文摘要
本發(fā)明包括用于將潛在惡意軟件設(shè)備轉(zhuǎn)換成安全程序代碼的系統(tǒng)和方法。潛在惡意軟件從多個(gè)不同類(lèi)型的源語(yǔ)言,包括但不限于本機(jī)CPU程序代碼、平臺(tái)無(wú)關(guān).NET字節(jié)代碼、腳本程序代碼等中的任何一種轉(zhuǎn)換。經(jīng)轉(zhuǎn)換的程序代碼被編譯成可由本機(jī)CPU理解并執(zhí)行的程序代碼。在執(zhí)行之前和/或期間,本發(fā)明使掃描器搜索存儲(chǔ)器中存儲(chǔ)的潛在惡意軟件。如果未檢測(cè)到惡意軟件,則計(jì)算設(shè)備使CPU執(zhí)行經(jīng)轉(zhuǎn)換的程序代碼。然而,如果存儲(chǔ)潛在惡意軟件的計(jì)算機(jī)存儲(chǔ)器在執(zhí)行期間被更改,則對(duì)惡意軟件的執(zhí)行和/或分析可能被中斷。在這種情況中,現(xiàn)在存儲(chǔ)在存儲(chǔ)器中的潛在惡意軟件在執(zhí)行之前被轉(zhuǎn)換成安全程序代碼。
文檔編號(hào)H04L9/32GK101438529SQ200580038599
公開(kāi)日2009年5月20日 申請(qǐng)日期2005年12月5日 優(yōu)先權(quán)日2004年12月6日
發(fā)明者A·E·史蒂芬, A·M·馬里斯庫(kù), G·M·格奧爾蓋斯庫(kù) 申請(qǐng)人:微軟公司