專利名稱:驗證自修改的計算機(jī)代碼校驗和的方法、裝置及程序載體的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總地涉及軟件,具體地涉及確保動態(tài)重新定位的軟件的完整性。
背景技術(shù):
本部分旨在向讀者介紹可能與下面描述的和/或聲明的本發(fā)明的各個方面有關(guān)的技術(shù)的各個方面。相信本討論有助于向讀者提供背景信息以便促進(jìn)對本發(fā)明各個方面的更好的理解。相應(yīng)地,應(yīng)該理解要鑒于此來閱讀這些說明,而不是作為對現(xiàn)有技術(shù)的承認(rèn)。相對普遍的是,軟件提供商保護(hù)計算機(jī)程序的完整性的目的在于確保程序按照意圖來執(zhí)行。然而,黑客通常試圖非法闖入(hack)程序以便以不同的方式來執(zhí)行。一個示例是,為了能夠在沒有必要的訪問權(quán)限的情況下使用程序,黑客有時希望修改代碼以便避開該程序的訪問控制特征。出于若干原因,受保護(hù)的軟件的這種逆向工程是迭代處理。首先,應(yīng)用程序通常太大而不能完全地逐步執(zhí)行。其次,當(dāng)保護(hù)機(jī)制檢測到逆向活動時,黑客必須重新啟動應(yīng)用程序的執(zhí)行以便繼續(xù)分析。一種防止黑客從一個執(zhí)行到下一個執(zhí)行中學(xué)習(xí)(learn)的有效手段為尋址空間隨機(jī)化,這是由于該手段阻礙了函數(shù)上使用之前被精確定位于已知地址處的斷點。當(dāng)前,主要在如堆棧中尋址空間布局隨機(jī)化(ASLR)的上下文中使用尋址空間隨機(jī)化以防止緩沖溢出攻擊。例如,ASLR使得部分(section)的位置不可預(yù)測以便抵抗重放攻擊(r印lay attack)。進(jìn)一步,一些應(yīng)用程序在隨機(jī)地址處動態(tài)地替換部分代碼。Bhatkar 等人(參見 Sandeep Bhatkar, Daniel C. DuVarney ^P R. Sekar.的 Address Obfuscation An Efficient Approach to Combata Broad Range of Memory Error Exploits. In Proceedings of the USENIX SecuritySymposium. USENIX, 2003)提出了一種使用尋址空間隨機(jī)化用于代碼保護(hù)的不同的方法。然而,他們認(rèn)為不可能在比代碼段更小的間隔尺寸 (granularity)上引入隨機(jī)尋址空間。另外,由于代碼在存儲空間中移動,尋址空間隨機(jī)化也使得使用軟件完整性驗證更加困難。為了對抗篡改攻擊,使用這種完整性驗證技術(shù)以確保代碼還沒有被修改。驗證程序完整性的現(xiàn)有技術(shù)方法在代碼的至少一些部分上計算簽名(亦稱,校驗和)。簽名例如可以是在部分代碼上計算的、并且然后使用秘密密鑰簽名的散列值。本領(lǐng)域技術(shù)人員將認(rèn)識到存在許多其它可能性。在程序執(zhí)行期間,至少計算一次代碼的簽名。為了增加安全級別,對計算簽名的函數(shù)進(jìn)行嵌套,使得通過至少一個其它函數(shù)驗證每個函數(shù)的完整性。從而,如果僅僅一個函數(shù)保持完好,則其將檢測到篡改了至少一個其它函數(shù)。例如可以在US 2003/188231以及EP 1942431中發(fā)現(xiàn)進(jìn)一步細(xì)節(jié)以及闡述,并且US2002/138748 教示了怎樣為可重新定位代碼確定完整性。不幸地,完整性驗證技術(shù)容易受到諸如使用硬件斷點的逆向工程的攻擊。由于軟件完整性驗證也是對抗逆向工程的有用工具,所以將認(rèn)識到存在期望確保使用尋址空間隨機(jī)化的軟件程序的完整性的情況。因而,校驗動態(tài)重新定位的代碼的完整性成為問題。一種普通的解決方案是將重新定位的代碼的范圍作為輸入?yún)?shù)傳遞至校驗和函數(shù)。從安全的角度,這是不可接受的,這是由于其向攻擊者揭示了被保護(hù)的函數(shù)的范圍以及參考值。因而,將認(rèn)識到需要一種在不揭示關(guān)于函數(shù)的這樣的細(xì)節(jié)的情況下、使得能夠在重新定位的函數(shù)上計算校驗和的解決方案。本申請?zhí)峁┝诉@樣的解決方案。
發(fā)明內(nèi)容
在第一方面,本發(fā)明針對一種在包括函數(shù)代碼的軟件程序在裝置中執(zhí)行期間在存儲器內(nèi)重新定位函數(shù)代碼的方法。處理器在包括啞代碼的存儲器的區(qū)中重新定位函數(shù)代碼,以可預(yù)測的方式變換該tt代碼,基于先前的校驗和生成用于該區(qū)的預(yù)測的校驗和,生成關(guān)于該區(qū)的計算的校驗和,以及通過將預(yù)測的校驗和與計算的校驗和相比較來驗證函數(shù)代碼的完整性。在第一優(yōu)選實施例中,用于區(qū)的校驗和是用于函數(shù)代碼的校驗和與用于啞代碼的校驗和的組合。有利地,函數(shù)代碼是與位置無關(guān)的恒定校驗和的值。還有利地,使用重新定位表計算用于預(yù)測的校驗和的函數(shù)代碼的校驗和。進(jìn)一步有利地,啞代碼的變換包括置換 (permutation);優(yōu)選地啞代碼的校驗和沒有被該變換改變,并且優(yōu)選地啞代碼的變換包括按照預(yù)定尺寸的塊的置換。還有利地,作為替換,該變換是線性的,對啞代碼的校驗和具有可預(yù)測效果。在第二優(yōu)選實施例中,啞代碼為真實代碼。在第三優(yōu)選實施例中,將函數(shù)代碼實現(xiàn)為模塊或指令塊。在第二優(yōu)選實施例中,存儲器的區(qū)包括當(dāng)計算校驗和的值時還使用的其他函數(shù)代碼以及其他啞代碼。在第二方面,本發(fā)明針對一種用于軟件程序的執(zhí)行以及在軟件程序執(zhí)行期間在存儲器中該軟件程序的函數(shù)代碼的重新定位的裝置。該裝置包括存儲器,用于在存儲器的區(qū)中存儲函數(shù)代碼以及啞代碼;以及處理器,用于在存儲器的區(qū)中重新定位函數(shù)代碼,以可預(yù)測的方式變換 代碼,基于先前的校驗和生成用于區(qū)的預(yù)測的校驗和,生成關(guān)于該區(qū)的計算的校驗和,以及通過將預(yù)測的校驗和與計算的校驗和相比較來驗證函數(shù)代碼的完整性。在第三方面,本發(fā)明針對一種在其上存儲軟件程序的指令的計算機(jī)程序產(chǎn)品,其中當(dāng)被存儲在存儲器中并且被處理器執(zhí)行時,所述指令執(zhí)行本發(fā)明的第一方面的方法。
現(xiàn)在將參照附圖,以非限制示例的方式描述本發(fā)明的優(yōu)選特征,其中圖1圖示了可以在其上實施本發(fā)明的示范性計算裝置;圖2圖示了根據(jù)本發(fā)明優(yōu)選實施例的可重新定位代碼的完整性驗證;圖3圖示了根據(jù)本發(fā)明優(yōu)選實施例的使用多重范圍的代碼保護(hù)的進(jìn)一步的可能性;以及
圖4圖示了根據(jù)本發(fā)明優(yōu)選實施例的用于被保護(hù)的程序的執(zhí)行的方法的流程圖。
具體實施例方式圖1圖示了可以在其上實施本發(fā)明的示范性計算裝置(“計算機(jī)”)100。計算機(jī)100 可以為能夠執(zhí)行計算的任何類型的適當(dāng)?shù)挠嬎銠C(jī)或裝置,例如標(biāo)準(zhǔn)的個人計算機(jī)(PC)。計算機(jī)100包括至少一個處理器110、RAM存儲器120、用于與用戶交互的用戶接口 130、以及用于從數(shù)字?jǐn)?shù)據(jù)載體150讀取用于執(zhí)行本發(fā)明的方法的軟件程序的第二接口 140。本領(lǐng)域技術(shù)人員將認(rèn)識到,出于清楚的原因所圖示的計算機(jī)被極其簡化并且真實的計算機(jī)另外將包括諸如網(wǎng)絡(luò)連接以及永久存儲裝置之類的特征。圖2圖示了根據(jù)本發(fā)明優(yōu)選實施例的自修改(self-modified)的可重新定位代碼的完整性驗證。圖2圖示了兩個不同時間tA與tB時的存儲器200的內(nèi)容,其中tA在tB之前;在tA時的存儲器被表示為200A而tB時的存儲器被表示為200B,但是將認(rèn)識到其通常為同一物理存儲器。tA可對應(yīng)于初始狀態(tài),即,原始位置的函數(shù)代碼,但其也可以對應(yīng)于其中函數(shù)代碼已經(jīng)被重新定位了至少一次的“重新定位”的狀態(tài)。在、時,存儲器200A包括調(diào)用指令210、具有啞代碼(dummy code) 231A的第一區(qū)域、被保護(hù)的函數(shù)代碼220、以及具有啞代碼232A的第二區(qū)域。啞代碼231A、232A以及被保護(hù)的函數(shù)代碼220的區(qū)域在存儲器中相鄰,形成了被用作校驗和范圍的區(qū)R。通過校驗和函數(shù)260執(zhí)行校驗和驗證。在執(zhí)行期間,調(diào)用指令210調(diào)用240A被保護(hù)的函數(shù)220的地址。 斜線陰影的區(qū)域旨在圖示與本發(fā)明優(yōu)選實施例無關(guān)的存儲器區(qū)域-例如,空的或存儲其它函數(shù)。被保護(hù)的函數(shù)220例如可以是模塊,S卩,一組(多個塊的)指令、或一個或多個指令的塊。在tB時,已經(jīng)將被保護(hù)的函數(shù)220重新定位250到存儲器200B中的第二地址(優(yōu)選是隨機(jī)的),存儲器200B還包括調(diào)用指令210、具有啞代碼231B的第一區(qū)域、以及具有啞代碼232B的第二區(qū)域。第二地址是這樣的整個被保護(hù)的函數(shù)220仍然位于區(qū)R,并且啞代碼231B、232B以及被保護(hù)的函數(shù)代碼220的區(qū)域在存儲器中相鄰,形成區(qū)R。地址之間的差圖示為跳動(jitter) J。在執(zhí)行期間,調(diào)用指令210調(diào)用240B重新定位的被保護(hù)的函數(shù) 220的地址(即,第二地址)。通過校驗和函數(shù)260執(zhí)行校驗和驗證。將認(rèn)識到啞代碼231A、231B的第一區(qū)域或啞代碼232A、232B的第二區(qū)域可能不存在,換句話說,被保護(hù)的函數(shù)或者剛好在區(qū)R的起始處開始或者剛好在區(qū)R的結(jié)尾處結(jié)束。 還將認(rèn)識到被保護(hù)的函數(shù)代碼220可能在重新定位之前和之后是相同的或者不同的(例如,通過包括用于函數(shù)調(diào)用的調(diào)整后的地址)。將進(jìn)一步認(rèn)識到調(diào)用函數(shù)可能在重新定位之前和之后是相同的或不同的(變換的)。因而,通過在被保護(hù)的函數(shù)的地址周邊添加跳動J來對抗基于硬件斷點的逆向工程的攻擊。(有規(guī)律的、以可變的間隔或至少一次地)將被保護(hù)的函數(shù)重新定位到利用啞代碼填補(bǔ)的區(qū)R中的不同的(優(yōu)選隨機(jī)的)地址??梢允褂貌恢挂粋€區(qū)R來保護(hù)軟件程序。 為了確保反篡改,將區(qū)R與校驗和函數(shù)260組合。一種實施其的方式在于本發(fā)明包括兩個參與者校驗和函數(shù)260以及代碼修改引擎。校驗和函數(shù)260優(yōu)選地專用于要保護(hù)的區(qū)R。區(qū)R包括啞代碼以及要保護(hù)的函數(shù)的代碼。在任何時刻,如果被保護(hù)的函數(shù)代碼沒有隨時間改變并且具有恒定的校驗和的值 (或者如果改變是可預(yù)測的),則R的校驗和的值是可預(yù)測的,并且以可預(yù)測方式在時間上變換啞代碼,以便使得能夠確定地預(yù)測校驗和的值。代碼 修改引擎優(yōu)選地被嵌入在應(yīng)用程序中并且通過在區(qū)R中重新定位被保護(hù)的函數(shù)(如圖2圖示)、通過將被保護(hù)的函數(shù)的調(diào)用點固定在新的移動的偏移量,以及通過變換啞代碼,來至少自動地修改被保護(hù)的函數(shù)代碼。啞代碼的變換優(yōu)選地包括使用第二函數(shù)來執(zhí)行置換(permutation)以及可能使用生成可預(yù)測輸出以便使得能夠預(yù)測校驗和的值的加密方法來加密啞代碼。從而啞代碼的完整性的值以可預(yù)測方式隨時間改變。在優(yōu)選實施例中,被保護(hù)的函數(shù)的校驗和的值在重新定位后不改變。如果該函數(shù)包括例如可以使用編譯器的編譯選項(_fpic)生成的與位置無關(guān)的的代碼,這是可能的。實現(xiàn)與位置無關(guān)的代碼的一種方式為使得被保護(hù)的函數(shù)120的調(diào)用是間接的,例如,通過參考導(dǎo)入地址表(IAT)表中的跳轉(zhuǎn)地址。以此方式,如果移動了跳轉(zhuǎn)地址,調(diào)用指令不會改變,并且調(diào)用被保護(hù)指令的校驗和的值恒定。然而,如果不可能獲得與位置無關(guān)的代碼,然而有可能預(yù)測重新定位的被保護(hù)的函數(shù)的校驗和的值。其缺點是校驗和函數(shù)更為復(fù)雜并且需要訪問被嵌入在應(yīng)用程序二進(jìn)制首標(biāo)中的重新定位表(對于Windows的.reloc部分)。使用該信息,有可能計算出重新定位的函數(shù)的校驗和的值而不求助于被用于驗證被保護(hù)的函數(shù)的完整性的校驗和函數(shù)260。如已經(jīng)提及的,被保護(hù)的程序可以具有多個被保護(hù)的區(qū)R。例如有可能具有不重疊的兩個相區(qū)別的區(qū)Rl與R2,如參照圖2描述的,每個區(qū)容納被保護(hù)的函數(shù)。函數(shù)優(yōu)選為具有至少一個(優(yōu)選地正好是一個)進(jìn)入點與至少一個退出點的一組指令。有利地,函數(shù)包括許多指令使得該函數(shù)自身不是微不足道的,但不是包括太多的指令而使得該函數(shù)變得“龐大”而不能重新定位。圖3圖示了根據(jù)本發(fā)明優(yōu)選實施例的使用多重范圍用于代碼保護(hù)的另一種可能性。存儲器300包括關(guān)于第一被保護(hù)的函數(shù)321的第一調(diào)用指令311以及關(guān)于第二被保護(hù)的函數(shù)322的第二調(diào)用指令312。通過啞代碼331、332、333、334圍繞每個被保護(hù)的函數(shù) 321、322,并且通過使各自的調(diào)用指令311、312調(diào)用341、342被保護(hù)的函數(shù)321、322的地址來執(zhí)行每個函數(shù)321、322。如可見的,存儲器300包括每一個通過校驗和保護(hù)的兩個區(qū),Rl和R2。區(qū)Rl包括第一被保護(hù)的函數(shù)321以及圍繞的啞代碼331、332。與已描述的其中每個區(qū)對應(yīng)于不同的函數(shù)的實施例不同,區(qū)R2包括區(qū)R1、第二被保護(hù)的函數(shù)322及其圍繞的啞代碼333、334。 將認(rèn)識到在區(qū)Rl以及啞代碼區(qū)域333之間的斜線陰影區(qū)域優(yōu)選是不改變的;如果其改變, 則其應(yīng)該以可預(yù)測方式進(jìn)行。最簡單的解決方案是使得區(qū)Rl與區(qū)R2相鄰,但是當(dāng)然也可以確保從不接觸(touch)該斜線陰影區(qū)域。假設(shè)校驗和范圍與任何區(qū)沒有任何局部的交集(intersection)并且其不包括關(guān)于任何區(qū)的調(diào)用點,從而校驗和范圍可以包括若干區(qū)。如果不符合這些要求,則很有可能完整性的值不是恒定的并且在時間上是不可預(yù)測的。至于校驗和函數(shù),優(yōu)選選擇滿足校驗和可預(yù)測性以及校驗和對準(zhǔn)(alignment)的要求。校驗和可預(yù)測性意味著校驗和函數(shù)能夠從先前的校驗和的值(即,在最近的變換之前的校驗和的值)中獲得當(dāng)前校驗和的值。對此進(jìn)行表示的另一方式是校驗和函數(shù)能夠從目前的校驗和的值獲得下一個校驗和的值。區(qū)的校驗和的值優(yōu)選為以下兩個來源的組合啞代碼的校驗和以及被保護(hù)的函數(shù)的校驗和。如已經(jīng)提 及的,如果可以不經(jīng)修改重新定位被保護(hù)的函數(shù)(例如,Linux可重新定位代碼),則其校驗和是不變量,這是優(yōu)選特征。在該情況下,校驗和在重新定位之前以及之后保持一致。然而,如果被保護(hù)的函數(shù)不是校驗和-不變量,校驗和函數(shù)依靠程序的重新定位表來計算重新定位對代碼的影響以便能夠生成正確的校驗和的值,這也是可能的。另外,啞代碼的校驗和必須為確定性的。在每次變換時,由E (M)替換啞代碼(M)。 在η次變換后,校驗和的值C等于EoE. . . oE (M) = En (M)。有可能選擇簡單的線性變換使得 C = En (M) = n*E0 (M)。則在η次變換后Cn (區(qū))=Cn (函數(shù))+Cn (啞代碼)= C(函數(shù))+η*Ε0(Μ)= Α。+η*Β0其中Atl為校驗和-不變量保護(hù)的函數(shù)的校驗和的值,而Btl為初始的啞代碼的校驗禾口。從而,可通過依賴于輸入η的多項式方程而發(fā)現(xiàn)區(qū)R的校驗和的值,其中η為隨時間變換的次數(shù)。校驗和對準(zhǔn)意味著無論被保護(hù)的函數(shù)位于區(qū)R的何處(即,盡管其分割啞代碼區(qū)域),圍繞被保護(hù)的函數(shù)的兩個(或者有可能只有一個)啞代碼區(qū)域的校驗和的值恒定。這可以這樣實現(xiàn)通過按塊選擇校驗和函數(shù)使得分割的跳動J為單位校驗和塊尺寸的倍數(shù)。 典型地,在4字節(jié)的塊尺寸上操作的校驗和允許以作為4字節(jié)的倍數(shù)的隨機(jī)地址進(jìn)行分割。 至少在這種情況下,可能對該函數(shù)進(jìn)行填充使得其長度為4字節(jié)的倍數(shù)是必須的,使得該函數(shù)以及啞代碼占據(jù)整個區(qū)R。代碼修改引擎被適配為在程序執(zhí)行期間在區(qū)R內(nèi)重新定位被保護(hù)的函數(shù)。為了這樣做,代碼修改引擎應(yīng)知道調(diào)用被保護(hù)的函數(shù)的調(diào)取(invocation)點。這可通過后構(gòu)建 (post-build)工具來完成在編譯時-執(zhí)行程序的靜態(tài)分析以便推導(dǎo)調(diào)用圖(callgraph)以及指令塊,-在調(diào)用圖上確定關(guān)于被保護(hù)的函數(shù)的調(diào)取點,以及-計算每個區(qū)的校驗和參考值。在運(yùn)行時-當(dāng)代碼修改引擎重新定位被保護(hù)的函數(shù)時,其應(yīng)該也將調(diào)用指令的偏移量固定到該函數(shù)(調(diào)取點)。典型地,在每次變換時,代碼修改引擎-生成隨機(jī)偏移量,-使用該隨機(jī)偏移量在區(qū)R內(nèi)移動被保護(hù)的函數(shù),-以特定的變換算法(如已經(jīng)在此描述的)在區(qū)R內(nèi)變換啞代碼,-將被保護(hù)的函數(shù)的所有調(diào)取點的偏移量固定到隨機(jī)偏移量,以及
-有利地在安全的位置存儲當(dāng)前變換的次數(shù)η。該次數(shù)η隨后可以用于校驗和例程以計算啞代碼的校驗和的值。將認(rèn)識到在實踐中,在變換期間可能有必要臨時存儲啞代碼、函數(shù)或啞代碼和函數(shù)二者,以便確保一個不被另一個覆蓋。
校驗和函數(shù)優(yōu)選與代碼修改引擎無關(guān);無論何時計算校驗和,通過設(shè)計使其不變。優(yōu)選地以隨機(jī)間隔或以預(yù)定的執(zhí)行點在程序內(nèi)通過附加線程調(diào)用多重校驗和函數(shù)。后構(gòu)建工具也應(yīng)該在程序內(nèi)注入用于每個被保護(hù)的區(qū)的初始校驗和的值(在任何變換之前),以便呈現(xiàn)(render)可能的校驗和驗證。圖4圖示了根據(jù)本發(fā)明優(yōu)選實施例的用于被保護(hù)程序執(zhí)行的方法的流程圖。該程序在步驟410正常執(zhí)行。在給定點處,重新定位420 —個或更多被保護(hù)的函數(shù),如在此先前描述的。然后計算430重新定位后的函數(shù)的校驗和,如在此先前描述的。優(yōu)選地,校驗和函數(shù)260對重新定位后的函數(shù)的完整性至少驗證440 —次?!罢!背绦驁?zhí)行然后在步驟410 恢復(fù)。本領(lǐng)域技術(shù)人員將認(rèn)識到本發(fā)明所保護(hù)的程序為自動修改的各區(qū)的內(nèi)容隨時間變換,這能夠使其對典型的轉(zhuǎn)換旁路緩沖(Translation LookasideBuffer, TLB)攻擊具有抵抗力,其中程序操縱虛擬地址,而硬件作用于物理地址。TLB是允許在這樣的地址之間轉(zhuǎn)換的表。本領(lǐng)域技術(shù)人員還將認(rèn)識到本發(fā)明將一些跳動添加到函數(shù)的開始地址,這可以使函數(shù)對硬件斷點以及重放攻擊具有抵抗力。本領(lǐng)域技術(shù)人員也將認(rèn)識到本發(fā)明使用被保護(hù)的函數(shù)周圍的一些啞代碼,這可以對抗代碼的反匯編。本領(lǐng)域技術(shù)人員也將認(rèn)識到軟件完整性可以是秘密的。函數(shù)映射的隨機(jī)化出現(xiàn)在代碼部分而不是在堆(heap)中。在另一實現(xiàn)方式中,也有可能將函數(shù)重新定位在堆中的隨機(jī)地址處(利用mallocO的所分配的緩沖中),但是然后以秘密方式計算函數(shù)的完整性變得更加困難。根據(jù)本發(fā)明優(yōu)選實施例,在其它傳統(tǒng)(legacy)代碼中插入被保護(hù)的區(qū),使得有可能在包含該區(qū)的更大的區(qū)域上應(yīng)用校驗和范圍,而無需明確提及該區(qū)的開始和范圍。本領(lǐng)域技術(shù)人員也將認(rèn)識到區(qū)的完整性通過設(shè)計是確定性的并且是可預(yù)測的。代碼修改與完整性屬性沒有聯(lián)系??梢岳每赡芸缭饺魏螘r間的多重校驗的范圍來實施完整性,這是因為區(qū)的完整性值即便被隨機(jī)化,也是可預(yù)測的。本領(lǐng)域技術(shù)人員還將認(rèn)識到在此使用的“啞代碼”的表達(dá)可以是隨機(jī)的或偽隨機(jī)的數(shù)據(jù),與隨機(jī)生成的無意義代碼接近,但是其也可以是真實、功能性的代碼(例如,從不再使用的舊程序中取得的)。優(yōu)選地,啞代碼類似于真實代碼,因為這樣使得攻擊者分析存儲器的內(nèi)容更加困難。另一種看待其的方式是 代碼是不與函數(shù)代碼對應(yīng)的區(qū)中的數(shù)據(jù) (即,非函數(shù)數(shù)據(jù)),并且為不包含函數(shù)代碼的區(qū)的部分生成校驗和。將認(rèn)識到本發(fā)明能夠提供一種驗證重新定位的軟件代碼的完整性的方式??梢詥为?dú)地或以任何適當(dāng)?shù)慕M合來提供在說明書和(在適當(dāng)?shù)那闆r下)權(quán)利要求書以及附圖中所公開的每個特征。被描述為在硬件中實施的特征也可在軟件中實施,并且反之亦然。在權(quán)利要求書中出現(xiàn)的參考數(shù)字僅用于說明而不應(yīng)該對權(quán)利要求的范圍有限制影響。
權(quán)利要求
1.一種在包括函數(shù)代碼(220)的軟件程序在裝置(100)中執(zhí)行(410)期間在存儲器 (200)中重新定位所述函數(shù)代碼(220)的方法,所述方法包括處理器(110)中的如下步驟-在包括啞代碼(231,232)的存儲器(200)的區(qū)(R)中重新定位(420)函數(shù)代碼 (220);-以可預(yù)測的方式變換所述啞代碼(231,232); -基于先前的校驗和生成用于所述區(qū)(R)的預(yù)測的校驗和; -生成關(guān)于所述區(qū)(R)的計算的校驗和;以及-通過將預(yù)測的校驗和與計算的校驗和相比較,驗證(440)所述函數(shù)代碼(220)的完整性。
2.如權(quán)利要求1所述的方法,其中,用于所述區(qū)的校驗和是用于所述函數(shù)代碼(220)的校驗和與用于所述啞代碼(231,232)的校驗和的組合。
3.如權(quán)利要求2所述的方法,其中,所述函數(shù)代碼(220)是與位置無關(guān)的、具有恒定校驗和的值。
4.如權(quán)利要求2所述的方法,其中,使用重新定位表來計算用于預(yù)測的校驗和的所述函數(shù)代碼(220)的校驗和。
5.如權(quán)利要求2所述的方法,其中,所述啞代碼(231,232)的變換包括置換。
6.如權(quán)利要求5所述的方法,其中,所述變換不改變所述啞代碼(231、232)的校驗和。
7.如權(quán)利要求5所述的方法,其中,所述啞代碼(231,232)的變換包括按照預(yù)定尺寸的塊的置換。
8.如權(quán)利要求2所述的方法,其中,所述變換是線性的,對所述 代碼(231,232)的校驗和具有可預(yù)測的效果。
9.如權(quán)利要求1所述的方法,其中,所述存儲器(200;300)的區(qū)(R2)包括當(dāng)計算校驗和的值時還使用的其他函數(shù)代碼(321)以及其他啞代碼(331,332)。
10.如權(quán)利要求1所述的方法,其中,所述 代碼為真實代碼。
11.如權(quán)利要求1所述的方法,其中,所述函數(shù)代碼被實現(xiàn)為模塊或指令塊。
12.一種用于軟件程序的執(zhí)行以及在所述軟件程序的執(zhí)行(410)期間在存儲器(200) 中重新定位所述軟件程序的函數(shù)代碼(220)的裝置(100),所述裝置(100)包括-存儲器(120;200),用于在所述存儲器(120;200)的區(qū)(R)中存儲所述函數(shù)代碼 (220)以及啞代碼(231,232);以及 -處理器(110),用于-在所述存儲器(200)的區(qū)(R)中重新定位所述函數(shù)代碼(220); -以可預(yù)測方式變換所述啞代碼(231,232); _基于先前的校驗和生成用于所述區(qū)(R)的預(yù)測的校驗和; -生成關(guān)于所述區(qū)(R)的計算的校驗和;以及-通過將預(yù)測的校驗和與計算的校驗和相比較,驗證(440)所述函數(shù)代碼(220)的完整性。
13.一種在其上存儲軟件程序的指令的計算機(jī)程序產(chǎn)品(150),其中當(dāng)被存儲在存儲器(200)中并且由處理器(110)執(zhí)行時,所述指令執(zhí)行以下步驟-在包括啞代碼(231,232)的存儲器(200)的區(qū)(R)中重新定位(420)所述軟件程序的函數(shù)代碼(220);-以可預(yù)測方式變換所述啞代碼(231,232); -基于先前的校驗和生成用于所述區(qū)(R)的預(yù)測的校驗和; -生成關(guān)于所述區(qū)(R)的計算的校驗和;以及-通過將預(yù)測的校驗和與計算的校驗和相比較,驗證(440)所述函數(shù)代碼(220)的完整
全文摘要
驗證自修改的計算機(jī)代碼校驗和的方法、裝置及程序載體。在軟件程序在裝置(100)中執(zhí)行(410)期間在存儲器(200)中存儲該軟件程序的函數(shù)(220)。處理器在包括啞代碼(231、232)的存儲器(200)的區(qū)(R)中重新定位(420)函數(shù)(220),以可預(yù)測的方式變換所述啞代碼(231,232),基于先前的校驗和生成用于區(qū)(R)的預(yù)測的校驗和,生成關(guān)于區(qū)(R)的計算的校驗和,以及通過將預(yù)測的校驗和與計算的校驗和相比較,驗證(440)該函數(shù)(220)的完整性。也提供了一種裝置(100)以及一種計算機(jī)程序產(chǎn)品(150)。
文檔編號G06F21/54GK102222196SQ20111009603
公開日2011年10月19日 申請日期2011年4月18日 優(yōu)先權(quán)日2010年4月16日
發(fā)明者安托萬·蒙西弗羅特, 查爾斯·薩蒙-萊加諾伊爾 申請人:湯姆森特許公司