欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)字數(shù)據(jù)保護設(shè)備的制作方法

文檔序號:6472406閱讀:380來源:國知局
專利名稱:數(shù)字數(shù)據(jù)保護設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及用于數(shù)字數(shù)據(jù)的保護設(shè)備。
數(shù)字數(shù)據(jù)包括軟件文件以及數(shù)據(jù)文件,由于各種原因需要對它進行保護。例如,需要進行保護以防備未授權(quán)復(fù)制。就軟件來說,需要進行保護以防備由于病毒的攻擊、黑客等等引起的損壞。
本發(fā)明試圖提供一種用于數(shù)字數(shù)據(jù)的改進保護設(shè)備。
本發(fā)明提供一種數(shù)字數(shù)據(jù)保護設(shè)備,包括可執(zhí)行代碼,該代碼加入了與受保護數(shù)據(jù)相關(guān)的充分信息,以用于當它被執(zhí)行時,能以可用形式創(chuàng)建包含該受保護數(shù)據(jù)的深一層代碼。
該設(shè)備可以包括安全裝置,該安全裝置可操作用于檢測受保護數(shù)據(jù)的受損情況,深一層代碼包括至少一條用來調(diào)用該安全裝置以便評估任何受損情況的指令。該調(diào)用指令最好包含在一組可執(zhí)行代碼需要的位置的深一層代碼內(nèi),其中當該安全裝置執(zhí)行時,該安全裝置可操作用于重新創(chuàng)建可執(zhí)行代碼組,以取代該調(diào)用指令。如果檢測到任何損壞,該安全裝置最好可操作用于刪除深一層代碼。
該設(shè)備可進一步包括重定位裝置,該重定位裝置可操作用于對該安全裝置位置進行改變以及對該調(diào)用指令進行修改以便指向新位置。該重定位裝置可以包含于受保護數(shù)據(jù)內(nèi),以便當受保護代碼在使用中時,重復(fù)地進行操作。
該可執(zhí)行代碼可以包含用來創(chuàng)建受保護代碼的可執(zhí)行指令。該可執(zhí)行代碼的執(zhí)行最好安裝那些用于執(zhí)行的解密指令,該解密指令的后續(xù)執(zhí)行將引起對受保護數(shù)據(jù)的解密。最初該解密指令可采用不可執(zhí)行形式進行存儲,并且它需要執(zhí)行以便授權(quán)受保護軟件執(zhí)行,該設(shè)備進一步包括轉(zhuǎn)換裝置,該轉(zhuǎn)換裝置可操作用于通過需要至少一個轉(zhuǎn)換密鑰的算法將所述代碼轉(zhuǎn)換成可執(zhí)行形式,并且還可操作用于通過參考可執(zhí)行或是不可執(zhí)行形式的目標代碼塊來導(dǎo)出供該算法使用的轉(zhuǎn)換密鑰,因此只有該目標塊未被修改的情況下,才可導(dǎo)出適當?shù)霓D(zhuǎn)換密鑰。
該安全裝置可包括許多按照不可執(zhí)行形式存儲的可執(zhí)行代碼塊,且每個代碼塊需要執(zhí)行以便授權(quán)受保護軟件的執(zhí)行,該轉(zhuǎn)換裝置可操作用于將每個塊轉(zhuǎn)換成可執(zhí)行形式。每個塊的轉(zhuǎn)換最好通過從各自目標塊而導(dǎo)出的轉(zhuǎn)換密鑰來完成。在執(zhí)行時,最好至少有一個代碼塊可操作用于將另一個塊轉(zhuǎn)換為可執(zhí)行形式以便后續(xù)執(zhí)行。在執(zhí)行時,最好每個塊都可操作用于將另一個塊轉(zhuǎn)換為可執(zhí)行形式以便后續(xù)執(zhí)行。
所述或每個目標塊可以包含在受保護軟件或第一安全裝置之內(nèi)。
用于轉(zhuǎn)換代碼的所述或每個算法可以包括CRC算法。該可執(zhí)行代碼可以將加密形式的受保護數(shù)據(jù)和用于解密的可執(zhí)行指令合并在一起。該受保護數(shù)據(jù)可以包含可執(zhí)行代碼和/或數(shù)據(jù)文件。該設(shè)備包括可操作用于執(zhí)行代碼的處理裝置,以及包括所述可執(zhí)行代碼存儲于其中的存儲裝置,該可執(zhí)行代碼存儲在該存儲裝置中,其中在所述設(shè)備中指示的存儲位置的起始點是受保護數(shù)據(jù)的起始點,因此當試圖訪問該受保護數(shù)據(jù)時,該處理裝置將使所述可執(zhí)行代碼得以執(zhí)行。該可執(zhí)行代碼最好可操作用于重新創(chuàng)建基本上不加密形式的受保護數(shù)據(jù)。
該受保護數(shù)據(jù)包含至少一條可執(zhí)行指令,該條指令包含多個步驟,這些步驟能夠以不止一種順序來執(zhí)行該指令,并且該可執(zhí)行代碼可操作用于通過以改變所述可執(zhí)行代碼的每步執(zhí)行的順序創(chuàng)建步驟,從而創(chuàng)建該指令。步驟的順序最好是在每次執(zhí)行時以基本上隨機的方式加以選定。這些步驟包括至少一個啟動安全裝置操作的步驟,該安全裝置可操作用于檢測受保護數(shù)據(jù)的受損情況。該可執(zhí)行代碼可被執(zhí)行用于在每次要執(zhí)行可執(zhí)行指令時創(chuàng)建這些步驟。
在每次執(zhí)行時,對該可執(zhí)行代碼能夠進行安排,以便提供一部分可用形式受保護數(shù)據(jù)和受損形式的其它數(shù)據(jù),由此需要不止一次地執(zhí)行,從而提供可用形式的全部受保護數(shù)據(jù)。每個部分可以對應(yīng)于受保護數(shù)據(jù)內(nèi)的完整的可執(zhí)行例程,從而構(gòu)成受保護數(shù)據(jù)的完整例程組能夠通過重復(fù)執(zhí)行該可執(zhí)行代碼來創(chuàng)建。可執(zhí)行代碼的每次執(zhí)行最好能導(dǎo)致以前創(chuàng)建的可用代碼被損壞,由此在該設(shè)備操作期間只有由最近的一次執(zhí)行所創(chuàng)建的代碼才會成為可用形式。
本發(fā)明還提供了包含有存儲裝置的計算機系統(tǒng),該計算機系統(tǒng)包括根據(jù)前述定義中任意一項的數(shù)字保護設(shè)備。
本發(fā)明還提供了包括軟件的數(shù)據(jù)載體,當它被安裝到計算機系統(tǒng)時,該軟件可操作作為前面定義中任意一項的數(shù)字數(shù)據(jù)保護設(shè)備。
本發(fā)明還提供了計算機軟件,當它安裝到計算機系統(tǒng)時,該軟件可操作作為前面定義中任意一項的數(shù)字數(shù)據(jù)保護設(shè)備。
本發(fā)明還提供了可操作用于實現(xiàn)對計算機軟件二級條目進行保護的計算機軟件,該保護軟件包括安全裝置,該裝置可操作用于授權(quán)受保護軟件的執(zhí)行,以響應(yīng)一項或多項安全檢查的成功執(zhí)行,且具有至少一個以不可執(zhí)行的形式存儲的可執(zhí)行代碼塊,且它需要執(zhí)行以便授權(quán)受保護軟件的執(zhí)行,并且該受保護軟件進一步包括轉(zhuǎn)換裝置,該轉(zhuǎn)換裝置可操作用于通過需要至少一個轉(zhuǎn)換密鑰的算法將所述代碼塊轉(zhuǎn)換成可執(zhí)行形式,并且所述轉(zhuǎn)換裝置還可操作用于通過參考可執(zhí)行或是不可執(zhí)行形式的目標塊來導(dǎo)出供該算法使用的轉(zhuǎn)換密鑰,因此只有該目標塊未被修改的情況下,才可導(dǎo)出合適的轉(zhuǎn)換密鑰。
本發(fā)明還提供了包括上述計算機軟件的計算機存儲設(shè)備。
本發(fā)明還提供了通過上述計算機軟件受到保護的計算機軟件條目。
現(xiàn)在將根據(jù)附圖僅通過實例的形式,更詳細地描述本發(fā)明的實施例,其中

圖1以高度簡化的形式舉例說明供實施本發(fā)明使用的計算機系統(tǒng);圖2是用于把軟件存儲在RAM中的公知設(shè)備的高層原理表示;圖3舉例說明依照本發(fā)明的RAM的使用;圖4舉例說明依照本發(fā)明且結(jié)合重定位裝置的RAM的使用;
圖5舉例說明依照本發(fā)明且結(jié)合嵌入式安全程序的RAM的使用;圖6舉例說明依照本發(fā)明且結(jié)合自修改裝置的RAM的使用;圖7舉例說明依照本發(fā)明且結(jié)合用于受保護數(shù)據(jù)的局部解密裝置的RAM的使用;圖8是使用獨立的安全塊來實現(xiàn)本發(fā)明的另一個實施例的系統(tǒng)中RAM內(nèi)容的示意圖;圖9與圖8一致,示出了一個替換圖8的實施例方案;圖10示意性舉例說明圖8和圖9中安全軟件列表的一部分;圖11示意性舉例說明圖8和圖9中安全軟件列表的末尾;圖12示意性舉例說明實現(xiàn)本發(fā)明的另外的形式。
為了解釋本發(fā)明,首先簡要描述一下能實現(xiàn)本發(fā)明的簡單計算設(shè)備是很有幫助的。圖1示出了由常規(guī)硬件組件組成的計算設(shè)備10,它包括處理器12,它與適當?shù)妮斎爰拜敵鲈O(shè)備諸如鍵盤14和顯示器16相連接。存儲器配備的形式是硬盤驅(qū)動器18或類似的大容量存儲器設(shè)備,以及在軟件執(zhí)行期間供處理器12使用的RAM(隨機訪問存儲器)20。該設(shè)備類型可以是公知的IBM PC,或者等效或類似的機器。
圖2舉例說明了如何按照慣例使用RAM20來運行存儲于設(shè)備10的硬盤驅(qū)動器18上的軟件。起初,該軟件由處理器12從硬盤驅(qū)動器18裝載到RAM20中,產(chǎn)生序列機器代碼步驟22(如STEP(步驟)1,STEP(步驟)2等所示),該序列代碼步驟按順序存儲在RAM20當中。這些序列步驟以退出指令24結(jié)束。將會意識到在實際例子中,從圖示來看步驟的數(shù)目是可以變化的,而且通常在數(shù)目上是非常大的。
按照慣例,第一個步驟即STEP(步驟)1之前是代碼塊26的裝入程序,當它被執(zhí)行時,引發(fā)其它資源被識別并且使那些資源對于RAM中軟件而言是可利用的,諸如輸入/輸出設(shè)備14、16的驅(qū)動程序,或者由各種不同的應(yīng)用程序共享的其它軟件資源。
在將該軟件裝載到如圖2所示結(jié)構(gòu)的過程中,設(shè)備10的處理器12將會記錄所述可執(zhí)行數(shù)據(jù)塊的起始點,也就是在RAM20中裝入程序26起始的存儲器位置。在圖2(以及在其它圖中)中,通過使用箭頭28來示意性說明該起始點。
當指示設(shè)備10運行已包含于RAM20中的軟件時,處理器12首先定位到RAM20中被認定為起始點28的位置上,并開始執(zhí)行在那個位置所發(fā)現(xiàn)的可執(zhí)行數(shù)據(jù)。因而,處理器12將首先執(zhí)行該裝入程序26,接著執(zhí)行步驟22,最后在退出步驟24結(jié)束。
從圖2中很明顯看到,RAM20中的軟件以未加密形式暴露,因此容易遭到病毒軟件攻擊、未授權(quán)復(fù)制,或是被某個試圖通過創(chuàng)建病毒或其它方式來攻擊該軟件的惡意用戶進行分析。
實施例1圖3舉例說明了根據(jù)本發(fā)明的基本設(shè)備,軟件保護通過該基本設(shè)備被改進。圖3A舉例說明了當依照本發(fā)明受保護軟件被首次從硬盤驅(qū)動器18裝載時,RAM20的狀態(tài)。
在圖3A所示情況中,RAM20包含一初始的可執(zhí)行代碼塊,它在此被稱為引擎30,并且定位在由處理器12為受保護軟件標示的起始點位置28。在引擎30的下方,RAM20在32處為空。
正如所描述的那樣,引擎30是可執(zhí)行代碼。然而,不能執(zhí)行引擎30來實現(xiàn)受保護軟件。相反,當引擎30被執(zhí)行時,該引擎30可執(zhí)行用于重新創(chuàng)建受保護軟件并將其寫入RAM20的空白區(qū)域32當中。因此,以一種簡單的形式,引擎30可以由受保護數(shù)據(jù)的加密版本(或者可獲得加密版本的地址),連同用于解密該軟件并將其寫入?yún)^(qū)域32的可執(zhí)行軟件共同組成。
將會清楚認識到,在這篇文章中,術(shù)語加密和相關(guān)術(shù)語均涉及到任何技術(shù),包括壓縮,通過進行壓縮,數(shù)據(jù)從其可用形式轉(zhuǎn)換成另一種不可立即執(zhí)行的形式。使用解密和相關(guān)術(shù)語來提及反向過程,包括解壓縮過程。
在圖3A中注意到,該引擎30位于起始點28。因而,當調(diào)用受保護軟件時,處理器12將首先定位到位置28,并由此開始執(zhí)行形成引擎30的代碼。因此,如圖3B中所示,起初將以未加密形式重新創(chuàng)建受保護軟件,以便填充空間32。
在圖3B中的34所示,隨著處理器12繼續(xù)執(zhí)行該引擎30,程序指針將最終到達步驟1的起始位置,到那時,步驟1和剩余的受保護數(shù)據(jù)將在空間32被重新創(chuàng)建,從而接下來開始執(zhí)行該受保護軟件。
將會明白,與圖2中所示的常規(guī)設(shè)備相比,該引擎30的執(zhí)行包括一個附加步驟。然而,應(yīng)該正視到,機器代碼形式的引擎30的操作將足夠快速到防止該附加步驟被用戶察覺。
因為已解釋了如圖3所示的基本操作,能夠看出該受保護數(shù)據(jù)比在圖2常規(guī)設(shè)備中更不易遭到復(fù)制或分析。這是由于,在引擎30已經(jīng)執(zhí)行之前,也就是已經(jīng)調(diào)用了該受保護軟件之前,該受保護數(shù)據(jù)不會遭到攻擊、復(fù)制或分析。僅僅將受保護數(shù)據(jù)從硬盤驅(qū)動器18裝載到RAM20還不足夠?qū)е聫娛鼙Wo數(shù)據(jù)暴露以遭到攻擊、復(fù)制以及分析。
雖然附圖3A和3B中的設(shè)備在圖2的設(shè)備基礎(chǔ)上作出了改進,但是顯而易見,一旦引擎30已經(jīng)運行,接著受保護數(shù)據(jù)就會像其曾經(jīng)以圖2中的形式暴露在RAM中那樣,以同樣方式暴露于圖3B中。為了進一步改進這種保護,可以按照下列方式修改引擎30從而在空間32中重新創(chuàng)建數(shù)據(jù)。
實施例2與圖3A所示的相同,在圖3C至3E的實例中,RAM20最初僅包含一個在該實例中標記為30A的引擎,以及空白RAM32。引擎30A的執(zhí)行再一次對該空間32進行填充。然而,通過圖3D和圖3B的比較顯示出兩點改變。首先是步驟2已由調(diào)用指令36代替,其次是在退出指令24之后已由引擎30插入了保護塊38。這將按照下面的方式來完成。
在引擎30A正在運行以解密受保護數(shù)據(jù)的同時,引擎30A監(jiān)控作為結(jié)果的被解密代碼,并尋找確定的模式或代碼序列。它的進一步細節(jié)將在下面結(jié)合實施例3加以解釋。引擎30A可能正在尋找一個序列或更多的序列。當然,這些所尋找序列的長度將會影響到正在定位的序列的可能性。此例中,引擎30A一直在尋找與步驟2相一致的序列。假如像步驟2這樣,當該預(yù)定代碼組被定位時,引擎30A不寫入該預(yù)定代碼組,而反之寫入一條調(diào)用指令36,來指明保護塊38將被調(diào)用。因此,當引擎30A已經(jīng)運行時,受保護數(shù)據(jù)并非全部可見,在這里調(diào)用指令36代替步驟2。
當受保護軟件運行時,在某一點,程序?qū)⒌竭_步驟2所預(yù)期的起始位置,并將遇到調(diào)用指令36。保護塊38的執(zhí)行于是開始。該保護塊38具有兩個功能,在一個功能中,將創(chuàng)建步驟2的代碼(按照類似于引擎30操作的方式)并且重寫調(diào)用指令36,從而完成受保護代碼的解密。另外,保護塊38也將進行安全檢查,諸如通過咨詢常規(guī)的病毒防護或類似方式,來確保該病毒防護已徹底運行并且未檢測出受損壞情況。如果沒有任何故障,則該保護塊38結(jié)束,并將執(zhí)行返回至上述起始位置,其中在該起始位置發(fā)生對保護塊38的調(diào)用?,F(xiàn)在,那個位置就成為步驟2中代碼的起始位置。接下來,操作將按正常順序繼續(xù)進行,首先是步驟2。
此外,應(yīng)該正視到,通過完全以機器代碼形式進行操作,此附加步驟能夠十分快速的執(zhí)行,從而不會被用戶察覺。
因此可以理解,直到該代碼運行時,該受保護代碼才完全被解密,因而顯著地降低了遭受病毒侵襲、未授權(quán)復(fù)制或惡意分析的風險。
如果當檢查時該保護塊38發(fā)現(xiàn)某些故障,則可以采取適當?shù)拇胧?。在一個簡單的實例中,為了特別有效的防止病毒攻擊,保護塊38將會刪除包含于RAM20中的受保護數(shù)據(jù)版本(即RAM區(qū)域32的全部內(nèi)容),由此刪除該病毒或是刪除已經(jīng)感染了受保護數(shù)據(jù)的病毒結(jié)果。
顯然,當采用機器代碼和在包括許多行代碼的現(xiàn)實環(huán)境中進行操作時,許多調(diào)用指令36可以由引擎30A來創(chuàng)建,并且在對于惡意監(jiān)視者而言很難預(yù)測的位置、或是難以從機器代碼的復(fù)雜塊內(nèi)找到的常規(guī)調(diào)用指令當中區(qū)分出來的位置,創(chuàng)建上述指令36。因而,對于惡意監(jiān)視者來說分析該保護的操作、或是對于病毒來說使該保護的操作失效都變得更加困難了。通過大約在每次插入一條調(diào)用指令時,讓引擎30A監(jiān)視(自身發(fā)生變化的)代碼塊,而使得這種保護被進一步增強,因而使調(diào)用指令的插入操作對于外部觀測者而言是偽隨機的。
實施例3圖4A和4B舉例說明了一個具有與圖3C、3D、3E中設(shè)備類似之處的保護設(shè)備,但是如下文所述,它提供了附加安全。
盡管實施例2中的設(shè)備使用了可獨立識別的塊38,它被定位到將要保護的塊末端。此實例,使用了一個按照與塊38類似方式進行操作的塊,但是其嵌入于受保護軟件內(nèi)??梢允紫冉梃b圖4A來對這種嵌入過程加以解釋。圖4A舉例說明了當處于下述幾種情況時的RAM20,即當引擎(此時標記為30B)已經(jīng)創(chuàng)建了受保護軟件的許多行代碼、但仍然未完全執(zhí)行并且仍然未創(chuàng)建符合該塊38的保護時。盡管圖4A也是圖解,它比圖3C至3E更為詳細的示出了RAM20的狀態(tài)。特別是,在RAM20左側(cè)所示的數(shù)字,它表明相應(yīng)機器代碼列表的行數(shù),以及表示由機器代碼提供的各種程序間的邊界,這些邊界也可以由RAM20分區(qū)的行來表示。因此,在引擎30B的下方,第一進程PROC1的代碼向下延至第1000行,緊跟其后的第二進程PROC2的代碼向下延至第1500行,第三進程PROC3向下延至第2500行,而最終第四進程PROC4向下延至第3200行。
為了完成執(zhí)行,引擎30B試圖把對應(yīng)于塊38的指令插入到RAM20當中,即插入引擎30B與第3200行的列表末端之間。這將通過首先察看RAM20中的內(nèi)容來完成,從而識別出未包含數(shù)據(jù)的區(qū)域。雖然進程PROC1等在RAM20中是連續(xù)示出的,但是由于各種原因存儲區(qū)仍會不包含數(shù)據(jù)。特別是,匯編程序和編譯軟件通常在其例程中是無效的,從而導(dǎo)致RAM中無數(shù)據(jù)區(qū)域的產(chǎn)生。該引擎30B試圖識別這些區(qū)域。然而,使引擎30B發(fā)揮作用的算法必須也要考慮到由于其它原因也可能會出現(xiàn)無數(shù)據(jù)區(qū)域。例如,進程PROC1等,有可能需要訪問用于記錄變量當前值、或是用于記錄在執(zhí)行期間置位標志狀態(tài)的高速暫存存儲器。由于這些RAM存儲區(qū)可以最初設(shè)置成僅包含零,因而會出現(xiàn)無數(shù)據(jù)。
因此,引擎30B將首先查看RAM20來識別所有看似好像無數(shù)據(jù)的區(qū)域。每次定位到一個明顯無數(shù)據(jù)區(qū)域時,它的位置將由引擎30B記錄下來,以供將來參考。例如在圖4A中,相對較大的區(qū)域明顯位于進程PROC2內(nèi),且僅僅包含零,因此很明顯它是無數(shù)據(jù)的。含有零的較小區(qū)域,很顯然位于進程PROC3內(nèi)。在實際例子中,很可能會定位更多的無數(shù)據(jù)區(qū)域。
一旦已識別了所有這些無數(shù)據(jù)區(qū)域,接下來該引擎30B就會對他們進行分析,從而確定哪些是真正無數(shù)據(jù)的區(qū)域,哪些僅僅是看似無數(shù)據(jù)。例如,引擎30B可以對全部軟件進行反匯編,并且對反匯編的列表進行評估,查找調(diào)用那些被鑒定為明顯無數(shù)據(jù)區(qū)域的任何指令,或是查找跳轉(zhuǎn)到那些區(qū)域上的任何指令,再或者查找讀取或?qū)懭脒@些區(qū)域的指令。如果任何這種指令對那些區(qū)域進行識別,則很可能相應(yīng)區(qū)域?qū)⒈卉浖褂?,例如像高速暫存存儲器。由于該區(qū)域在軟件執(zhí)行期間至少間歇地應(yīng)用于數(shù)據(jù),因此將該區(qū)域從明顯無數(shù)據(jù)區(qū)域的列表中移除。
一旦按照這種方式檢查了每一個明顯無數(shù)據(jù)區(qū)域,引擎30B就能開始使用這些無數(shù)據(jù)區(qū)域。在此實例中,可以假定發(fā)現(xiàn)了位于進程PROC3內(nèi)的兩個區(qū)域均具有識別它們的調(diào)用指令或跳轉(zhuǎn)指令,且因而將這兩個區(qū)域從無數(shù)據(jù)區(qū)域的列表中移除,反之位于進程PROC2內(nèi)的區(qū)域?qū)⒈A粼谠摿斜砩稀?br> 然后,位于進程PROC2內(nèi)的無數(shù)據(jù)區(qū)域,將通過引擎30B插入一個或多個保護塊38的函數(shù)來進行填充,其中函數(shù)可以是安全檢查等等,以及通過代表解密算法的可執(zhí)行代碼來進行填充。此填充操作,起始于第1300行,由圖4B中的陰影來表示。
為了利用目前在第1300行上創(chuàng)建的代碼塊,引擎30B于是對軟件內(nèi)其它地方諸如位于進程1內(nèi)第800行的數(shù)據(jù)塊進行修改塊。起始于第800行的區(qū)域內(nèi)容由引擎30B來讀取。這包括一個用于對區(qū)域的原始內(nèi)容進行加密的加密算法。接著,將該加密版本寫回到起始于第800行的區(qū)域。這在圖4B中由一組加密數(shù)據(jù)E來表示。由引擎30B插入的調(diào)用指令C位于該組加密數(shù)據(jù)之前。
該調(diào)用指令C調(diào)用位于第1300行的代碼。因而,當進程1執(zhí)行到第800行時,接著調(diào)用第1300行,執(zhí)行該安全函數(shù),接著執(zhí)行位于第1300行區(qū)域的解密例程。將這些解密例程寫入從而作用于該調(diào)用指令產(chǎn)生的區(qū)域,由此將引擎30B操作進行反向,從而對位于第800行上的區(qū)域進行解密,并將進程PROC1的解密部分寫回位于第800行的區(qū)域上。
一旦執(zhí)行了來自于第1300行區(qū)域的解密例程,控制就會返回到允許執(zhí)行解密代碼的調(diào)用指令源(第800行)。
如果引擎30B在軟件內(nèi)沒有發(fā)現(xiàn)足夠的無數(shù)據(jù)區(qū)域,以用來嵌入它所有的函數(shù),則在第3200行寫入附加函數(shù)。
這個實例可以通過借鑒下表更詳細地加以解釋,在左欄中示出行數(shù),在中間欄中示出十六進制的機器代碼字節(jié),而在右欄中示出反匯編指令
表1
從中可以看出,表1中列表的簡略部分包含三個調(diào)用指令,它們將在一個復(fù)雜軟件內(nèi)頻繁出現(xiàn)。每個調(diào)用指令由兩個字節(jié)E8組成,緊跟著是給出了所調(diào)用地址的四個字節(jié)。
因此表1示出了受保護軟件的真實列表,比如在進程PROC1內(nèi)起始于第800行的部分。
如上文所述,當引擎30B已插入一條調(diào)用指令時,諸如在行01007B45,下面列表示出結(jié)果為
表2將表2和表1相對照的結(jié)果顯示出無論如何,被插入作為表2第一行的調(diào)用指令并未突出顯現(xiàn)。因此,為了使那些安全函數(shù)失效而識別對安全函數(shù)的調(diào)用,將會變成一項極為復(fù)雜的工作,以至于在實施過程中無法實現(xiàn)。舉例來說,即便潛在黑客明白安全函數(shù)已被嵌入到軟件中,但為了識別正在調(diào)用的安全函數(shù)(如果有的話)且為了它們失效,通過該軟件內(nèi)每一個調(diào)用指令而有系統(tǒng)地進行工作也會是十分必要的。復(fù)雜的現(xiàn)代軟件應(yīng)用程序的機器代碼列表將包括大量的調(diào)用指令。
通過上文描述可以很明顯看出,表2示出了調(diào)用指令(圖4B中的C)已被插入而其后的代碼部分未經(jīng)加密的中間階段。
還應(yīng)該理解,少數(shù)幾行合法代碼已由新的調(diào)用指令進行重寫。這些行可被記錄在安全函數(shù)當中,以用于當安全函數(shù)運行時被重新創(chuàng)建,或作為選擇,到特定安全函數(shù)的調(diào)用指令僅僅用來代替代碼的特定目標行,以便于在每次調(diào)用該特定安全函數(shù)的情況下,需要相同代碼來代替該調(diào)用指令。
同樣很顯然的是,調(diào)用指令不應(yīng)該改寫代碼塊,對所述代碼塊的調(diào)用可能是從軟件內(nèi)的別處合法產(chǎn)生,這會導(dǎo)致使軟件失敗的效果。因此,引擎30b被配置成用于查找調(diào)用指令被寫入的位置,從而按照上文關(guān)于識別明顯無數(shù)據(jù)區(qū)域的描述方式,來對所有這種位置進行識別。
實施例4圖5A和5B舉例說明了與實施例2的設(shè)備有些類似的另外的保護設(shè)備。特別是,再次使用了保護塊40。
圖5A舉例說明了當受保護代碼已經(jīng)從硬盤驅(qū)動器18裝載到RAM20時的初始情況。此例中,受保護代碼是裝載在42的程序,它的起始點由處理器12標記為28。此例中,僅僅為了舉例說明,將該起始點標注為存儲器位置10,000。
除了安裝程序42之外,如圖5A所示,從硬盤驅(qū)動器18的下載操作也要安裝起始于存儲器位置12,000的保護塊40。由于將作解釋的原因,該保護塊40加入了一引擎44。到保護塊40的調(diào)用,按照類似于上文關(guān)于實施例2所描述的處理方式,被寫入到程序42當中。
該保護塊40按照與圖3D中塊38類似的方式進行操作。也就是,為了評估受損情況,程序42將跳轉(zhuǎn)到塊40。
或許認為這種類型的保護跳轉(zhuǎn)容易被那些惡意監(jiān)視者或監(jiān)視調(diào)用的病毒進行攻擊和禁止,還識別這樣的調(diào)用以及通過重寫禁止這些調(diào)用指令,其中所述調(diào)用會有規(guī)律地定位到包含代碼(本身以保護代碼的形式出現(xiàn))的存儲器位置上。
此例中,這種類型的攻擊由于下述事件而受到阻礙。當遇到對保護塊40的第一條調(diào)用指令時,該保護塊會運行以進行損壞情況評估,并且當它成功結(jié)束時,引擎44則開始運行。該引擎44完成兩個功能。在其中一個功能中,引擎44將程序42內(nèi)的調(diào)用指令重寫以便參考不同的存儲器位置,比如此例中的位置13,000。在做這件事之前,該引擎44會執(zhí)行一個程序,以確保在位置13,000存在足夠的空白存儲區(qū)來容納塊40。引擎44的另一個功能是從存儲器位置13,000開始,重新創(chuàng)建保護塊40(以及引擎本身44)。為此,該保護塊40進行了移動,并且存儲器位置12,000的調(diào)用指令已經(jīng)由到指令進行了重寫以便調(diào)用位置13,000。因此,當程序42運行時,對該安全函數(shù)的調(diào)用指令能夠持續(xù)變化,因而極大程度地增加了惡意用戶或病毒進行識別和使對保護塊40的調(diào)用失效的難度。
例如,如果某個黑客堅信他們通過分析到此位置的調(diào)用已經(jīng)識別出安全代碼的所在位置,則該黑客可以寫一段簡單代碼來識別所有到該位置的調(diào)用,并使這些指令失效。然而,由于每個軟件都將在不同位置具有自身的安全塊,因而上述方案一般不適用于特定軟件的所有復(fù)制。
重定位的保護塊40在圖4B中舉例說明。
實施例5圖6A和6B舉例說明了數(shù)據(jù)保護另外的實施例。在此例中,利用引擎50在空白RAM區(qū)域52中創(chuàng)建代碼塊,并按照類似于上文所描述的有關(guān)實施例1以及圖3A和3B的方式來進行創(chuàng)建。因此,當首次將受保護代碼從硬盤驅(qū)動器18裝載到RAM20時,圖6A左邊的位置適合于引擎50在RAM中安裝的位置,在52該RAM剩余的空間為空。此例中,將引擎50定位在子例程或主程序內(nèi)的其它輔助操作的起始點處。當調(diào)用此子例程時,執(zhí)行引擎50來創(chuàng)建多個步驟從而填充區(qū)域52。然后該位置如圖6A右邊所示,屬于4個步驟步驟1、步驟2等,并按數(shù)字順序位于區(qū)域52之內(nèi)。當引擎50運行時,這些步驟(步驟1等)接著運行以執(zhí)行該子例程。
圖6B舉例說明了當該子例程被后續(xù)調(diào)用時的情形。最初,如圖6B左側(cè)所示,當子例程首次執(zhí)行結(jié)束時,RAM20將處于左側(cè)的狀態(tài),就如同圖6A右側(cè)所示的那樣。尤其是,該引擎50依然存在于該代碼塊的起始位置。因此,當子例程下次被調(diào)用時,引擎50將再次執(zhí)行。然而,在每種情況下將引擎50寫入,從而按照不同順序來創(chuàng)建步驟,最好按隨機或偽隨機順序進行創(chuàng)建。這能夠在對子例程的執(zhí)行沒有不利影響的情況下來完成,因為許多常規(guī)的例程,諸如PRINT語句,當采用機器代碼寫入時也許有幾千行長,實際上任何行都能夠以任何實際順序來執(zhí)行。如果有必須以特定順序?qū)懭氲男薪M,那么這些行可以作為塊來對待,并以單一步驟來寫入,以便于保持該塊內(nèi)的順序,但是該塊的位置會隨著引擎50的每一次執(zhí)行而改變。
可以寫入一個或多個步驟,以用于執(zhí)行或調(diào)用防止病毒侵襲或損壞的保護例程。假如是這樣的話,該步驟將在子例程每次運行時出現(xiàn)在不同位置上。因此,惡意監(jiān)視者將看到持續(xù)變化的代碼,因而難以或不可能進行分析以對保護進行定位而來禁止它。換句話說,如果惡意監(jiān)視者識別出包含于保護中的步驟,并且通過諸如重寫該步驟使其失效,那么此種惡意干涉本身將會在子例程下次被調(diào)用時,通過引擎50的操作被重寫,而由此來恢復(fù)該保護的操作。
實施例6當RAM20處于圖3B或者圖6A及6B中右側(cè)所示出的情形時,全部受保護數(shù)據(jù)按照解密形式是可視的。應(yīng)該正視,上文所述的保護形式將仍然對代碼進行保護,但是還要意識到在某些情況中,完全未加密代碼的暴露可能表明在保護中存在的弱點,而不論該暴露多么短的時間。另外的實施例舉例說明了如何克服上述困難。圖7A從圖3A所示情形下的RAM20開始,其中引擎60位于子例程起始點,RAM20在62為空。
當子例程被調(diào)用時,處理器12到達該起始點28并且開始執(zhí)行引擎60。在該引擎60首次執(zhí)行時,三個代碼塊在空間62內(nèi)被創(chuàng)建(此例中,選擇三個來說明本發(fā)明的原理,并非對發(fā)明范圍的限定)。這些塊在圖7B中示出。因此,在圖7B中,已經(jīng)在64創(chuàng)建了步驟1,隨后是由星號(*)表示的受損數(shù)據(jù)或無意義數(shù)據(jù)的兩個塊66。作為選擇,該塊66也允許為空,但應(yīng)該正視,由于提供了用于分析的更大數(shù)量代碼,創(chuàng)建受損或偽造數(shù)據(jù),可能會給惡意監(jiān)視者或病毒帶來更大困難。
由引擎60創(chuàng)建的步驟1,以返回語句68結(jié)束,該返回語句將執(zhí)行返回到引擎60的起始位置。因此,當執(zhí)行完步驟1時,引擎60再次執(zhí)行。引擎60將設(shè)置一個寄存器用以記錄首次執(zhí)行已經(jīng)發(fā)生。因而,識別該第二次執(zhí)行已在進行中,該引擎60在70創(chuàng)建步驟2,連同該塊70之前和之后的受損塊66。
此外,該塊66允許為空。
此時,步驟2可以執(zhí)行,跟著的是在72的返回,來返回至引擎60。接著,該引擎60的第三次執(zhí)行在74創(chuàng)建步驟3和兩個受損塊66,允許執(zhí)行步驟3。
因此,通過重復(fù)引擎60在此種方式下的操作,步驟1;步驟2;步驟3的完整序列可由處理器12執(zhí)行,但是該整個序列從RAM20中是絕對看不到的,所以使得分析該序列、或?qū)⑵鋼p壞、或使該序列失效或者使它包含的任何保護均失效,都變得困難或無法實現(xiàn)。此外,惡意監(jiān)視者將看到持續(xù)變化(或“變異”)的代碼,因此,實際上不可能對它們進行充分的分析從而進行攻擊。
現(xiàn)在描述另外的實施例,特別是,適合于加強用來防止那些使用調(diào)試軟件的黑客的保護。黑客為了攻擊軟件的安全性,經(jīng)常使用調(diào)試軟件。調(diào)試程序的最初目的是用于檢查復(fù)雜軟件故障的合法操作。通常,調(diào)試程序是通過在操作者期望復(fù)查的軟件斷點插入中斷命令來進行操作。當軟件的執(zhí)行過程到達該中斷命令時,把控制傳遞給該調(diào)試程序,它接著考慮下一個代碼塊,并用高級或低級語言向操作者顯示結(jié)果,且在允許主程序的執(zhí)行繼續(xù)之前,先允許操作者檢查該塊。
黑客所使用的一種試圖阻止安全例程實現(xiàn)的手段,就是使用一個調(diào)試程序來查找主程序內(nèi)的斷點,其中在此斷點調(diào)用安全程序。當主程序執(zhí)行時,將跳轉(zhuǎn)命令插入到此斷點以便于跳過這些例程。許多現(xiàn)代軟件都十分復(fù)雜,以至于在主程序內(nèi)定位這些斷點的工作十分費力,但是盡管如此,技術(shù)純熟且意志堅決的黑客們最終還是可能會找到它們。一旦找到,黑客就能使安全例程失效,它們甚至會導(dǎo)致最復(fù)雜的例程無效。
實施例7圖8舉例說明了完成本發(fā)明另外的實施例。在圖8中,RAM116示出包含有兩個軟件塊120、122。第一個塊120是由本發(fā)明的設(shè)備保護的軟件。塊122是執(zhí)行本發(fā)明設(shè)備的安全塊。受保護軟件20包括位于24的應(yīng)用程序24(諸如文字處理應(yīng)用程序),它由安全標題26開頭。
應(yīng)用程序124以加密方式存儲,并且也被壓縮。因此,直到將應(yīng)用程序124轉(zhuǎn)換成可執(zhí)行方式時,才能夠使用它,在由先前方案中的安全標題126提供的控制之下,它導(dǎo)致在進行各種安全檢查之后,應(yīng)用程序124被解密和解壓縮,這些安全檢查諸如檢查計算機系統(tǒng)內(nèi)所持有軟件許可的詳細資料,用戶的詳細資料,當前日期及時間(軟件在指定周期內(nèi)被許可的情況下)等等。一旦那些檢查已經(jīng)成功完成,該標題126就會對應(yīng)用程序124進行解密和解壓縮,并將處理器的程序指針移動到應(yīng)用程序124的起始位置,從而將控制傳遞至應(yīng)用程序124。這種類型的保護在許多情況下都有效,但是它容易受到黑客通過插入跳轉(zhuǎn)命令來欺騙由安全標題126進行的一個和多個檢查正如上文所述的那樣,因此,會使應(yīng)用程序124在未執(zhí)行完全部正常安全檢查的情況下就被運行。
提供安全塊122來解決這種缺陷。
該安全塊122是一個代碼塊,它提供了兩個主要功能。第一,當該塊122執(zhí)行時,產(chǎn)生由安全標題126正常提供的一個或多個此類型的安全檢查。這些檢查可以是由該標題126執(zhí)行的完全相同的檢查,或者是除此之外的檢查。按照在安全標題126與塊122之間劃開安全檢查的這種方式能夠有多種變化,而這種方式本身并不是本發(fā)明的重點。
然而,在這個例子中,解密該應(yīng)用程序124的函數(shù)不再由標題126來指示,而是在塊122的控制之下。當執(zhí)行時,應(yīng)用程序124的解密最好是該塊122的最后動作,在上述動作之后將控制從塊122傳遞至所解密的應(yīng)用程序124。
這樣,除非該塊122成功到達程序末尾,否則該應(yīng)用程序124的解密將不會發(fā)生,從而允許解密被授權(quán)和執(zhí)行。
因此,安全塊122很可能是黑客試圖阻止本發(fā)明所提供保護的目標。依照下文,將阻止對該塊122成功進行攻擊的發(fā)生。
最初(執(zhí)行之前),該安全塊122是加密的形式。加密要借助于加密算法,所述加密算法需要至少一個用來解密的轉(zhuǎn)換密鑰。眾所周知,許多加密算法都需要用來解密的轉(zhuǎn)換密鑰。轉(zhuǎn)換密鑰一般是數(shù)字,或是在算法內(nèi)轉(zhuǎn)換成數(shù)字形式后以數(shù)字方式來使用,諸如通過字母數(shù)字混合編制字符的機器代碼值而形成的轉(zhuǎn)換密鑰。用于本發(fā)明的一類算法已知為CRC(循環(huán)冗余碼校驗)算法。CRC算法對代碼的目標代碼塊進行評估,以產(chǎn)生表示該目標塊特征的數(shù)值。因而,簡單的CRC算法將目標代碼塊每個字符的機器代碼值加起來。其它CRC算法可能會比簡單的求和法過程更為復(fù)雜。然而,十分重要的是,應(yīng)注意到每一次將CRC算法應(yīng)用于目標代碼塊時,都將返回相同的值,而在該目標代碼塊中的任何改變都將導(dǎo)致返回不同的值。
在這個例子中,安全塊122是使用CRC加密算法的加密形式。因而,當首次運行該塊122時,需要一個解密步驟。這個解密步驟試圖解密該塊122的剩余部分,使其從不可執(zhí)行成為可執(zhí)行形式。這要通過執(zhí)行基于轉(zhuǎn)換密鑰的解密例程來完成,其中該轉(zhuǎn)換密鑰是從目標代碼塊求出的CRC值。該目標代碼塊最好是被加密的塊122。
這些設(shè)備的重要性,可以通過解釋當應(yīng)用程序被調(diào)用時各事件順序來更好的理解。
最初,處理器12的程序指針將指向安全標題126的起始位置,安全標題126將在將控制傳遞至塊122之前執(zhí)行安全檢查。在此階段,應(yīng)用程序124依然處于加密形式。塊122同樣處于加密形式并且首先被解密。該解密步驟經(jīng)由需轉(zhuǎn)換密鑰的算法來完成。該轉(zhuǎn)換密鑰是從塊122本身求出的CRC值。如果塊122沒有被修改,則將返回適當?shù)腃RC值以允許轉(zhuǎn)換。塊122于是正常運行,作為其結(jié)果,將通過塊122的操作來對應(yīng)用程序124進行解密。當塊122被完全執(zhí)行后,將把控制傳遞至應(yīng)用程序124,于是該應(yīng)用程序以正常方式運行。然而,如果塊122以任何方式被修改,則塊122的CRC值也將改變。因此,在解密算法中作為轉(zhuǎn)換密鑰使用的值,將不適用于進行正確解密。塊122的解密版本將被損壞。在任何實際情況下,人們總是期待該轉(zhuǎn)換密鑰的任何改變會導(dǎo)致足夠的損壞,以至于阻止塊122的任何進一步的執(zhí)行。這將使應(yīng)用程序124處于加密形式。
正如上文所述,任何使用調(diào)試程序來分析塊122的嘗試,都將在塊122內(nèi)引入中斷命令。使用調(diào)試程序來查看塊22的動作,將因此而自身改變塊122的CRC值,甚至是在使用該調(diào)試程序進行改變之前。CRC值的改變將阻止應(yīng)用程序124被解密。因此,通過試圖觀察由塊22提供的安全性來阻止應(yīng)用程序124的操作,即使檢查結(jié)果為安全塊未修改。
意圖阻止安全實現(xiàn)的黑客,將對查看那些看似擔負安全檢查工作的代碼塊最為感興趣。因此優(yōu)選的是,為安全塊122的解密產(chǎn)生CRC值的目標塊至少包括這樣的部分塊,該部分塊在許可該應(yīng)用程序124解密之前,實施一項或多項安全檢查。由此,所有這些安全檢查可以由被解密的塊122來執(zhí)行,在這種情況下,CRC轉(zhuǎn)換密鑰可以從所有或部分該加密塊122中求出。作為選擇,一些檢查也可以由塊124來執(zhí)行,在這種情況下,該CRC值可以整體地或部分地從所有或部分標題126得出。
實施例8圖9舉例說明了比實施例7更為復(fù)雜的可供選擇方案。在圖9中所述的許多特征均與圖8中的特征相一致,并且采用相同數(shù)字來表示這些特征。
圖8和圖9的實施之間的原理區(qū)別之處在于,安全塊122的加密方式。該塊122由多個子塊130來表示。這些子塊130一起提供了塊122的加密形式,但是每個子塊130是被單獨加密的。每個子塊可以使用相同算法和各自轉(zhuǎn)換密鑰,或者使用不同的算法,每個算法需要相同轉(zhuǎn)換密鑰,再或者使用需要不同轉(zhuǎn)換密鑰的不同算法來加密。
當圖9的實例運行時,操作順序極大程度上同上文關(guān)于圖8所述的操作順序相同,而除了以下內(nèi)容。當首次調(diào)用塊122時,執(zhí)行解密算法從而只對最頂端的子塊130進行解密。這可以借助于正被解密的子塊的CRC值、或者另一個子塊、再或是其它地方的目標塊(諸如所有或部分安全標題126)。解密之后,接著可以執(zhí)行該第一個子塊30。這樣可以完成安全檢查,或其它初始例程。該第一子塊130的執(zhí)行,以一條對第二子塊130進行解密的指令結(jié)束。這通過需要轉(zhuǎn)換密鑰的解密算法來完成,其中該轉(zhuǎn)換密鑰將最好是在解密時求出的,即使該轉(zhuǎn)換密鑰與用來解密該第一子塊130的轉(zhuǎn)換密鑰相同。因此,由于第一子塊解密帶來的目標塊中的任何干擾引起CRC代碼的改變,從而導(dǎo)致該第二子塊130的解密受損。
這些操作在圖10中做了更詳盡地說明。圖10舉例說明了位于該第一和第二子塊130A、130B之間邊界處的三行代碼。子塊130A在第99行以最后一行結(jié)束,它的性質(zhì)對于本發(fā)明來說并不重要。然后執(zhí)行第100行。這是一條解密指令。該指令指定將被解密的數(shù)據(jù)塊,在此處是第101到200行,它代表該第二子塊130B。指令100也對將要使用的算法進行識別,在此處是算法A。最后,指令100對將由指定行(在此處指定為第101-200行)使用的轉(zhuǎn)換密鑰進行識別,其中這些指定行將用作目標塊,以用來求出供算法A使用的轉(zhuǎn)換密鑰。
一旦第100行已被執(zhí)行,執(zhí)行將轉(zhuǎn)移至第101行。如果第100行成功完成解密,那么第101行將正確指示該第二子塊130B的第一次動作。如果該子塊130B未被修改,則會出現(xiàn)成功解密,從而是使用正確的CRC值作為密鑰的。然而,如果該第二子塊30B已被修改,或是在計算CRC值的同時受到調(diào)試程序的檢查,則錯誤的CRC值就會在第101行用來解密,該子塊130B將會受損,并且會在斷點停止執(zhí)行。這將使應(yīng)用程序124處于加密形式。
隨著安全塊122的繼續(xù)執(zhí)行,以剛才所述的方式和在圖9中用箭頭132所示的,每個子塊130按次序經(jīng)由它前面的子塊進行解密。如果在塊122內(nèi)沒有損壞,并且當時并未使用調(diào)試程序,則塊122將以無受損形式完全解密,并且成功執(zhí)行而到達最后的子塊130末尾處,這在圖11中已作了說明。在最后的子塊130的末尾處,換言之,在塊122執(zhí)行的末尾處,有用于解密應(yīng)用程序124的指令(第998行),其后是轉(zhuǎn)到應(yīng)用程序124的指令(第999行)。為了進一步應(yīng)用本發(fā)明的原理,在第998行的解密可以基于需解密密鑰的算法,如上文所描述,該解密密鑰是作為CRC值被求出的。只有當正確解密全部的子塊130,才會到達第999行且進行正確執(zhí)行。
實施例9如圖8和9所示,上文所述的實施例7和8假設(shè)軟件的執(zhí)行從單獨安裝在RAM20中的安全塊122開始。在圖12A和12B中所示的第三個例子包括如下所述的進一步解密和解壓縮步驟。
最初,RAM20只包括軟件的單一塊120A(圖12A)。該塊包括加密的應(yīng)用程序124、安全標題126、以及安全存根140,在此例中該安全存根附加于該應(yīng)用程序124的末尾。該安全存根140包括了實施例7或8中安全塊122的壓縮和加密版本。該安全標題126包括對該存根140進行解密和/或解壓縮以及將結(jié)果作為單獨塊進行安裝的指令,以構(gòu)成安全塊122(圖12B)。當安全標題126已全部執(zhí)行,接著控制將傳遞至該安全塊122。隨后的執(zhí)行將如上文關(guān)于實施例7或?qū)嵤├?所描述的那樣進行。
這個例子的有益效果在于,允許把要提供的存根140作為已授權(quán)給合法用戶的軟件的一部分,以便于當授權(quán)應(yīng)用程序被安裝時,塊120如圖9A中所示那樣將被安裝,且包括分支140。這樣確保了應(yīng)用程序124的合法授權(quán)版本總是附隨有安全存根140,由此利用本發(fā)明軟件保護設(shè)備的優(yōu)勢就確保了授權(quán)副本仍然受到保護。
特別是,許多不同解密算法和用于計算CRC值的算法能夠用在這些實施例中。
總結(jié)上文所描述的每一個實施例中,RAM內(nèi)的代碼在可執(zhí)行代碼執(zhí)行期間進行改變。在最簡單的實施例(實施例1)中,該代碼發(fā)生一次改變就創(chuàng)建例程。在其它實施例中,該代碼經(jīng)常會改變,并且在一個實施例中,惡意監(jiān)視者將看到好像持續(xù)變化的代碼。
在每一種情況下,受保護數(shù)據(jù)最初無法以可用形式獲得。然而,其它可執(zhí)行代碼與受保護代碼相關(guān)聯(lián),并且加入了關(guān)于該受保護數(shù)據(jù)的信息。這可以是有關(guān)其位置、加密技術(shù)或密鑰、加密密鑰的位置、或是處于加密形式的全部代碼的信息。這允許深一層的可執(zhí)行代碼來創(chuàng)建深一層的代碼,所述深一層代碼從該保護中釋放該受保護代碼,允許以可用形式存取數(shù)據(jù)。
許多變化和修改能夠用于上文所述的設(shè)備。特別是,通過上文陳述的說明書的整體理解很容易看出,這里所述的各種技術(shù)能夠以各種組合并用。例如,在與實施例3有關(guān)的描述中的重定位原理能夠加入到實施例5中,以至于除實施例5中僅被臨時創(chuàng)建的步驟之外,能夠改變所創(chuàng)建的位置,該改變最好是隨機的,或者偽隨機的。
上文所陳述的例子中,受保護數(shù)據(jù)已經(jīng)是可執(zhí)行的,但是此技術(shù)可以容易地被調(diào)整來保護不可執(zhí)行的數(shù)據(jù)文件。
雖然認為,在前述說明書中努力引起對本發(fā)明這些特征的注意是非常重要的,但是應(yīng)該明白申請人所要求的保護是關(guān)于任何的可獲得專利保護的特征,或在上文中所涉及的和/或在圖中所示的特征的結(jié)合,無論在其上是否賦予了特別強調(diào)。
權(quán)利要求
1.一種數(shù)字數(shù)據(jù)保護設(shè)備,包括可執(zhí)行代碼,所述可執(zhí)行代碼中包含了與受保護數(shù)據(jù)相關(guān)的足夠信息,以便在執(zhí)行時能夠創(chuàng)建包含了可用形式的受保護數(shù)據(jù)的深一層代碼。
2.根據(jù)權(quán)利要求1所述的設(shè)備,包括安全裝置,所述安全裝置可操作地用于檢測受保護數(shù)據(jù)的受損情況,所述深一層代碼包括至少一條用來調(diào)用所述安全裝置以便評估任何受損情況的指令。
3.根據(jù)權(quán)利要求2所述的設(shè)備,其中所述調(diào)用指令被包含在一組可執(zhí)行代碼需要的位置的深一層代碼內(nèi),并且其中所述安全裝置在執(zhí)行時可操作地用于重新創(chuàng)建所述可執(zhí)行代碼組,以代替所述調(diào)用指令。
4.根據(jù)權(quán)利要求2或3所述的設(shè)備,其中如果檢測到任何損壞,則所述安全裝置可操作地用于刪除所述深一層代碼。
5.根據(jù)權(quán)利要求2至4中任意一項所述的設(shè)備,其中所述安全裝置可操作地用于對位于所需位置上的加密代碼進行解密,以及用于把所述加密代碼替換為相應(yīng)的解密代碼。
6.根據(jù)權(quán)利要求2至4中任意一項所述的設(shè)備,其中所述安全裝置被嵌入所述深一層代碼之中。
7.根據(jù)權(quán)利要求6所述的設(shè)備,其中所述安全設(shè)備被嵌入于所述深一層代碼不使用的位置。
8.根據(jù)權(quán)利要求7所述的設(shè)備,其中當所述可執(zhí)行代碼執(zhí)行時,至少識別出一個嵌入位置,將所述安全裝置寫入到所述嵌入位置。
9.根據(jù)權(quán)利要求8所述的設(shè)備,其中通過反匯編所述深一層代碼以及分析所述反匯編代碼來識別嵌入位置。
10.根據(jù)權(quán)利要求2至9中任意一項所述的設(shè)備,所述設(shè)備進一步包括重定位裝置,所述重定位裝置可操作地用于改變所述安全裝置的位置,以及可用于修改所述調(diào)用指令從而指向新位置。
11.根據(jù)權(quán)利要求10所述的設(shè)備,其中所述重定位裝置被包含于受保護數(shù)據(jù)內(nèi),以便當所述受保護數(shù)據(jù)在使用時,重復(fù)進行操作。
12.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中所述可執(zhí)行代碼包含用于創(chuàng)建受保護代碼的可執(zhí)行指令。
13.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中所述可執(zhí)行代碼將加密形式的受保護數(shù)據(jù)與用于解密的可執(zhí)行指令合并在一起。
14.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述可執(zhí)行代碼的初始執(zhí)行可進行用于執(zhí)行的解密指令的安裝,所述解密指令的后續(xù)執(zhí)行將導(dǎo)致受保護數(shù)據(jù)的解密。
15.根據(jù)權(quán)利要求14所述的設(shè)備,其中所述解密指令最初以不可執(zhí)行形式被存儲,并且它需要執(zhí)行以便授權(quán)執(zhí)行受保護軟件,所述設(shè)備進一步包括轉(zhuǎn)換裝置,所述轉(zhuǎn)換裝置可操作地用于通過需要至少一個轉(zhuǎn)換密鑰的算法來將所述代碼塊轉(zhuǎn)換成可執(zhí)行形式,并且還可操作地用于通過參考可執(zhí)行形式或不可執(zhí)行形式的目標代碼塊來導(dǎo)出供所述算法使用的轉(zhuǎn)換密鑰,因此只有所述目標塊未被修改的情況下,才可導(dǎo)出適當?shù)霓D(zhuǎn)換密鑰。
16.根據(jù)權(quán)利要求15所述的設(shè)備,其中所述安全裝置包括多個以不可執(zhí)行形式存儲的可執(zhí)行代碼塊,且每個代碼塊需要執(zhí)行以便授權(quán)執(zhí)行受保護軟件,以及所述轉(zhuǎn)換裝置可操作地用于將每個塊轉(zhuǎn)換成可執(zhí)行形式。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中每個代碼塊的轉(zhuǎn)換通過從各自目標塊而導(dǎo)出的轉(zhuǎn)換密鑰來完成。
18.根據(jù)權(quán)利要求16所述的設(shè)備,其中在執(zhí)行時,至少有一個代碼塊可操作地用于將另一個塊轉(zhuǎn)換成可執(zhí)行形式以便后續(xù)執(zhí)行。
19.根據(jù)權(quán)利要求18所述的設(shè)備,其中在執(zhí)行時,每個塊可操作地用于將另一個塊轉(zhuǎn)換成可執(zhí)行形式以便后續(xù)執(zhí)行。
20.根據(jù)權(quán)利要求15至19任意一項所述的設(shè)備,其中所述或每個目標塊被包含在受保護軟件內(nèi)。
21.根據(jù)權(quán)利要求15至19任意一項所述的設(shè)備,其中所述或每個目標塊被包含在所述第一安全裝置內(nèi)。
22.根據(jù)權(quán)利要求15至21任意一項所述的設(shè)備,其中用于轉(zhuǎn)換代碼的所述或每種算法包括CRC算法。
23.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中所述受保護數(shù)據(jù)包含可執(zhí)行代碼和/或數(shù)據(jù)文件。
24.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,包括處理裝置,所述處理裝置可操作地用于執(zhí)行代碼,還包括存儲裝置,所述可執(zhí)行代碼存儲在所述存儲裝置中,其中所述設(shè)備中指示的存儲位置的起始點是受保護數(shù)據(jù)的起始位置,因此當試圖訪問受保護數(shù)據(jù)時,所述處理裝置將使所述可執(zhí)行代碼得以執(zhí)行。
25.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中所述可執(zhí)行代碼可操作地用于重新創(chuàng)建基本上不加密形式的受保護數(shù)據(jù)。
26.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中所述受保護數(shù)據(jù)包含至少一個可執(zhí)行指令,所述指令包括多個步驟,所述步驟按照不止一種順序來執(zhí)行所述指令,并且所述可執(zhí)行代碼可操作地用于通過以改變所述可執(zhí)行代碼的每次執(zhí)行的順序來創(chuàng)建所述步驟,從而創(chuàng)建所述指令。
27.根據(jù)權(quán)利要求26所述的設(shè)備,其中所述步驟的順序在每次執(zhí)行時被隨機選取。
28.根據(jù)權(quán)利要求26或27所述的設(shè)備,其中所述步驟包括至少一個啟動所述安全裝置操作的步驟,其中所述安全裝置可操作地用于檢測受保護數(shù)據(jù)的受損情況。
29.根據(jù)權(quán)利要求26至28中任意一項所述的設(shè)備,其中所述可執(zhí)行代碼可被執(zhí)行地用于在每次要執(zhí)行所述可執(zhí)行指令時創(chuàng)建所述步驟。
30.根據(jù)前述任意一項權(quán)利要求所述的設(shè)備,其中在每次執(zhí)行時,所述可執(zhí)行代碼被安排成提供一部分可用形式的受保護數(shù)據(jù)和受損形式的其它數(shù)據(jù),由此需要不止一次的執(zhí)行,從而提供可用形式的全部受保護數(shù)據(jù)。
31.根據(jù)權(quán)利要求30所述的設(shè)備,其中每個部分對應(yīng)于受保護數(shù)據(jù)中的完整的可執(zhí)行例程,從而一個構(gòu)成了受保護數(shù)據(jù)的完整例程組能夠通過重復(fù)執(zhí)行所述可執(zhí)行代碼而被創(chuàng)建。
32.根據(jù)權(quán)利要求30或31所述的設(shè)備,其中對所述可執(zhí)行代碼的每次執(zhí)行都導(dǎo)致先前創(chuàng)建的可用代碼被損壞,由此在設(shè)備操作期間,只有由最近一次執(zhí)行創(chuàng)建的代碼才會成為可用形式。
33.一種包含存儲裝置的計算機系統(tǒng),所述計算機系統(tǒng)包括根據(jù)前述任意一項權(quán)利要求所述的數(shù)字數(shù)據(jù)保護設(shè)備。
34.一種包括軟件的數(shù)據(jù)載體,當所述軟件安裝到計算機系統(tǒng)時,所述軟件可操作地作為根據(jù)權(quán)利要求1至32中任意一項所述的數(shù)字數(shù)據(jù)保護設(shè)備。
35.一種計算機軟件,當它安裝到計算機系統(tǒng)上時,所述軟件可操作地作為根據(jù)權(quán)利要求1至32中任意一項所述的數(shù)字數(shù)據(jù)保護設(shè)備。
36.一種可操作用于實現(xiàn)對計算機軟件二級條目進行保護的計算機軟件,該保護軟件包括安全裝置,所述裝置可操作用于授權(quán)對受保護軟件的執(zhí)行,以響應(yīng)一項或多項安全檢查的成功完成,且具有至少一個以不可執(zhí)行的形式存儲的可執(zhí)行代碼塊,且它需要被執(zhí)行以便授權(quán)受保護軟件的執(zhí)行,并且所述受保護軟件進一步包括轉(zhuǎn)換裝置,所述轉(zhuǎn)換裝置可操作用于通過需要至少一個轉(zhuǎn)換密鑰的算法將所述代碼塊轉(zhuǎn)換成可執(zhí)行形式,并且所述轉(zhuǎn)換裝置還可操作地用于通過參考可執(zhí)行或是不可執(zhí)行形式的目標塊來導(dǎo)出供所述算法使用的轉(zhuǎn)換密鑰,因此只有所述目標塊未被修改的情況下,才可導(dǎo)出合適的轉(zhuǎn)換密鑰。
37.一種計算機存儲設(shè)備,包含根據(jù)權(quán)利要求36所述的計算機軟件。
38.一種計算機系統(tǒng),包含計算機軟件條目,所述計算機軟件條目受到根據(jù)權(quán)利要求36或37所述的計算機軟件的保護。
39.一種數(shù)字數(shù)據(jù)保護設(shè)備,其如上文所充分描述的那樣與所述附圖相關(guān)。
40.任何新穎的主題或者包括這里所公開的新穎的主題的組合體,不論是否其被包括在與任何前述權(quán)利要求相同的發(fā)明范圍內(nèi)、或不論是否其相關(guān)于與前述任何前述權(quán)利要求相同的發(fā)明。
全文摘要
當軟件最初被裝載到RAM(20)時,引擎(30A)被安裝在RAM(20)另外的空白區(qū)域的起始位置。當受保護應(yīng)用程序被調(diào)用時,該引擎首先創(chuàng)建一系列步驟(附圖3D),包括用于保護塊(38)的調(diào)用命令。在到達該調(diào)用(36)時,執(zhí)行該保護塊(38),以便完成各種安全檢查。如果這些操作均能成功執(zhí)行,則創(chuàng)建步驟(2)并改寫該調(diào)用(36),以便于步驟(2)和(3)的執(zhí)行能夠以正常方式繼續(xù)。因此,除非該安全檢查已被成功完成,否則該受保護軟件(步驟1、2和3)不會受到詳細審查。
文檔編號G06F21/12GK1575445SQ01815806
公開日2005年2月2日 申請日期2001年7月13日 優(yōu)先權(quán)日2000年7月18日
發(fā)明者J·A·薩法 申請人:比特阿茲有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
巴彦淖尔市| 龙州县| 九龙坡区| 闽清县| 江孜县| 伊宁市| 永泰县| 金川县| 抚松县| 聂荣县| 彭泽县| 左贡县| 乌拉特前旗| 巍山| 靖州| 城步| 子长县| 扎赉特旗| 缙云县| 灌云县| 天水市| 行唐县| 伽师县| 南京市| 河西区| 雷州市| 通许县| 合江县| 威信县| 黑山县| 肇庆市| 济宁市| 梁平县| 沂源县| 巴东县| 广德县| 太白县| 信阳市| 会同县| 南靖县| 营口市|