本公開一般地涉及軟件應(yīng)用中的安全。更具體地,本公開涉及保護(hù)在虛擬機(jī)中執(zhí)行的非本機(jī)應(yīng)用。
背景技術(shù):虛擬機(jī)和腳本解釋器是已知的。被設(shè)計(jì)成用于由過程虛擬機(jī)或腳本解釋器執(zhí)行的軟件應(yīng)用針對(duì)底層硬件和在其上面運(yùn)行的計(jì)算平臺(tái)的操作系統(tǒng)被屏蔽。同樣地,能夠稱為非本機(jī)應(yīng)用的這些應(yīng)用不能訪問由計(jì)算平臺(tái)提供的安全資源,并且不能使用可用于本機(jī)應(yīng)用的保護(hù)措施。另外,許多建立的軟件安全和保護(hù)技術(shù)不能直接適于處理非本機(jī)應(yīng)用,其被設(shè)計(jì)成保護(hù)本機(jī)代碼(例如機(jī)器代碼)。提供非本機(jī)應(yīng)用能夠在其內(nèi)部運(yùn)行的計(jì)算系統(tǒng)(例如,沙箱安全)的有限保護(hù)的安全方法甚至可以進(jìn)一步限制這種適應(yīng)能力。同樣地,過程虛擬機(jī)或腳本解釋器基本上是不可信的且對(duì)于攻擊是脆弱的。近年來,平板計(jì)算機(jī)和智能電話已經(jīng)是卓越增長的對(duì)象,因?yàn)橛性S多軟件應(yīng)用是它們可用的。許多此類軟件應(yīng)用是幾乎不具有計(jì)算平臺(tái)相關(guān)性的非本機(jī)應(yīng)用。作為示例,用于平板計(jì)算機(jī)和智能電話的某些應(yīng)用能夠在不能提供本機(jī)環(huán)境和可接受安全的網(wǎng)頁瀏覽器內(nèi)被加載、觸發(fā)和運(yùn)行。因此,在虛擬機(jī)和腳本解釋器上運(yùn)行的非本機(jī)應(yīng)用的保護(hù)和安全的改善是期望的。
技術(shù)實(shí)現(xiàn)要素:在第一方面,本公開提供了一種保護(hù)用非本機(jī)代碼編碼的非本機(jī)應(yīng)用的執(zhí)行的方法。該方法包括:修改非本機(jī)應(yīng)用以獲得本機(jī)代碼函數(shù)和應(yīng)用存根(stub),本機(jī)代碼功能可在預(yù)定義可信模塊內(nèi)執(zhí)行,該預(yù)定義可信模塊具有一個(gè)或多個(gè)本機(jī)環(huán)境安全函數(shù),該應(yīng)用存根具有取決于本機(jī)代碼的至少一個(gè)執(zhí)行相關(guān)性,所述至少一個(gè)執(zhí)行相關(guān)性包括對(duì)本機(jī)代碼函數(shù)的調(diào)用。該方法還包括將應(yīng)用存根與本機(jī)代碼函數(shù)打包。該方法還可以包括:在非本機(jī)環(huán)境內(nèi)加載應(yīng)用存根;在預(yù)定義可信模塊內(nèi)加載本機(jī)代碼函數(shù);以及在非本機(jī)環(huán)境中執(zhí)行應(yīng)用存根,所述至少一個(gè)執(zhí)行相關(guān)性使應(yīng)用存根調(diào)用本機(jī)代碼函數(shù)以使根據(jù)所述一個(gè)或多個(gè)本機(jī)環(huán)境安全函數(shù)中的至少一個(gè)在預(yù)定義可信模塊內(nèi)執(zhí)行本機(jī)代碼函數(shù)。所述非本機(jī)應(yīng)用可以包括非本機(jī)代碼函數(shù),并且修改非本機(jī)應(yīng)用可以包括將非本機(jī)代碼函數(shù)轉(zhuǎn)換成配對(duì)本機(jī)代碼函數(shù)。所述非本機(jī)應(yīng)用可以包括具有非本機(jī)代碼函數(shù)功能的非本機(jī)代碼函數(shù);修改非本機(jī)應(yīng)用可以包括將非本機(jī)代碼函數(shù)轉(zhuǎn)換成部分非本機(jī)代碼函數(shù),并將該部分非本機(jī)代碼函數(shù)安裝在非本機(jī)應(yīng)用存根中;以及本機(jī)代碼函數(shù)可以包括一個(gè)或多個(gè)橋函數(shù)以橋接部分非本機(jī)代碼函數(shù)以獲得橋接的部分非本機(jī)代碼函數(shù),該橋接的部分非本機(jī)代碼函數(shù)具有與非本機(jī)代碼函數(shù)等效的功能。非本機(jī)應(yīng)用可以包括具有非本機(jī)代碼函數(shù)功能的非本機(jī)代碼函數(shù);修改非本機(jī)應(yīng)用可以包括將非本機(jī)代碼函數(shù)轉(zhuǎn)換成部分非本機(jī)代碼函數(shù),并將該部分非本機(jī)代碼函數(shù)的第一部分安裝在非本機(jī)應(yīng)用存根中,并且將部分非本機(jī)代碼函數(shù)的第二部分安裝在應(yīng)用庫中,該應(yīng)用庫被涵蓋在預(yù)定義可信模塊內(nèi);并且本機(jī)代碼函數(shù)可以包括一個(gè)或多個(gè)橋函數(shù)以橋接部分非本機(jī)代碼函數(shù)的第一和第二部分以獲得橋接的部分非本機(jī)代碼函數(shù),該橋接的部分非本機(jī)代碼函數(shù)具有與非本機(jī)代碼函數(shù)等效的功能。非本機(jī)應(yīng)用可以包括具有非本機(jī)代碼函數(shù)功能的非本機(jī)代碼函數(shù);修改非本機(jī)應(yīng)用可以包括將非本機(jī)代碼函數(shù)轉(zhuǎn)換成至少一個(gè)部分非本機(jī)代碼函數(shù)和至少一個(gè)部分本機(jī)代碼函數(shù),所述至少一個(gè)部分非本機(jī)代碼函數(shù)是非本機(jī)應(yīng)用存根的一部分;并且所述本機(jī)代碼函數(shù)可以包括一個(gè)或多個(gè)橋函數(shù)以橋接所述至少一個(gè)部分非本機(jī)代碼函數(shù)和所述至少一個(gè)部分本機(jī)代碼函數(shù)以獲得橋接的部分本機(jī)和非本機(jī)代碼函數(shù),橋接的部分本機(jī)和非本機(jī)代碼函數(shù)具有與非本機(jī)代碼函數(shù)等效的功能。非本機(jī)應(yīng)用可以包括具有總體功能的多個(gè)飛機(jī)本機(jī)代碼函數(shù);修改非本機(jī)應(yīng)用可以包括將所述多個(gè)非本機(jī)代碼函數(shù)安裝在非本機(jī)應(yīng)用存根中;以及本機(jī)代碼函數(shù)可以包括一個(gè)或多個(gè)橋函數(shù)以橋接所述多個(gè)非本機(jī)代碼函數(shù)以獲得橋接的非本機(jī)代碼函數(shù),橋接的非本機(jī)代碼函數(shù)具有與所述多個(gè)非本機(jī)代碼函數(shù)的總體功能等效的功能。所述非本機(jī)應(yīng)用存根可以包括安全加載程序存根且所述一個(gè)或多個(gè)本機(jī)環(huán)境安全函數(shù)可以包括安全加載程序處理程序函數(shù)。非本機(jī)應(yīng)用存根可以包括完整性驗(yàn)證存根,并且所述一個(gè)或多個(gè)本機(jī)環(huán)境安全函數(shù)可以包括完整性驗(yàn)證處理程序函數(shù)。所述一個(gè)或多個(gè)本機(jī)環(huán)境安全函數(shù)可以反調(diào)試處理程序。所述非本機(jī)應(yīng)用可以包括具有非本機(jī)代碼函數(shù)功能的非本機(jī)代碼函數(shù);并且修改非本機(jī)應(yīng)用可以包括:將非本機(jī)代碼函數(shù)轉(zhuǎn)換成部分非本機(jī)代碼函數(shù),部分非本機(jī)代碼函數(shù)具有部分非本機(jī)代碼函數(shù)的第一部分和部分非本機(jī)代碼函數(shù)的第二部分;以及將部分非本機(jī)代碼函數(shù)的第一部分安裝在非本機(jī)應(yīng)用存根中;所述方法還可以包括:將部分非本機(jī)代碼函數(shù)的第二部分加密以獲得已加密部分非本機(jī)代碼函數(shù);以及將已加密部分非本機(jī)代碼函數(shù)安裝在應(yīng)用庫中,該應(yīng)用庫被涵蓋在預(yù)定義可信模塊內(nèi),已加密部分非本機(jī)代碼函數(shù)將在運(yùn)行時(shí)間被解碼以獲得部分非本機(jī)代碼函數(shù)的已解密第二部分,該部分非本機(jī)代碼函數(shù)的已解密第二部分將被加載在非本機(jī)環(huán)境中,該本機(jī)代碼函數(shù)包括一個(gè)或多個(gè)橋函數(shù)以橋接部分非本機(jī)代碼函數(shù)的第一部分和部分非本機(jī)代碼函數(shù)的已解密第二部分以獲得橋接的部分本機(jī)代碼函數(shù)和橋接的部分非本機(jī)代碼函數(shù),橋接的部分非本機(jī)代碼函數(shù)具有與非本機(jī)代碼函數(shù)等效的功能。非本機(jī)代碼可以包括Java代碼、Javascript代碼、C#代碼、Actionscript代碼以及Python代碼中的至少一個(gè)。對(duì)本機(jī)代碼函數(shù)的調(diào)用可以通過Java本機(jī)接口來完成。對(duì)本機(jī)代碼函數(shù)的調(diào)用可以通過Netscape插件應(yīng)用編程接口來完成。在結(jié)合附圖來仔細(xì)閱讀本公開的特定實(shí)施例的以下描述時(shí),本公開的其他方面和特征將變得對(duì)于本領(lǐng)域的技術(shù)人員而言顯而易見。附圖說明現(xiàn)在將參考附圖僅以示例的方式來描述本公開的實(shí)施例,在所述附圖中:圖1示出了本公開的提供過程流程的實(shí)施例。圖2示出了本公開的互鎖工具實(shí)施例的功能。圖3示出了本公開的實(shí)施例的運(yùn)行時(shí)間表示。圖4示出了根據(jù)本公開的軟件元件的實(shí)施例及其接口。圖5示出了非本機(jī)應(yīng)用中的函數(shù)。圖6示出了根據(jù)本公開的使用動(dòng)態(tài)加載和橋接執(zhí)行的部分執(zhí)行的示例的運(yùn)行時(shí)間表示。圖7示出了根據(jù)本公開的使用動(dòng)態(tài)加載和橋接執(zhí)行的部分執(zhí)行的另一示例的運(yùn)行時(shí)間表示。圖8示出了根據(jù)本公開的使用可信函數(shù)和橋接執(zhí)行的部分執(zhí)行的示例的運(yùn)行時(shí)間表示。圖9示出了非本機(jī)應(yīng)用中的兩個(gè)函數(shù)。圖10示出了根據(jù)本公開的可信函數(shù)調(diào)用的示例的運(yùn)行時(shí)間表示。圖11示出了以安全加載為特征的本公開的實(shí)施例。圖12示出了以安全完整性驗(yàn)證為特征的本公開的實(shí)施例。圖13示出了以反調(diào)試特征為特征的本公開的實(shí)施例。具體實(shí)施方式一般地,本公開提供了一種保護(hù)非本機(jī)應(yīng)用的方法。處理非本機(jī)應(yīng)用以獲得將在虛擬機(jī)內(nèi)被觸發(fā)的應(yīng)用存根。非本機(jī)應(yīng)用的處理還提供了本機(jī)代碼函數(shù),應(yīng)用存根取決于該本機(jī)代碼函數(shù)。在應(yīng)用存根觸發(fā)時(shí),應(yīng)用存根使得函數(shù)調(diào)用本機(jī)代碼函數(shù)。非本機(jī)函數(shù)是將安全服務(wù)從可信模塊擴(kuò)展至虛擬機(jī)的可信模塊的一部分??尚拍K是本機(jī)代碼應(yīng)用,其通過非本機(jī)應(yīng)用存根與非本機(jī)函數(shù)之間的執(zhí)行使能機(jī)制來創(chuàng)建可信區(qū)作為擴(kuò)展至虛擬機(jī)的可信任的根。為了安全地連接到可信模塊,本公開的某些實(shí)施例將虛擬機(jī)執(zhí)行環(huán)境擴(kuò)展并使得虛擬機(jī)應(yīng)用能夠使用由可信模塊提供的安全服務(wù),以及使得可信模塊能夠訪問虛擬機(jī)以支持安全相關(guān)特征。能夠建立虛擬鎖以將虛擬機(jī)(非本機(jī))應(yīng)用結(jié)合到可信模塊。虛擬鎖提供在虛擬機(jī)和可信模塊上運(yùn)行的應(yīng)用之間的執(zhí)行互鎖,并且確保應(yīng)用不能在沒有可信模塊的情況下運(yùn)行。一旦建立了互鎖,則能夠?qū)⒖尚拍K的可信任擴(kuò)展至虛擬機(jī)應(yīng)用。安全特征能夠基于虛擬機(jī)應(yīng)用和虛擬機(jī)實(shí)施方式而變化??尚拍K能夠支持大范圍的虛擬機(jī)實(shí)施方式,每個(gè)具有潛在不同的指令集架構(gòu)??尚拍K的某些實(shí)施例提供了許多基本安全特征,其保護(hù)虛擬機(jī)中或腳本引擎中的應(yīng)用。圖1示出了本公開的方法的實(shí)施例。圖1的方法示出了如何能夠通過對(duì)一個(gè)或不止一個(gè)本機(jī)代碼函數(shù)的執(zhí)行相關(guān)性來將非本機(jī)應(yīng)用修改成更安全。要修改的非本機(jī)應(yīng)用被用非本機(jī)代碼編碼,并且可以例如是被設(shè)計(jì)成在虛擬機(jī)上工作的非本機(jī)應(yīng)用。在動(dòng)作20處,非本機(jī)應(yīng)用被修改成在動(dòng)作22處獲得非本機(jī)應(yīng)用存根并在動(dòng)作24處獲得本機(jī)代碼函數(shù)或不止一個(gè)本機(jī)代碼函數(shù)(一個(gè)或多個(gè)本機(jī)代碼函數(shù))。如下面將更詳細(xì)地描述的,非本機(jī)應(yīng)用存根具有取決于一個(gè)或多個(gè)本機(jī)代碼函數(shù)中的至少一個(gè)的至少一個(gè)執(zhí)行相關(guān)性;此類執(zhí)行相關(guān)性可以包括對(duì)一個(gè)或多個(gè)本機(jī)代碼函數(shù)的調(diào)用。在動(dòng)作26處,將在動(dòng)作22處獲得的非本機(jī)應(yīng)用存根和在動(dòng)作26處獲得的一個(gè)或多個(gè)本機(jī)代碼函數(shù)打包以用于分發(fā)。如上所述,在動(dòng)作22處獲得的非本機(jī)應(yīng)用存根在執(zhí)行時(shí)取決于在動(dòng)作24處獲得的一個(gè)或多個(gè)本機(jī)代碼函數(shù)。由于非本機(jī)應(yīng)用存根在執(zhí)行時(shí)取決于一個(gè)或多個(gè)本機(jī)代碼函數(shù),所以能夠?qū)⒎潜緳C(jī)應(yīng)用存根和一個(gè)或多個(gè)本機(jī)代碼函數(shù)說成是互鎖的。圖2示出了能夠用來執(zhí)行圖1的方法的互鎖工具30的實(shí)施例。如圖2中所示,非本機(jī)應(yīng)用32被輸入到互鎖工具30,其處理(修改)非本機(jī)應(yīng)用32并輸出非本機(jī)應(yīng)用存根34和一個(gè)或多個(gè)本機(jī)代碼函數(shù)36(一個(gè)本機(jī)代碼函數(shù)或不止一個(gè)本機(jī)代碼函數(shù))。非本機(jī)應(yīng)用存根34在執(zhí)行時(shí)取決于一個(gè)或多個(gè)本機(jī)代碼函數(shù)36。同樣地,非本機(jī)應(yīng)用存根34和本機(jī)代碼函數(shù)36是互鎖的??梢允沟靡粋€(gè)或多個(gè)本機(jī)代碼函數(shù)36為應(yīng)用庫的一部分,其可以包含本機(jī)函數(shù)和非本機(jī)函數(shù)。非本機(jī)應(yīng)用存根34和一個(gè)或多個(gè)本機(jī)代碼函數(shù)36將在運(yùn)行時(shí)間具有原始非本機(jī)應(yīng)用32的等效功能。如下面將更詳細(xì)地描述的,互鎖功能30可以將非本機(jī)應(yīng)用函數(shù)添加到調(diào)用一個(gè)或多個(gè)本機(jī)代碼函數(shù)36的應(yīng)用存根34。作為修改本機(jī)應(yīng)用32的結(jié)果,非本機(jī)應(yīng)用存根34將不會(huì)在沒有一個(gè)或多個(gè)本機(jī)代碼函數(shù)36的情況下提供非本機(jī)應(yīng)用32的完整功能。圖3示出了運(yùn)行時(shí)間的非本機(jī)應(yīng)用存根34和一個(gè)或多個(gè)本機(jī)代碼函數(shù)36。非本機(jī)應(yīng)用存根34在虛擬機(jī)38內(nèi)示出且一個(gè)或多個(gè)本機(jī)代碼函數(shù)36在可信模塊40內(nèi)示出。可信模塊40還涵蓋可信模塊應(yīng)用接口(API)42。對(duì)可信模塊API42的調(diào)用能夠被虛擬機(jī)38和被非本機(jī)應(yīng)用存根34觸發(fā)??尚拍K40是預(yù)定義的,并且能夠用C/C++、匯編語言或用任何其他適當(dāng)?shù)木幊陶Z言來實(shí)現(xiàn)。由于能夠以此類語言來實(shí)現(xiàn)本發(fā)明的安全模塊的實(shí)施方式,所以這使得能夠使用本機(jī)環(huán)境安全函數(shù),其能夠保護(hù)用那些語言(C/C++、匯編語言或用任何其他適當(dāng)?shù)木幊陶Z言)編寫的代碼。適當(dāng)?shù)谋緳C(jī)環(huán)境安全函數(shù)能夠訪問基于硬件的安全特征以建立可信任的根。此外,適當(dāng)?shù)谋緳C(jī)環(huán)境安全函數(shù)可以包括例如在包括以下各項(xiàng)的專利文獻(xiàn)中公開的那些:在2009年3月17日授予Chow等人且題為TAMPERRESISTANTSOFTWAREENCODINGANDANALYSIS的的美國專利號(hào)7,506,177;在2008年12月9日授予Johnson等人且題為SECUREMETHODANDSYSTEMFORHANDLINGANDDISTRIBUTINGDIGITALMEDIA的美國專利號(hào)7,464,269;在2008年7月8日授予Johnson等人且題為SYSTEMANDMETHODFORPROTECTINGCOMPUTERSOFTWAREFROMAWHITEBOXATTACK的美國專利號(hào)7,397,916;在2008年7月1日授予Chow等人且題為METHODANDSYSTEMFORSUSTAINABLEDIGITALWATERMARKING的美國專利號(hào)7,395,433;在2008年3月25日授予Johnson等人且題為TAMPERRESISTANTSOFTWARE-MASSDATAENCODING的美國專利號(hào)7,350,085;在2008年1月29日授予Chow等人且題為METHODANDSYSTEMFORSECUREACCESS的美國專利號(hào)7,325,141;在2005年1月11日授予Chow等人且題為TAMPERRESISTANTSOFTWAREENCODING的美國專利號(hào)6,842,862;在2004年8月17日授予Chow等人且題為TAMPERRESISTANTSOFTWARE-CONTROLFLOWENCODING的美國專利號(hào)6,779,114;在2003年7月15日授予Chow等人且題為TAMPERRESISTANTSOFTWAREENCODING的美國專利號(hào)6,594,761;在2010年10月5日授予Johnson等人且題為SYSTEMANDMETHODFORPROTECTINGCOMPUTERSOFTWAREFROMAWHITEBOXATTACK的美國專利號(hào)7,809,135;在2011年3月17日公開且題為SYSTEMANDMETHODFORGENERATINGWHITE-BOXIMPLEMENTATIONSOFSOFTWAREAPPLICATIONS的美國專利申請(qǐng)公開號(hào)2011/0067012;在2011年11月11日公開且題為INTERLOCKEDBINARYPROTECTIONUSINGWHITEBOXCRYPTOGRAPHY的國際專利申請(qǐng)?zhí)朩O2010/127438;在2005年7月27日授予Zhou等人且題為SYSTEMANDMETHODOFHIDINGCRYPTOGRAPHICPRIVATEKEYS的美國專利號(hào)7,634,091;在2010年12月23日公開且題為WHITE-BOXCRYPTOGRAPHICSYSTEMWITHCONFIGURABLEKEYUSINGBLOCKSELECTION的國際專利申請(qǐng)?zhí)朩O2010/0146140;在2010年12月23日公開且題為WHITE-BOXCRYPTOGRAPHICSYSTEMWITHCONFIGURABLEKEYUSINGINTERMEDIATEDATAMODIFICATION的國際專利申請(qǐng)?zhí)朩O2010/146139;在2008年11月27日公開且題為UPDATINGCRYPTOGRAPHICKEYDATA的國際專利申請(qǐng)?zhí)朩O2008/142612;在2008年10月8日公開的美國專利申請(qǐng)公開號(hào)20090254759;在2011年2月1日授予Gorissen等人且題為METHODANDSYSTEMFOROBFUSCATINGACRYPTOGRAPHICFUNCTION的美國專利號(hào)7,881,466;在2010年11月25日公開且題為TRACINGCOPIESOFANIMPLEMENTATION的美國專利申請(qǐng)?zhí)?0100299515;在2009年9月11日公開且題為CRYPTOGRAPHICSYSTEM的國際專利申請(qǐng)?zhí)朩O2009/109884;在2010年4月1日公開且題為CRYPTOGRAPHICMETHODFORAWHITE-BOXIMPLEMENTATION的美國專利申請(qǐng)公開號(hào)20100080395;在2009年3月19日公開且題為CRYPTOGRAPHICPROCESSINGOFCONTENT的國際專利申請(qǐng)?zhí)朩O2009/034504;在2006年7月18日授予Boer且題為CRYPTOGRAPHICMETHODANDAPPARATUSFORNON-LINEARLYMERGINGADATABLOCKANDAKEY的美國專利號(hào)7,079,651;中國專利文獻(xiàn)號(hào)200880017068.3;在2011年1月25日授予Gorissen等人且題為BLOCKCIPHERINGSYSTEM,USINGPERMUTATIONSTOHIDETHECORECIPHERINGFUNCTIONOFEACHENCRYPTIONROUND的美國專利號(hào)7,876,898;在2009年12月17日公開且題為METHODANDSYSTEMFOROBFUSCATINGAGRYPTOGRAPHICFUNCTION的美國專利申請(qǐng)公開號(hào)20090313480;在2010年9月16日公開且題為WHITE-BOXCRYPTOGRAPHICSYSTEMWITHINPUTDEPENDENTENCODINGS的國際專利申請(qǐng)?zhí)朩O2010/102960;在2009年7月18日公開且題為METHODANDSYSTEMFOROBFUSCATINGACRYPTOGRAPHICFUNCTION的美國專利申請(qǐng)公開號(hào)20090158051;在2009年8月6日公開且題為SECURINGASMARTCARD的國際專利申請(qǐng)?zhí)朩O2009/095838;在2009年11月12日公開且題為EXPONENTOBFUSCATION的國際專利申請(qǐng)?zhí)朩O2009/136361;以及在2009年11月11日公開且題為WHITE-BOXIMPLEMENTATION的國際專利申請(qǐng)?zhí)朩O2009/109880,其被整體地通過引用結(jié)合到本文中。圖4示出了各種軟件元件的示例及其接口,在計(jì)算平臺(tái)硬件44、操作系統(tǒng)46以及安全模塊(安全特征)48上分層。軟件層包括可信模塊40,其涵蓋可信模塊API42以及可以是應(yīng)用庫的一部分的一個(gè)或多個(gè)本機(jī)代碼函數(shù)36。軟件層還包括虛擬機(jī)38,在其頂部上,非本機(jī)應(yīng)用存根34被分層。非本機(jī)應(yīng)用存根34可能需要的任何數(shù)據(jù)50在非本機(jī)應(yīng)用存根34上被分層。虛擬機(jī)38在安全模塊52的頂部上被分層,其能夠通過可信模塊API42與可信模塊40建立連接。操作系統(tǒng)46控制虛擬機(jī)38對(duì)計(jì)算平臺(tái)的資源的訪問,諸如,例如硬件44和可能的安全模塊(安全特征)48,其可以包括例如智能卡、軟件狗、節(jié)點(diǎn)鎖定電路等,可信模塊40使得安全模塊52能夠保護(hù)非本機(jī)應(yīng)用存根34。在本公開的其余部分中,術(shù)語非本機(jī)應(yīng)用被用來覆蓋虛擬機(jī)應(yīng)用和腳本應(yīng)用(腳本)。如上文公開的,可以通過修改非本機(jī)應(yīng)用32以獲得具有取決于一個(gè)或多個(gè)本機(jī)代碼函數(shù)36的執(zhí)行相關(guān)性的非本機(jī)應(yīng)用存根34且通過將非本機(jī)應(yīng)用存根34和一個(gè)或多個(gè)本機(jī)代碼函數(shù)36打包來保護(hù)非本機(jī)應(yīng)用32。如下面將描述的,通過使非本機(jī)應(yīng)用存根34調(diào)用對(duì)可信模塊40的向下調(diào)用以執(zhí)行一個(gè)或多個(gè)本機(jī)代碼函數(shù)36來實(shí)現(xiàn)非本機(jī)應(yīng)用32的功能。執(zhí)行相關(guān)性可以在非本機(jī)應(yīng)用存根34和/或一個(gè)或多個(gè)本機(jī)代碼函數(shù)內(nèi)的各種位置處發(fā)生,并且可以在任何適當(dāng)?shù)碾A段被觸發(fā)??梢酝ㄟ^使用配置控制在構(gòu)建時(shí)間定義關(guān)于如何、何時(shí)和在那里創(chuàng)建、觸發(fā)和執(zhí)行相關(guān)性的規(guī)則,并且在提供時(shí)間處個(gè)體化。通過一個(gè)或多個(gè)非本機(jī)應(yīng)用存根34對(duì)本機(jī)代碼函數(shù)36的執(zhí)行相關(guān)性來保持非本機(jī)應(yīng)用32的原始功能。圖5示出了被加載到虛擬機(jī)38中的非本機(jī)應(yīng)用32。非本機(jī)應(yīng)用32具有非本機(jī)代碼函數(shù)F,其將在動(dòng)態(tài)加載和橋接執(zhí)行、可信函數(shù)執(zhí)行以及可信函數(shù)調(diào)用的以下示例中使用。如技術(shù)人員將理解的,在本公開的某些實(shí)施例中,可以將動(dòng)態(tài)加載和橋接執(zhí)行、可信函數(shù)執(zhí)行以及可信函數(shù)調(diào)用的各方面組合。圖6示出了動(dòng)態(tài)加載和橋接執(zhí)行的示例。在修改非本機(jī)應(yīng)用32時(shí),可以修改非本機(jī)應(yīng)用32的函數(shù)F以獲得任何數(shù)目的部分非本機(jī)代碼函數(shù),例如兩個(gè)部分非本機(jī)函數(shù)F1和F2,以及任何數(shù)目的本機(jī)代碼函數(shù),例如一個(gè)本機(jī)代碼函數(shù)B。可以將非本機(jī)代碼函數(shù)F1和F2安裝在非本機(jī)應(yīng)用存根34中,并且可以將本機(jī)代碼函數(shù)B安裝在可信模塊40中(在可信模塊API42中)。替換地,如圖7中所示,可以將非本機(jī)代碼函數(shù)F1安裝在非本機(jī)應(yīng)用存根32中,并且可以將非本機(jī)代碼函數(shù)F2安裝在應(yīng)用庫54中。在圖6和7的任一示例中,可以使本機(jī)代碼函數(shù)B成為可信模塊API42(可信模塊40)的一部分。本機(jī)代碼函數(shù)B是F1和F2之間的橋函數(shù)(接口函數(shù))。在圖6和7的示例中,用新的執(zhí)行相關(guān)性:從F1至B至F2來替換函數(shù)F的原始執(zhí)行相關(guān)性。也就是說,F(xiàn)1對(duì)函數(shù)B進(jìn)行調(diào)用,該函數(shù)B對(duì)函數(shù)F2進(jìn)行調(diào)用。由于B是F1與F2之間的執(zhí)行橋,所以在不執(zhí)行B的情況下,F(xiàn)1或F2的執(zhí)行只能導(dǎo)致F的部分功能。F1要求B到達(dá)F2且不具有將執(zhí)行直接從F1傳遞至F2的所需信息或能力。同樣地,用具有由橋函數(shù)B提供的執(zhí)行相關(guān)性的新的部分非本機(jī)函數(shù)F1和F2來替換F。橋接非本機(jī)函數(shù)F1和F2具有與非本機(jī)應(yīng)用32的非本機(jī)函數(shù)F等效的功能。在應(yīng)用運(yùn)行時(shí)間,對(duì)部分非本機(jī)函數(shù)F1的調(diào)用將經(jīng)由可信模塊40來喚起對(duì)B的調(diào)用。如果F2在應(yīng)用存根204內(nèi)(圖6的示例),則B將把執(zhí)行從B傳遞至F2。如果部分非本機(jī)函數(shù)F2在應(yīng)用庫54內(nèi)(圖7的示例),則B將使用本機(jī)執(zhí)行機(jī)制來動(dòng)態(tài)地檢索部分非本機(jī)函數(shù)F2。一旦部分非本機(jī)函數(shù)F2被加載到虛擬機(jī)38中,則非本機(jī)代碼函數(shù)F2能夠被本機(jī)代碼函數(shù)B調(diào)用,其在可信模塊40中。然后用B將來自F2的返回至委托回部分非本機(jī)代碼函數(shù)F1。圖8示出了與可信模塊執(zhí)行互鎖的示例。在修改非本機(jī)應(yīng)用32(在圖5處示出)時(shí),可以修改非本機(jī)應(yīng)用32的函數(shù)F以獲得任何數(shù)目的部分非本機(jī)代碼函數(shù),例如,一個(gè)部分非本機(jī)函數(shù)F1,以及任何數(shù)目的本機(jī)代碼函數(shù),例如部分本機(jī)代碼函數(shù)F2以及本機(jī)代碼函數(shù)B(橋函數(shù))。在F1和F'2(圖6和7的示例)為互補(bǔ)的意義上,F(xiàn)1和F'2可以是互補(bǔ)的。作為示例,部分本機(jī)代碼函數(shù)F'2可以是等效于部分非本機(jī)代碼函數(shù)F2的本機(jī)代碼??梢詫⒉糠址潜緳C(jī)代碼函數(shù)F1安裝在非本機(jī)應(yīng)用存根32中,可以將部分本機(jī)代碼函數(shù)F'2安裝在應(yīng)用庫54中,并且可以將本機(jī)代碼函數(shù)B安裝在可信模塊API42中。在圖8的示例中,用從F1至B至F'2的新執(zhí)行相關(guān)性來替換函數(shù)F的原始執(zhí)行相關(guān)性。也就是說,F(xiàn)1對(duì)函數(shù)B進(jìn)行調(diào)用,該函數(shù)B對(duì)函數(shù)F'2進(jìn)行調(diào)用。B是F1和F'2之間執(zhí)行橋。F'2和B在可信模塊40中。橋接函數(shù)F1和F'2具有與非本機(jī)應(yīng)用32的非本機(jī)函數(shù)F等效的功能。非本機(jī)函數(shù)F已被部分非本機(jī)代碼函數(shù)F1、部分本機(jī)代碼函數(shù)F'2以及橋接本機(jī)代碼函數(shù)B替換。在不執(zhí)行B和F'2的情況下,F(xiàn)1的執(zhí)行僅僅是部分執(zhí)行,并且F并不具有將執(zhí)行直接從F1傳遞至F'2的所需信息和能力。在應(yīng)用運(yùn)行時(shí)間,對(duì)F1的調(diào)用經(jīng)由可信模塊40來喚起對(duì)B的調(diào)用,其在可信模塊40的上下文內(nèi)執(zhí)行函數(shù)F'2。F'2是可以具有非本機(jī)函數(shù)F的部分(或完整)功能的本機(jī)代碼函數(shù)。來自F'2的函數(shù)返回值能夠通過本機(jī)代碼函數(shù)B從F'2函數(shù)被傳遞回到F1函數(shù)。圖9示出了其中被加載到虛擬機(jī)38中的非本機(jī)應(yīng)用32具有非本機(jī)代碼函數(shù)F和G的示例,函數(shù)G要求來自函數(shù)F的輸入。圖10示出了與可信函數(shù)調(diào)用互鎖的示例。在修改非本機(jī)應(yīng)用32時(shí),其在本示例中包括非本機(jī)代碼函數(shù)F和G,修改函數(shù)F以獲得非本機(jī)代碼函數(shù)F1,并且修改函數(shù)G以獲得非本機(jī)代碼函數(shù)G1。另外,獲得本機(jī)代碼函數(shù)B(橋函數(shù))。F1和G1被安裝在非本機(jī)應(yīng)用存根32中,并且本機(jī)代碼函數(shù)B被安裝在可信模塊API42中。F1和G1使得本機(jī)應(yīng)用32中的F和G之間的調(diào)用關(guān)系被從F1和B至G1的調(diào)用替換。也就是說,F(xiàn)1對(duì)函數(shù)B進(jìn)行調(diào)用,函數(shù)B對(duì)函數(shù)G1進(jìn)行調(diào)用。在未從F1執(zhí)行到B的情況下,將不執(zhí)行G1。橋接函數(shù)F1和G1具有與非本機(jī)應(yīng)用32的函數(shù)F和G等效的功能。在應(yīng)用運(yùn)行時(shí)間,對(duì)函數(shù)F1的調(diào)用喚起對(duì)可信模塊40的向下調(diào)用B,可信模塊40然后喚起向上調(diào)用以執(zhí)行函數(shù)G1??梢越?jīng)由可信模塊40中的本機(jī)函數(shù)B將函數(shù)返回值從G1函數(shù)傳遞回到F1。一旦已使用上述鎖定方法中的一個(gè)或多個(gè)將非本機(jī)應(yīng)用鎖定到可信模塊40,則可以應(yīng)用附加安全技術(shù)。安全技術(shù)可以例如基于虛擬機(jī)的類型且基于非本機(jī)應(yīng)用。下面在用Java源代碼對(duì)非本機(jī)應(yīng)用進(jìn)行編碼的背景下描述動(dòng)態(tài)加載和橋執(zhí)行、可信函數(shù)執(zhí)行以及可信函數(shù)調(diào)用的示例。Java源代碼被正常地編譯成字節(jié)級(jí)代碼以用于java虛擬機(jī)中的部署和執(zhí)行。Java字節(jié)代碼的規(guī)范被標(biāo)準(zhǔn)化且被Java虛擬機(jī)實(shí)現(xiàn)者所使用。存在具有用于修改java字節(jié)代碼的特征的現(xiàn)有開放源和商用工具。在本公開的某些實(shí)施例中,圖2的互鎖工具30的Java實(shí)施方式將需要在部署之前修改Java應(yīng)用?;ユi工具30可以能夠修改Java字節(jié)代碼和/或Java源代碼,并且實(shí)現(xiàn)這些能力將是互鎖工具提供者可用的選項(xiàng),如本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到的。Java具有允許Java調(diào)用本機(jī)模塊的特征。Java與本機(jī)代碼之間的此橋機(jī)制被稱為Java本機(jī)接口,其支持調(diào)用本機(jī)C代碼。Java本機(jī)接口橋使得能夠?qū)崿F(xiàn)向下調(diào)用(Java調(diào)用本機(jī)代碼)和向上調(diào)用(本機(jī)代碼調(diào)用在Java虛擬機(jī)運(yùn)行時(shí)間環(huán)境內(nèi)運(yùn)行的Java代碼)。使用Java本機(jī)接口能夠允許實(shí)現(xiàn)上文公開的部分執(zhí)行技術(shù)。對(duì)于動(dòng)態(tài)加載和橋執(zhí)行技術(shù)而言(在圖6和7處的示例),可以通過改變現(xiàn)有函數(shù)(或類、類方法)以及用經(jīng)由Java本機(jī)接口橋?qū)尚拍K40的調(diào)用來替換而修改非本機(jī)應(yīng)用的非本機(jī)代碼。在運(yùn)行時(shí)間執(zhí)行期間,喚起對(duì)可信模塊40的調(diào)用,并且可信模塊40可以將函數(shù)字節(jié)代碼從可信模塊安全上下文加載到Java虛擬機(jī)并經(jīng)由Java本機(jī)接口橋來執(zhí)行該代碼。Java本機(jī)接口橋的特征還可以允許實(shí)現(xiàn)可信函數(shù)執(zhí)行技術(shù)(圖8的示例)?;ユi工具30(在圖3處示出)將分析Java應(yīng)用的Java源代碼(或字節(jié)代碼),并且將用對(duì)可信模塊40的調(diào)用來替換函數(shù)代碼,其在可信模塊40的上下文內(nèi)執(zhí)行等效功能。Java本機(jī)接口機(jī)制還可應(yīng)用于可信函數(shù)調(diào)用(圖10的示例)。對(duì)函數(shù)內(nèi)的嵌套函數(shù)的調(diào)用被用對(duì)可信模塊40的調(diào)用替換,如在被應(yīng)用于Java源代碼(或字節(jié)代碼)時(shí)由互鎖工具30所確定的。在運(yùn)行時(shí)間期間,Java本機(jī)接口橋使得可信模塊40能夠被調(diào)用,其轉(zhuǎn)而確定要調(diào)用的適當(dāng)函數(shù),可信模塊40然后將執(zhí)行對(duì)Java虛擬機(jī)的向上調(diào)用,連同關(guān)聯(lián)自變量等一起調(diào)用嵌套函數(shù)。同樣地,在本文所述的示例中,Java本機(jī)接口是能夠使得非本機(jī)應(yīng)用存根能夠調(diào)用本機(jī)代碼函數(shù)B的機(jī)制的示例。網(wǎng)頁應(yīng)用提供在網(wǎng)頁瀏覽器內(nèi)運(yùn)行的用戶接口,以用于呈現(xiàn)和用戶交互。網(wǎng)頁應(yīng)用通常包括具有被遞送至網(wǎng)頁瀏覽器的HTML和Javascript函數(shù)的頁面,其解釋HTML頁面,并將該頁面變換成內(nèi)部文檔對(duì)象模型表示。網(wǎng)頁瀏覽器是軟件應(yīng)用且大多數(shù)提供使得網(wǎng)頁應(yīng)用能夠調(diào)用本機(jī)代碼模塊、并且還使得本機(jī)代碼模塊能夠訪問內(nèi)部網(wǎng)頁應(yīng)用的橋機(jī)制。常見的橋機(jī)制(或網(wǎng)頁瀏覽器插件接口)是在Firefox?、GoogleChrome?、Safari?、Opera?網(wǎng)頁瀏覽器中所使用的Netscape插件應(yīng)用編程接口(NPAPI)。NPAPI允許網(wǎng)頁應(yīng)用喚起對(duì)本機(jī)模塊的向下調(diào)用,并且還允許本機(jī)模塊喚起對(duì)網(wǎng)頁瀏覽器應(yīng)用運(yùn)行時(shí)環(huán)境的向上調(diào)用。此NPAPI橋機(jī)制可以用來使得能夠?qū)崿F(xiàn)本文公開的部分執(zhí)行技術(shù)。對(duì)于動(dòng)態(tài)加載和橋執(zhí)行技術(shù)的某些實(shí)施例而言,通過改變現(xiàn)有函數(shù),并經(jīng)由NPAPI橋用對(duì)可信模塊40的調(diào)用來替換,來可以修改源HTML和Javascript函數(shù)。在運(yùn)行時(shí)間執(zhí)行期間,喚起對(duì)可信模塊40的調(diào)用,并且可信模塊40可以經(jīng)由NPAPI橋例如將Javascript函數(shù)代碼從可信模塊40安全上下文加載到網(wǎng)頁應(yīng)用運(yùn)行時(shí)環(huán)境中并執(zhí)行該代碼。所支持的網(wǎng)頁瀏覽器中的NPAPI橋的特征還允許實(shí)現(xiàn)可信函數(shù)執(zhí)行技術(shù)?;ユi工具30(在圖2處示出)能夠分析用對(duì)可信模塊40的調(diào)用來替換Javascript函數(shù)代碼的網(wǎng)頁應(yīng)用源代碼,其在可信模塊40的上下文內(nèi)執(zhí)行等效功能。該機(jī)制還可以應(yīng)用于可信函數(shù)調(diào)用(圖10的示例),因?yàn)榭梢杂脤?duì)可信模塊40的調(diào)用來替換對(duì)函數(shù)內(nèi)的嵌套Javascript函數(shù)的調(diào)用,如在應(yīng)用于網(wǎng)頁應(yīng)用源時(shí)由互鎖工具30確定的。在運(yùn)行時(shí)間期間,NPAPI橋使得可信模塊40能夠被調(diào)用,其轉(zhuǎn)而將確定要調(diào)用的適當(dāng)函數(shù),可信模塊40然后將執(zhí)行對(duì)網(wǎng)頁應(yīng)用的向上調(diào)用,連同關(guān)聯(lián)自變量等一起調(diào)用嵌套Javascript函數(shù)。在不存在到可信模塊的互鎖的情況下,當(dāng)在非本機(jī)執(zhí)行環(huán)境中實(shí)現(xiàn)安全加載程序的情況下,能夠潛在地欺騙調(diào)用可信模塊以安全地加載應(yīng)用的應(yīng)用。也就是說,流氓應(yīng)用可以模仿發(fā)起安全加載程序的原始調(diào)用應(yīng)用。通過將應(yīng)用與可信模塊互鎖,能夠由可信模塊對(duì)調(diào)用應(yīng)用進(jìn)行認(rèn)證和驗(yàn)證。在沒有互鎖可信模塊的情況下,應(yīng)用將不能加載。在國際專利申請(qǐng)公開號(hào)WO2010/1247438中和國際專利申請(qǐng)?zhí)朇A2010/001761中能夠找到安全加載機(jī)制的示例。再次地,在不存在互鎖的情況下,當(dāng)應(yīng)用完整性驗(yàn)證技術(shù)時(shí),可能的安全攻擊可以涉及到用流氓實(shí)現(xiàn)來替換虛擬機(jī)或應(yīng)用以便在運(yùn)行時(shí)間期間繞過完整性驗(yàn)證檢查。通過將應(yīng)用與可信模塊互鎖,能夠在啟動(dòng)時(shí)以及在運(yùn)行時(shí)間期間由可信模塊對(duì)調(diào)用應(yīng)用和或虛擬機(jī)進(jìn)行認(rèn)證和驗(yàn)證。在沒有互鎖可信模塊的情況下,應(yīng)用將不能啟動(dòng)和或執(zhí)行。可以向上文相對(duì)于圖6、7、8和10的示例所述的互鎖執(zhí)行技術(shù)添加附加安全功能以制止諸如下文所述那些的安全侵犯。例如,應(yīng)用安全模塊52(在圖4處示出)能夠支持如以下的安全功能。A)應(yīng)用的安全加載,其能夠阻止對(duì)應(yīng)用的逆向工程攻擊;B)應(yīng)用的完整性驗(yàn)證,其能夠阻止對(duì)應(yīng)用的靜態(tài)和動(dòng)態(tài)篡改攻擊;C)應(yīng)用的調(diào)試阻止,其能夠阻止使用諸如調(diào)試或模擬器的攻擊工具的動(dòng)態(tài)攻擊;以及D)應(yīng)用的動(dòng)態(tài)加密,其能夠阻止靜態(tài)篡改和動(dòng)態(tài)代碼盜用攻擊。安全函數(shù)A—D僅僅是作為示例提供的,并且本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到可以同樣地支持其他功能。下面提供安全功能A—D的示例。除諸如安全功能A—D的安全功能之外,安全模塊52能夠?qū)С隹尚拍K發(fā)現(xiàn)原語和類似通信原語以使得多個(gè)虛擬機(jī)能夠使用可信模塊(甚至同時(shí)地)。由于可信模塊40是本機(jī)應(yīng)用,所以其能夠使用由計(jì)算平臺(tái)提供的所有安全功能??尚拍K向虛擬機(jī)和/或腳本引擎提供這些安全特征的抽象。作為單獨(dú)模塊,能夠獨(dú)立于虛擬機(jī)和腳本引擎來替換可信模塊40。這使得可以將應(yīng)用可信管理和由虛擬機(jī)提供的特征組分離。非本機(jī)應(yīng)用的安全加載能夠用來在應(yīng)用被執(zhí)行之前阻止對(duì)應(yīng)用及其相關(guān)數(shù)據(jù)的動(dòng)態(tài)分析型攻擊。圖11示出了如何能夠通過添加可信模塊40將安全加載程序功能擴(kuò)展至腳本語言環(huán)境(或虛擬機(jī)執(zhí)行環(huán)境)的示例。在非本機(jī)應(yīng)用600的部署之前,發(fā)生安全加載程序預(yù)先提供步驟,其中,非本機(jī)應(yīng)用子組件(例如,函數(shù)、類、模塊)被識(shí)別和加密并存儲(chǔ)為受保護(hù)一個(gè)或多個(gè)資源以便輸入到安全加載程序啟動(dòng)步驟中。這些資源被加密,使得只有可信附加模塊能夠?qū)①Y源解密。要求安全加載程序存根602到非本機(jī)應(yīng)用600中的集成以便定義用于發(fā)起非本機(jī)應(yīng)用子組件從可信模塊40到應(yīng)用運(yùn)行時(shí)間中的安全加載的觸發(fā)點(diǎn)。安全加載程序存根602是能夠調(diào)用可信模塊40的一個(gè)或多個(gè)安全加載程序函數(shù)的非本機(jī)應(yīng)用子組件。隨后,部署非本機(jī)應(yīng)用600以及可信模塊40和加密子組件。在應(yīng)用啟動(dòng)時(shí),安全加載程序存根602被應(yīng)用600觸發(fā)。此觸發(fā)調(diào)用安全加載程序存根602,其轉(zhuǎn)而喚起對(duì)可信模塊40的向下調(diào)用604,用信號(hào)通知其加載一個(gè)或多個(gè)應(yīng)用子組件。可信模塊40對(duì)來自安全加載程序存根602組件的請(qǐng)求進(jìn)行認(rèn)證并調(diào)用安全加載程序處理程序608,其是本機(jī)代碼函數(shù)。如果可信模塊40不能對(duì)調(diào)用應(yīng)用進(jìn)行認(rèn)證,則應(yīng)用600不能加載??尚拍K40識(shí)別應(yīng)用子組件并將應(yīng)用子組件解密。一旦可信模塊40已將應(yīng)用子組件解密,其然后對(duì)應(yīng)用運(yùn)行時(shí)間施以向上調(diào)用606,將應(yīng)用子組件加載到應(yīng)用上下文。已解密應(yīng)用子組件現(xiàn)在可用于非本機(jī)應(yīng)用上下文。一旦完成,可信模塊40可以可選地返回安全加載程序存根602向下調(diào)用方法調(diào)用的狀態(tài)結(jié)果。完整性驗(yàn)證能夠確認(rèn)非本機(jī)應(yīng)用未被篡改。圖12示出了根據(jù)本公開的實(shí)施例的用于完整性驗(yàn)證的示例性過程。在非本機(jī)應(yīng)用600的部署之前,發(fā)生完整性驗(yàn)證預(yù)先提供步驟,其中出于完整性驗(yàn)證目的識(shí)別應(yīng)用子組件。在此步驟期間,對(duì)每個(gè)子組件計(jì)算密碼哈希值。子組件哈希值710(例如,SHA-1)被加密,使得只有可信模塊40能夠檢索該值并將其解密。在預(yù)先提供步驟期間,在哈希計(jì)算步驟之前,在非本機(jī)應(yīng)用600中定義完整性驗(yàn)證觸發(fā)點(diǎn)。在完整性驗(yàn)證存根702中定義完整性驗(yàn)證觸發(fā)點(diǎn),其又實(shí)現(xiàn)對(duì)可信模塊40的向下調(diào)用。可選地,可以將完整性驗(yàn)證觸發(fā)點(diǎn)與商業(yè)邏輯集成,使得在應(yīng)用運(yùn)行時(shí)間期間要求向下調(diào)用704,以便調(diào)用某些商業(yè)邏輯(與可信模塊40鏈接),其轉(zhuǎn)而可以調(diào)用完整性驗(yàn)證檢查。隨后,部署非本機(jī)應(yīng)用600、可信模塊40和已加密哈希值710。在應(yīng)用啟動(dòng)時(shí)或運(yùn)行時(shí)間期間,如完整性觸發(fā)點(diǎn)所確定的,完整性驗(yàn)證存根702被非本機(jī)應(yīng)用600調(diào)用。完整性驗(yàn)證存根702喚起對(duì)可信模塊40的向下調(diào)用,用信號(hào)通知完整性驗(yàn)證檢查運(yùn)行。完整驗(yàn)證存根702可以將應(yīng)用上下文信息傳遞至可信模塊40,以便被可信模塊40用于完整性驗(yàn)證。此后,可信模塊40對(duì)來自完整性驗(yàn)證存根702組件的請(qǐng)求進(jìn)行認(rèn)證并調(diào)用完整性驗(yàn)證處理程序708,其為本機(jī)代碼函數(shù)。如果可信模塊40不能對(duì)調(diào)用應(yīng)用進(jìn)行認(rèn)證,則非本機(jī)應(yīng)用600能夠調(diào)用應(yīng)用特定失敗策略。隨后,可信模塊40根據(jù)被向其傳遞的非本機(jī)應(yīng)用上下文信息來識(shí)別應(yīng)用子組件,并將一個(gè)或多個(gè)內(nèi)部應(yīng)用子組件哈希值710解密??尚拍K40通過對(duì)應(yīng)用600施以向上調(diào)用并檢索存儲(chǔ)器內(nèi)子組件表示來執(zhí)行應(yīng)用子組件的動(dòng)態(tài)完整性驗(yàn)證比較檢查??尚拍K40然后計(jì)算存儲(chǔ)器內(nèi)子組件的哈希值并與用應(yīng)用部署的已解密哈希值相比較。如果完整性驗(yàn)證比較檢查失敗,則可信模塊40可能使用在應(yīng)用預(yù)先提供步驟中確定的失敗策略而使非本機(jī)應(yīng)用600失敗。一旦完成,可信模塊104可以可選地返回完整性驗(yàn)證存根702向下調(diào)用方法調(diào)用的狀態(tài)結(jié)果。圖13示出了根據(jù)本公開的實(shí)施例的用于反調(diào)試的示例性過程。過程包括以下各項(xiàng)。在部署非本機(jī)應(yīng)用600之前,針對(duì)非本機(jī)應(yīng)用600定義反調(diào)試策略。該策略被可信模塊40啟用,并且能夠以各種方式被觸發(fā),例如:a)通過指定的向下調(diào)用;b)通過指定的完整性驗(yàn)證檢查;以及c)通過指定的安全加載程序調(diào)用,其全部可被成為被關(guān)聯(lián)至非本機(jī)應(yīng)用600的非本機(jī)應(yīng)用存根的一部分。在非本機(jī)應(yīng)用執(zhí)行期間,可以從可信模塊104內(nèi)觸發(fā)和啟動(dòng)反調(diào)試檢查??尚拍K40內(nèi)的反調(diào)試處理程序806被調(diào)用以執(zhí)行反調(diào)試平臺(tái)和語言特定檢查,諸如:a)基于時(shí)間的反調(diào)制;b)基于例外的反調(diào)試;以及c)應(yīng)用運(yùn)行時(shí)間特定檢查。本公開討論了能夠保護(hù)虛擬機(jī)應(yīng)用的可信模塊的部署。如本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到的,單個(gè)可信模塊能夠服務(wù)于不止一個(gè)VM。此外,本公開可以與大范圍的廣泛使用的計(jì)算平臺(tái)有關(guān)。在先前的描述中,出于說明的目的,闡述了許多細(xì)節(jié)以便提供對(duì)實(shí)施例的透徹理解。然而,如本領(lǐng)域的技術(shù)人員而言將顯而易見的是這些特定細(xì)節(jié)并不是要求的。在其他實(shí)例中,以框圖形式示出了眾所周知的電結(jié)構(gòu)和電路以便不會(huì)使理解混淆。例如,未提供關(guān)于本文所述的實(shí)施例被實(shí)現(xiàn)為軟件例程、硬件電路、固件還是其組合的特定細(xì)節(jié)。本公開的實(shí)施例可以表示為存儲(chǔ)在機(jī)器可讀介質(zhì)(也被稱為計(jì)算機(jī)可讀介質(zhì)、處理器可讀介質(zhì)或計(jì)算機(jī)可用介質(zhì),在其中體現(xiàn)有計(jì)算機(jī)可讀程序代碼)中的計(jì)算機(jī)程序產(chǎn)品。機(jī)器可讀介質(zhì)可以是任何適當(dāng)?shù)挠行?、非瞬態(tài)介質(zhì),包括磁、光或電存儲(chǔ)介質(zhì),包括磁碟、緊湊盤只讀存儲(chǔ)器(CD-ROM)、存儲(chǔ)器件(易失性或非易失性)或類似存儲(chǔ)機(jī)制。機(jī)器可讀介質(zhì)可以包含指令、代碼序列、配置信息或其他數(shù)據(jù)的各種集合,其在被執(zhí)行時(shí)使處理器執(zhí)行根據(jù)本公開的實(shí)施例的方法中的步驟。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到實(shí)現(xiàn)所述實(shí)施方式所需的其他指令和操作也可以被存儲(chǔ)在機(jī)器可讀介質(zhì)上。存儲(chǔ)在機(jī)器可讀介質(zhì)上的指令能夠被處理器或其他適當(dāng)處理設(shè)備執(zhí)行,并且能夠與電路對(duì)接以執(zhí)行所述任務(wù)。上述實(shí)施例意圖僅僅是示例。在不脫離僅僅由所附權(quán)利要求定義的范圍的情況下,可以由本領(lǐng)域的技術(shù)人員對(duì)特定實(shí)施例實(shí)現(xiàn)替換、修改和變更。