專利名稱:防止對(duì)計(jì)算機(jī)程序非授權(quán)訪問的方法和系統(tǒng)的制作方法
本公開一般地涉及計(jì)算機(jī)和計(jì)算機(jī)程序,較具體地涉及一種防止在找錯(cuò)應(yīng)用程序下運(yùn)行程序的系統(tǒng)和方法。
存儲(chǔ)在一個(gè)計(jì)算機(jī)內(nèi)的計(jì)算機(jī)程序常常含有許多可受保護(hù)的知識(shí)產(chǎn)權(quán)。其中有些產(chǎn)權(quán)可以容易地通過版權(quán)和/或?qū)@傻玫奖Wo(hù)。然而,其他的產(chǎn)權(quán)是作為商業(yè)秘密來保護(hù)的,因此需要最高級(jí)的安全性來防止非授權(quán)的使用或訪問。
某一特定程序一旦被一個(gè)不受軟件許可或其他形式的保護(hù)限制的用戶得到,要防止該程序的非授權(quán)使用或訪問將變得困難。例如,計(jì)算機(jī)制造商經(jīng)常在計(jì)算機(jī)正安裝一些診斷程序,其中含有許多制造商的商業(yè)秘密。典型的情況是,只安裝程序的可執(zhí)行(.exe)部分,由此使用戶無法得到源碼。而且,程序的可執(zhí)行部分還常常加了密。例如,威斯康星州Brown Deer市PKWARE公司的PKLITE應(yīng)用程序?qū)Τ绦虻目蓤?zhí)行部分進(jìn)行了壓縮,由此在處理中對(duì)它進(jìn)行了加密。然而,這沒有能防止用戶通過找錯(cuò)應(yīng)用程序來運(yùn)行該程序,找錯(cuò)應(yīng)用程序使計(jì)算機(jī)處理器工作在暫停執(zhí)行模式,這一模式使處理器在某些預(yù)定的間隔上停止執(zhí)行或跳到另一個(gè)例行程序上。例如,該處理器可以是一個(gè)加利福尼亞州Santa Clara市Intel(英特)公司生產(chǎn)的PENTIUM(奔騰)處理器,暫停執(zhí)行模式的例子有找錯(cuò)模式和單步驟操作模式,在Intel公司提供的“INTEL ARCHITECTURE SOFTWAREDEVELOPER’S MANUAL(英特體系軟件開發(fā)者手冊(cè))”(1997,Vol.1-3)中對(duì)這兩種模式有較詳細(xì)的說明,這里引用該手冊(cè)作為參考。通過使用找錯(cuò)程序,用戶可以錯(cuò)誤地訪問程序,由此訪問存儲(chǔ)在其中的商業(yè)秘密。
因此,需要一種用來防止即使通過找錯(cuò)應(yīng)用程序?qū)σ粋€(gè)程序的非授權(quán)訪問的系統(tǒng)和方法。
為此,提供了一種用來防止一個(gè)程序在找錯(cuò)應(yīng)用程序下運(yùn)行的系統(tǒng)和方法。在一個(gè)實(shí)施例中,在一個(gè)計(jì)算機(jī)系統(tǒng)的硬驅(qū)上存儲(chǔ)了一個(gè)例行程序和一個(gè)軟件程序。該計(jì)算機(jī)系統(tǒng)有一個(gè)用來運(yùn)行軟件程序和例行程序兩者的處理器,而且該系統(tǒng)能操作于暫停執(zhí)行模式。該例行程序能防止例如當(dāng)處理器在一個(gè)找錯(cuò)應(yīng)用程序下運(yùn)行于暫停執(zhí)行模式時(shí)對(duì)軟件程序的非授權(quán)訪問。當(dāng)處理器正在運(yùn)行該軟件程序時(shí),該程序?qū)⒛芷饎?dòng)例行程序的執(zhí)行。該例行程序一旦被起動(dòng),它將檢查某一預(yù)定的存儲(chǔ)器位置,判斷處理器是否操作于暫停執(zhí)行模式,如果是,則使處理器停止繼續(xù)運(yùn)行該軟件程序。
在一個(gè)實(shí)施例中,該存儲(chǔ)器位置是處理器的一個(gè)中斷寄存器,其中指明了是否正在使用通常在找錯(cuò)工作模式中使用的中斷點(diǎn)。該例行程序檢驗(yàn)中斷寄存器是否指向任何其他的程序或例行程序。如果是這樣,則處理器可能正運(yùn)行于找錯(cuò)模式,從而該例行程序使處理器停止繼續(xù)運(yùn)行原來的程序。在另一個(gè)實(shí)施例中,該存儲(chǔ)器位置是處理器的一個(gè)旗標(biāo)寄存器,其中指明了是否是處理器的其他工作模式。在該實(shí)施例中,例行程序檢驗(yàn)旗標(biāo)寄存器是否指明了處理器操作的一個(gè)單步驟模式。如果是這樣,該例行程序?qū)⑹固幚砥魍V估^續(xù)運(yùn)行原來的程序。
圖1是實(shí)現(xiàn)一個(gè)實(shí)施例的計(jì)算機(jī)的方框圖。
圖2是準(zhǔn)備由圖1計(jì)算機(jī)運(yùn)行的一個(gè)例行程序的流程圖。
參見圖1,代號(hào)10代表一個(gè)含有一些部件的計(jì)算機(jī),這些部件包括至少一個(gè)處理器12,RAM(隨機(jī)存取存儲(chǔ)器)14,一個(gè)硬驅(qū)16,以及一個(gè)軟驅(qū)18。各個(gè)部件都能通過圖中的總線20與處理器12進(jìn)行通信。在本例中,處理器12運(yùn)行例如由華盛頓州Redmond市Microsoft(微軟)公司提供的DOS操作系統(tǒng)代碼。然而應(yīng)該理解,計(jì)算機(jī)10及其示例性的部件僅僅是許多不同類型的計(jì)算機(jī)和部件的一個(gè)代表。DOS也僅僅是許多不同類型的操作系統(tǒng),包括也是由Microsoft公司開發(fā)的Windows(視窗)和Windows95的一個(gè)代表。
處理器12含有多個(gè)寄存器,包括中斷寄存器22和旗標(biāo)寄存器24。這里,寄存器22、24的名稱是PENTIUM和PENTIUMⅡ處理器中的名稱,但其含義僅僅是實(shí)際上所有型號(hào)和/或牌號(hào)的處理器的類似寄存器的示例性代表。寄存器22和24在上面已引入作為參考的“英特體系軟件開發(fā)者手冊(cè)”中也有所說明,該手冊(cè)還說明了幾種不同的處理器操作模式,包括正常模式、找錯(cuò)模式和單步驟模式。
存儲(chǔ)在硬驅(qū)16上的一個(gè)可執(zhí)行(.exe)程序文件26。該程序26已利用一個(gè)例如上面較詳細(xì)說明過的PKLITE音通工具進(jìn)行了壓縮和加密。由于程序26已加密,用戶不能簡(jiǎn)單地通過讀出硬盤16來訪問和解編譯該程序。然而,通常用戶可以把程序26安裝到RAM14中,并利用一個(gè)找錯(cuò)應(yīng)用程序(未示出)來用處理器12運(yùn)行該程序。這樣做的結(jié)果是,用戶可以了解程序26中的第一代碼行,并解編譯該程序,由此做到對(duì)該程序的非授權(quán)訪問。
參見圖2,其中示出也是存儲(chǔ)在硬盤16上的一個(gè)例行程序100,該例行程序可以防止用戶利用找錯(cuò)應(yīng)用程序去運(yùn)行程序26。當(dāng)程序26開始操作時(shí),它將起動(dòng)例行程序100。因此,作為例子,例行程序100是一個(gè)初始化例行程序,然而應(yīng)該理解,例行程序100也可以在執(zhí)行程序26過程中的任何時(shí)間上運(yùn)行。
在步驟102中,例行程序100檢驗(yàn)寄存器22和24。采用上述IntelPENTIUM處理器的例子,上這中斷寄存器22是一個(gè)找錯(cuò)寄存器7,而上述旗標(biāo)寄存器24是一個(gè)EFLAG(E旗標(biāo))寄存器,在步驟104中,例行程序100判斷EFLAG寄存器24的捕捉旗標(biāo)(trap flag)(TF)是否已被設(shè)置。如果設(shè)置了表明單步驟模式的TF,則例行程序100在步驟106停止執(zhí)行程序26。如果沒有設(shè)置TF,則處理進(jìn)到步驟108,在那里例行程序100判斷中斷寄存器22的中斷點(diǎn)旗標(biāo)(INT3)指向何處。INT3可能會(huì)指向一個(gè)常常被找錯(cuò)程序使用的例行程序,例如“中斷點(diǎn)除外處理器例行程序(breakpoint exception handler routine)”;或者可能會(huì)含有一個(gè)返回指令“IRET”,這意味著沒有調(diào)用其他的程序或例行程序。如果INT3指向除了IRET以外的任何其他指令,則處理將進(jìn)到前述的步驟106。否則,處理前進(jìn)到步驟110,在那里例行程序100把控制返回給程序26,使后者可以正常運(yùn)行。通過檢驗(yàn)寄存器22和24,例行程序100將可得知處理器12是否在找錯(cuò)模式下操作,從而可防止程序26在找錯(cuò)應(yīng)用程序下運(yùn)行。
雖然已經(jīng)示出并說明了一些示例性實(shí)施例,但在上面的公開中仍希望有修改、改變和替代的自由度,而且在某些情況中,可以只利用某些特性而不相應(yīng)地利用其他的特性。例如,例行程序100可被程序26重復(fù)地調(diào)用,以此來進(jìn)一步保證該程序不是被一個(gè)找錯(cuò)程序運(yùn)行的。此外,程序26和例行程序100可以存儲(chǔ)在不同的位置;可以檢驗(yàn)附加的或另外的寄存器、旗標(biāo)或存儲(chǔ)裝置,還可以在不改變所示實(shí)施例的范疇的情況下對(duì)其加上附加的錯(cuò)誤處理例行程序。所以,應(yīng)該廣義地并以符合本發(fā)明范疇的方式去理解所附的權(quán)利要求。
權(quán)利要求
1.一種計(jì)算機(jī),它包括至少一個(gè)用于運(yùn)行軟件程序的處理器,該處理器能夠在一個(gè)暫停執(zhí)行模式下操作,并含有一個(gè)能指明該處理器當(dāng)前是否在暫停執(zhí)行模式下操作的第一存儲(chǔ)器位置;一個(gè)可被該處理器訪問的存儲(chǔ)裝置;以及一個(gè)位于該存儲(chǔ)裝置內(nèi)的例行程序;其中,當(dāng)處理器運(yùn)行軟件程序時(shí),該程序能起動(dòng)例行程序;并且其中,當(dāng)該例行程序一旦被起動(dòng)時(shí),它將檢驗(yàn)第一存儲(chǔ)器位置以判斷處理器是否處于暫停執(zhí)行模式,如果是這樣,則將使處理器停止繼續(xù)運(yùn)行該軟件程序。
2.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的第一存儲(chǔ)器位置是處理器的一個(gè)中斷寄存器。
3.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的第一存儲(chǔ)器位置是處理器的一個(gè)旗標(biāo)寄存器。
4.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的處理器還含有一個(gè)第二存儲(chǔ)器位置,而且第一存儲(chǔ)器位置是一個(gè)中斷寄存器,第二存儲(chǔ)器位置是一個(gè)旗標(biāo)寄存器,并且,其中兩個(gè)寄存器中的任一個(gè)寄存器都可以指明處理器當(dāng)前是否在暫停執(zhí)行模式下操作。
5.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的暫停執(zhí)行模式是一個(gè)找錯(cuò)模式。
6.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的暫停執(zhí)行模式是一個(gè)單步驟模式。
7.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中如果例行程序判定了處理器不處于暫停執(zhí)行模式,則例行程序返回到對(duì)軟件程序的執(zhí)行。
8.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的存儲(chǔ)裝置是一個(gè)硬盤。
9.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的存儲(chǔ)裝置是一個(gè)軟盤。
10.根據(jù)權(quán)利要求1的計(jì)算機(jī),其中的存儲(chǔ)裝置是一個(gè)隨機(jī)存取存儲(chǔ)器。
11.一種用來防止用戶在一個(gè)操作于暫停執(zhí)行模式的處理器上運(yùn)行一個(gè)程序的方法,該方法包括以下步驟檢驗(yàn)一個(gè)第一預(yù)定存儲(chǔ)器位置;判斷該第一存儲(chǔ)器位置是否調(diào)用另一個(gè)例行程序;以及如果是這樣,則使處理器停止繼續(xù)運(yùn)行該程序。
12.根據(jù)處理11的方法,它還包括以下步驟檢驗(yàn)一個(gè)第二預(yù)定存儲(chǔ)器位置;判斷該第二存儲(chǔ)器位置是否指明了處理器操作的一個(gè)暫停執(zhí)行模式;以及如果是這樣,則使處理器停止繼續(xù)運(yùn)行該程序。
13.根據(jù)權(quán)利要求11的方法,其中的第一存儲(chǔ)器位置是處理器的一個(gè)中斷寄存器。
14.根據(jù)權(quán)利要求12的方法,其中的第一存儲(chǔ)器位置是處理器的一個(gè)中斷寄存器,并且第二存儲(chǔ)器位置是處理器的一個(gè)旗標(biāo)寄存器。
15.根據(jù)權(quán)利要求11的方法,其中操作的暫停執(zhí)行模式是一個(gè)單步驟模式。
16.根據(jù)權(quán)利要求12的方法,其中操作的暫停執(zhí)行模式是一個(gè)找錯(cuò)模式。
17.一種用來防止用戶在一個(gè)操作于找錯(cuò)模式的處理器上運(yùn)行一個(gè)程序的設(shè)備,該設(shè)備包括用來檢驗(yàn)一個(gè)第一預(yù)定存儲(chǔ)器位置的裝置;用來判斷該第一存儲(chǔ)器位置是否指明處理器操作于一個(gè)暫停執(zhí)行模式的裝置;以及用來在響應(yīng)于第一存儲(chǔ)器位置指明了暫停執(zhí)行模式的判定時(shí),使處理器停止繼續(xù)運(yùn)行該程序的裝置。
18.根據(jù)權(quán)利要求17的設(shè)備,它還包括用來檢驗(yàn)一個(gè)第二預(yù)定存儲(chǔ)器位置的裝置;用來判斷該第二存儲(chǔ)器位置是否指向另一個(gè)例行程序的裝置;以及用來在響應(yīng)于第二存儲(chǔ)器位置指向了另一個(gè)例行程序的判定時(shí),使處理器停止繼續(xù)運(yùn)行該程序的裝置。
19.根據(jù)權(quán)利要求17的設(shè)備,其中的第一存儲(chǔ)器位置是處理器的一個(gè)旗標(biāo)寄存器。
20.根據(jù)權(quán)利要求18的設(shè)備,其中的第一存儲(chǔ)器位置是處理器的一個(gè)旗標(biāo)寄存器,并且第二存儲(chǔ)器位置是處理器的一個(gè)中斷寄存器。
21.根據(jù)權(quán)利要求17的設(shè)備,其中操作的暫停執(zhí)行模式是單步驟模式或找錯(cuò)模式中的任一種模式。
全文摘要
防止一程序在找錯(cuò)應(yīng)用程序下運(yùn)行的系統(tǒng)和方法。該方法是與一個(gè)軟件程序一起存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的硬驅(qū)上的一個(gè)例行程序的一部分。該系統(tǒng)有一個(gè)用來運(yùn)行該軟件程序和該例行程序的處理器。該例行程序當(dāng)處理器在找錯(cuò)模式下運(yùn)行時(shí)將防止對(duì)軟件程序的非授權(quán)訪問,當(dāng)該處理器運(yùn)行軟件程序時(shí),該程序能起動(dòng)執(zhí)行該例行程序。該例行程序檢驗(yàn)?zāi)承┘拇嫫饕耘袛嗍欠癫僮饔谡义e(cuò)模式,如果是,則使處理器停止運(yùn)行該程序。
文檔編號(hào)G06F21/22GK1215870SQ98120158
公開日1999年5月5日 申請(qǐng)日期1998年10月13日 優(yōu)先權(quán)日1997年10月15日
發(fā)明者艾倫·E·貝利茨 申請(qǐng)人:戴爾美國公司