專利名稱:軟件程序保護機制的制作方法
技術領域:
本發(fā)明涉及防止非法修改與/或重發(fā)送計算機軟件程序的一種保護機制。
在商業(yè)軟件尤其是消費者個人計算機或“PC”的軟件的領域中,為了達到更好銷售的目的,通常都要免費或低價發(fā)送銷售用的軟件程序的演示版本。軟件發(fā)行商發(fā)送大量這樣的演示版本,以便對許多潛在的購買者展示他們的軟件。其理由是,低價發(fā)送的損失可能由試用該軟件、喜歡該軟件并且決定購買該軟件的用戶所產(chǎn)生的追加購買收益來補償。這樣的演示版本有時是在因特網(wǎng)上發(fā)送的,但更多的是使用例如軟盤、CD-ROM或DVD(通用數(shù)字盤)這樣的物理介質(zhì)。這樣的物理介質(zhì)很便宜,可以方便地對準某類特定的用戶,并且,與需要通過大多數(shù)消費者因特網(wǎng)連接來支持的下載不同,他們有足夠的容量來發(fā)送一個大的全功能的演示版本,以便啟動銷售。
這樣的演示軟件程序具有以下的特性I.演示軟件程序的發(fā)送形式包括該軟件程序的全功能版本;II.演示軟件程序的所有發(fā)送拷貝都是一致的;III.一旦正常安裝,軟件程序提供包含一個或多個限制(功能,時間,用戶數(shù),等等)的演示模式;IV.提供一種手段,通過這種手段,用戶可以獲得該軟件的完全許可使用版本,并且把演示版本轉換為全功能版本,而不需要遞交其他的介質(zhì);V.演示軟件程序不依賴任何特定的硬件支持,而是運行在常規(guī)的消費者PC上(并且轉換為全功能的版本)。
通常,大多數(shù)這樣的演示發(fā)送軟件實際上都包含全價版本的全部功能,其中嵌入了軟件保護機制,該保護機制被設計來防止對完整版本的訪問,直到該軟件被銷售出去。這樣做有兩個理由,首先,軟件發(fā)行商為了避免不同軟件開發(fā)流的費用開支,其中一個用于演示,而一個則是該軟件的“全”版本。其次,軟件發(fā)行商希望為用戶提供一種手段,把演示版本轉換為全版本,而不需要進一步為該用戶提供軟件。
雖然至此描述的系統(tǒng)可能是一種有效的銷售工具,但具有嚴重的缺陷。這樣的演示介質(zhì)是軟件盜版者工作材料的主要來源。軟件盜版者通常能夠修改該演示版本,以便破解被軟件發(fā)行商嵌入的任何保護機制的內(nèi)容。當軟件的演示版本被如此修改時,潛伏在該程序的發(fā)送版本中的全部程序功能就被釋放,而發(fā)行商卻接收不到接收任何信息。而且,一旦軟件盜版者破解了軟件發(fā)行商使用的保護機制,就可以建立一個稱為“裂縫”的盜版輔助軟件包,幫助其他人同樣把演示軟件程序轉換為一個完整的版本,而不用付錢給發(fā)行商。免費發(fā)送“裂縫”的做法已經(jīng)十分廣泛,軟件發(fā)行商認為這是造成收益損失的一個重要原因。
在該技術領域中有已知的幾種著名的保護對策,目的是使軟件程序的演示形式能抵抗盜版的攻擊。通常,這樣的保護技術包括將附加的內(nèi)部功能加到該二進制可執(zhí)行形式的軟件程序上,迫使演示受到限制。希望得到的結果是,企圖逃避演示限制的任何非法修改都應該被檢測到,并且導致,例如,顯示特定的屏幕,或者自動程序失敗。然而,二進制可執(zhí)行程序(例如視窗操作系統(tǒng)中具有擴展名“.EXE”的文件)通常只是整個軟件程序的一個非常小的部分。在大多數(shù)消費者軟件應用中,可執(zhí)行文件容量約為一兆字節(jié),而數(shù)據(jù)文件和程序執(zhí)行所需的其他文件容量總共可能超出幾百兆字節(jié)。因此,只保護軟件程序的核心二進制可執(zhí)行文件,實際上只保護該軟件演示版本的一個非常小的比例部分免受盜版。
如果根據(jù)當前技術保護的軟件程序被自由發(fā)送,則“裂縫”的最簡單形式很容易用未保護的等價版本來替換被保護的核心二進制可執(zhí)行文件,而這樣的未保護版本可以通過一次合法的購買來得到。這種形式的“裂縫”很容易產(chǎn)生,不需要很高的技術。這就構成了當前技術在軟件保護模式方面的一個顯著的缺陷。
代替的軟件保護機制使用加密技術。雖然加密技術足以解決計算機信息一次傳輸?shù)膯栴},但一般不適合于作為一種軟件保護機制。這是因為加密系統(tǒng)所需的密鑰本質(zhì)上容易被發(fā)現(xiàn),因為每當運行被保護的軟件程序時,都必須使用這些密鑰。
因此,需要一種改進的軟件保護機制。
本發(fā)明提供了一種用于計算機軟件程序的改進的軟件保護機制。所公開的是一個這樣的系統(tǒng),用于變換軟件程序的“財產(chǎn)文件”(即數(shù)據(jù)文件)并且修改核心的可執(zhí)行程序本身,這樣就使得對被修改的可執(zhí)行程序的任何重發(fā)送也要求重發(fā)送對應的被變換的財產(chǎn)文件。由被修改的可執(zhí)行文件和沒有被變換(即原始形式)的財產(chǎn)文件(并且反過來也一樣)組成的重發(fā)送版本將無法操作。
為了建立被保護軟件應用的發(fā)送形式,該應用首先被分成其主要構成元件,即核心可執(zhí)行程序,和財產(chǎn)文件(只讀數(shù)據(jù)文件和/或讀/寫數(shù)據(jù)文件)。利用變換鑰將變換功能作用到財產(chǎn)文件上以建立被變換的數(shù)據(jù)文件。然后把變換鑰存放起來以便后面使用。接著,通過在核心可執(zhí)行程序中嵌入一個執(zhí)行保護模塊程序的調(diào)用,以形成被修改的可執(zhí)行程序。僅當執(zhí)行所述的被修改可執(zhí)行程序時才能調(diào)用保護模塊程序,否則在任何其他的條件下都不運行。接著產(chǎn)生文件變換模塊程序并且加到軟件元件包上。變換鑰和被變換的數(shù)據(jù)文件表可以任意選擇地加到保護模塊程序上。接著,把該軟件元件包(包含被變換的數(shù)據(jù)文件、變換鑰、被修改的可執(zhí)行程序、保護模塊程序和文件變換模塊程序)傳送到某個介質(zhì)上以便發(fā)送給用戶。
當計算機系統(tǒng)操作時,裝入被修改的可執(zhí)行程序,自動導致保護模塊程序被運行。保護模塊調(diào)用文件變換模塊的操作,這被用來截取文件操作的請求(例如讀文件、寫文件、打開文件和關閉文件),這些操作是由被修改的可執(zhí)行程序?qū)τ嬎銠C系統(tǒng)的操作系統(tǒng)實現(xiàn)的。利用變換鑰,僅當文件操作請求被識別為是用于被變換的數(shù)據(jù)時,文件變換模塊才執(zhí)行所要求的反向變換。
通過使用保護模塊程序,本發(fā)明將被修改的可執(zhí)行程序和被變換的數(shù)據(jù)文件聯(lián)系起來。這樣,除非具有被修改的可執(zhí)行程序并且在其控制下,否則,在其他的任何情況下,文件變換模塊都不會執(zhí)行被請求的反向變換。
參考以下結合附圖對本發(fā)明特定實施例的描述后,一般熟悉這一技術的人都能理解本發(fā)明的其他方面和特征。
現(xiàn)在將結合
本發(fā)明的最佳實施例,在附圖中圖1是不帶保護機制的軟件程序典型安裝和運行結構的方塊圖;圖2是加上典型的軟件保護機制的軟件程序安裝和運行結構的方塊圖;圖3是加上用于財產(chǎn)文件的軟件保護機制的軟件程序安裝和運行結構的方塊圖;圖4是本發(fā)明的軟件保護機制的一個實施例的方塊圖;圖5A是本發(fā)明初始化步驟的流程圖;圖5B是本發(fā)明變換模塊所采取的操作步驟的流程圖;圖5C是本發(fā)明終止步驟的流程圖;圖6是一個方塊圖,表示軟件程序用來根據(jù)本發(fā)明方法變換其財產(chǎn)文件的過程;和圖7是圖6所示文件變換過程的流程圖。
圖1是一個方塊圖,表示不帶保護機制的軟件程序的典型安裝和運行結構。這樣的軟件程序一般是在CD-ROM 10或其他的物理介質(zhì)上被發(fā)送的。是否為CD-ROM以外的發(fā)送源(例如DVD、因特網(wǎng)下載等)對本發(fā)明并不重要,但使用CD-ROM是為了便于描述。
以CD-ROM 10運行安裝程序20,它讀(11)CD-ROM 10,并且將核心可執(zhí)行程序30和若干文件集合40、41、50和51拷貝(21、22、23、24和25)到用戶PC機的內(nèi)部磁盤上。核心可執(zhí)行程序30通常依賴于支持核心可執(zhí)行程序的可執(zhí)行的操作系統(tǒng)代碼41,它可以被更新或者最初由安裝程序20來安裝,或者也可以已經(jīng)被放在用戶的PC機中。例如微軟公司視窗系統(tǒng)的DirectXTM圖形軟件工具。核心可執(zhí)行程序30通常還依賴于核心可執(zhí)行支持文件40,這些文件通常也由安裝程序20安裝。例如用于視窗操作系統(tǒng)中的特定應用的一個或多個動態(tài)鏈接庫(DLL)。
為了正確運行,核心可執(zhí)行程序30通常需要與數(shù)據(jù)文件交互作用,并且操縱該文件。例如,通過文件系統(tǒng)界面61訪問所示的讀/寫文件集合51,并且通過文件系統(tǒng)界面60訪問所示的只讀文件集合50。文件集合50和51被稱為“財產(chǎn)文件”。圖1中沒有表示軟件保護機制,這意味著該軟件可以很容易被拷貝和發(fā)送。
圖2是一個方塊圖,表示加上采用已知技術的典型軟件保護機制的軟件程序的安裝和運行結構。除了被修改的可執(zhí)行文件30A和保護模塊程序31(此后稱為“保護模塊31”)以外,圖2中所有的元件都與圖1所示的元件相同。部件30A和31的虛線輪廓是為了直觀地說明這些部件是被保護的事實。
在圖2中,被修改可執(zhí)行程序30A是相對于圖1中的原始核心可執(zhí)行文件30以某種方式來修改的,以保護文件的完整性。通常,另一個保護支持模塊可執(zhí)行部件(“保護模塊”)31是在被修改的可執(zhí)行程序30A的控制下被安裝(26)并且在運行時間(62)被使用的。保護模塊31并不總是在程序執(zhí)行期間使用,而是在某個典型的實現(xiàn)中,監(jiān)視和/或設置被修改可執(zhí)行程序30A的功能,以保證當程序處于演示模式時,能服從預先設置的限制。
圖2所示系統(tǒng)的缺陷在于,如果被保護的可執(zhí)行程序30A被其原始的核心可執(zhí)行程序30的拷貝所替換,則所有的保護功能都失去,并且所得到的是非法的具有完整功能的應用軟件。即使該模塊還存在,由保護模塊31提供的保護功能也將失去。這是因為這些保護功能只能由被修改的可執(zhí)行程序30A調(diào)用,并且如果使用未保護的原始核心可執(zhí)行程序30,代替了被修改的可執(zhí)行程序30A,則保護功能仍不起作用。
圖3也是一個方塊圖,表示增加了對財產(chǎn)文件的軟件保護機制的軟件程序安裝和運行結構。該圖中只有元件20、40和41與圖1和圖2中所描述的元件相同。除了CD-ROM 10A,其他的元件都用虛線輪廓表示,這意味著它們都按照本發(fā)明的軟件保護機制被保護起來。CD-ROM10A是被保護軟件的發(fā)送介質(zhì)。如圖2所示,被修改的可執(zhí)行程序30A是相對于圖1的原始核心可執(zhí)行程序30以某種方式進行修改的,以保護文件的完整性。通常,另一個保護支持模塊可執(zhí)行部件(“保護模塊”)31是在被修改的可執(zhí)行程序30A的控制下被安裝(26)并且在運行時間被使用(62)。
在圖3中,圖2的文件集合50和51(“財產(chǎn)文件”)被變換了的文件集合50A和51A所代替。在被變換的文件集合50A和51A中可能有一個或多個被變換數(shù)據(jù)文件。被變換的文件集合50A和51A可以包含任何格式的文件,甚至包括可執(zhí)行文件,由被修改的可執(zhí)行程序30A通過界面讀/寫功能60A和界面只讀功能61A(通過圖4所示的變換模塊70)來訪問這些文件集合,這些界面提供了合適的運行時間變換和反變換。熟悉這一技術的人將理解,變換和反變換的準確性質(zhì)對于本發(fā)明來說不是根本的問題。例如,變換可以包含加密和解密法,可以采用如數(shù)據(jù)加密標準(DES)或RSA(里維斯特-沙米爾-阿德菜曼方法)算法這樣的標準算法,也可以采用其他較為簡單的加密和解密算法。不同變換的混合也可以用于同一個應用。唯一實際的要求是,變換是可逆的,這樣就能在該軟件程序的性能和安全性之間提供一個合理的平衡。例如,簡單的變換可以包含逐個字節(jié)的邏輯操作,例如用安全字節(jié)值對被變換的緩沖區(qū)數(shù)據(jù)進行位移或異或操作,以產(chǎn)生明文數(shù)據(jù)。界面功能60A和61A提供了所需的運行時間變換,可以采用各種方式來實現(xiàn)。例如,所需的變換可以內(nèi)置于源代碼中,也可以是被修改可執(zhí)行程序30A的程序庫層次。可以內(nèi)在地由操作環(huán)境提供,也可以連接特定的介質(zhì)。
圖4是本發(fā)明軟件保護機制一個實施例的方塊圖。圖4給出了被變換的文件集合50A和51A、被修改的可執(zhí)行程序30A以及保護模塊31,這些都與圖3的相同。為了看起來清楚,圖4省略了圖3中的一些元件,但邏輯上是存在的,并且在圖4的方案中沒有變化。界面只讀功能60B、60C、60D和界面讀/寫功能61B、61C、61D根據(jù)本發(fā)明提供了合適的運行時間變換和逆變換。
在本實施例中,界面功能60B、60C、60D和61B、61C、61D是以對被修改的可執(zhí)行程序30A透明的方式提供的。即,使用被變換文件集合50A和51A的被修改可執(zhí)行程序30A中的代碼可以保留其原始的形式,因為根據(jù)本發(fā)明,由這些代碼看到的文件輸入/輸出和沒有安排保護時所看到的是一致的。這是通過操作系統(tǒng)71和文件變換模塊程序70(此后稱為“文件變換模塊70”)來實現(xiàn)的,通過界面60B、60C和61B、61C介入文件的讀寫操作。操作系統(tǒng)71(例如微軟公司的視窗95TM或98)和文件變換模塊70是將文件變換透明地附加到文件操作上的手段。
文件變換模塊70的實現(xiàn)有各種不同的方法。然而,根據(jù)本發(fā)明的這個最佳實施例,該模塊的目標是I.使得文件變換對被修改的可執(zhí)行程序30A完全透明,即,文件變換的結果對程序不作任何修改;并且,II.僅在適當?shù)那闆r下提供文件變換服務,在這里就是僅對合法的被修改可執(zhí)行程序30A提供文件變換服務。對于其他的可執(zhí)行程序,例如原始的核心可執(zhí)行程序30,或者對例如屬于不相關程序的文件這樣沒有受到影響的財產(chǎn)文件,將不執(zhí)行變換。滿足這些目標的手段是通過文件變換模塊70的初始化和執(zhí)行邏輯來實現(xiàn)的,如下所述。
圖5A、5B和5C的流程圖給出了文件變換模塊70的操作邏輯。有三個不同的操作階段初始化(圖5A),文件掛鉤處理(圖5B)和結束(圖5C)。
文件變換模塊70在可以截取來自操作系統(tǒng)71的任何活動之前必須被初始化。注意到這一點是很重要的僅當被修改的可執(zhí)行程序30A存在并且運行后,保護模塊31才是激活的。例如,對于視窗操作系統(tǒng),保護模塊31可能是一個動態(tài)鏈接庫(DLL)文件,可以被加到原始可執(zhí)行程序30的“入口表”上,作為用來產(chǎn)生被修改的可執(zhí)行程序30A的轉換過程的一部分。通過視窗操作系統(tǒng)的“裝入程序”內(nèi)在行為,這將具有以下的作用在執(zhí)行被修改的可執(zhí)行程序的任何實際運行時間二進制指令之前,當?shù)谝淮握{(diào)用被修改的可執(zhí)行程序30A時,自動運行保護模塊31中的特定代碼。沒有其他的程序能導致保護模塊31運行。并且由于保護模塊31通過這里討論的調(diào)用來設置文件變換模塊70,因此,文件變換模塊70將不會被設置來對任何其他的程序提供服務。注意,原始的核心可執(zhí)行程序30將不會調(diào)用保護模塊31或它所觸發(fā)的變換服務。
如圖5A中的流程圖所示,在501和502步,保護模塊31首先初始化文件變換模塊70。在這個階段上,保護模塊31應該將信息傳送給文件變換模塊70。這些信息應該包括財產(chǎn)表(即被變換的文件集合50A和51A的元素),調(diào)用過程識別信息,變換鑰以及可選擇的其他信息,例如變換算法。調(diào)用過程信息將從操作系統(tǒng)71獲取,而與財產(chǎn)文件相關的信息可以被嵌入保護模塊31,或者由保護模塊31通過讀其他文件來獲取。注意,與財產(chǎn)文件相關的信息也可以由文件變換模塊70通過其他手段得到,例如,可以由文件變換模塊70直接從文件中讀取,或者被嵌入文件變換模塊70本身中。在本實施例中,保護模塊31在503步中利用可用的操作系統(tǒng)服務功能,將文件變換模塊70“掛鉤”到文件系統(tǒng)中。例如在視窗95TM或視窗98TM中,文件變換模塊70可以是一個虛擬設備驅(qū)動器(VxD),而且保護模塊31可以利用視窗系統(tǒng)的“虛擬文件系統(tǒng)”調(diào)用來安排操作系統(tǒng)調(diào)用文件變換模塊70,作為隨后的文件系統(tǒng)調(diào)用所執(zhí)行的低級操作系列的一部分。作為另一個例子,在用于十六進制中斷13的“終止和等待駐留”(TSR)程序中的軟件中斷處理程序可以被用于微軟公司的磁盤操作系統(tǒng)(MS-DOS)。參考圖4,通過掛鉤機制這樣一種手段,文件變換模塊70就能夠以界面功能60C和61C為操作系統(tǒng)71截取界面讀/寫功能61B和界面只讀功能60B。在本實施例中,無論何時執(zhí)行讀文件、寫文件、打開文件或關閉文件操作,都會用到這樣的“掛鉤”(或截取)。初始化過程在553步完成。在掛鉤已經(jīng)被建立和文件變換模塊70被初始化以后,就可應隨后的任何文件請求,自動調(diào)用文件變換模塊70。
一旦被初始化,文件變換模塊70將接收針對操作系統(tǒng)71的文件操作請求。僅當針對操作系統(tǒng)71的調(diào)用請求被識別為屬于或來自被修改可執(zhí)行程序30A的被變換數(shù)據(jù)時,文件變換模塊70才執(zhí)行所要求的逆變換(即“變換服務”)。如果文件變換模塊70確定該請求不針對屬于或來自被修改可執(zhí)行程序30A的被變換數(shù)據(jù),則被截取的請求將被返回操作系統(tǒng)進行正常處理。無論如何,都必須用這樣的方式來調(diào)用文件變換模塊70與該操作有關的文件數(shù)據(jù)(如果有的話)已經(jīng)被操作系統(tǒng)71放在文件變換模塊70知道的一個存儲器緩沖區(qū)中。接著,文件變換模塊70具有選擇項可對這些緩沖區(qū)數(shù)據(jù)進行變換,或者只是返回操作系統(tǒng)而讓這些數(shù)據(jù)保持未變換(as-found)狀態(tài)。
關于文件變換模塊70準確的文件操作集合,應該隨本發(fā)明的不同實現(xiàn)方案而變化。但至少涉及打開文件、讀文件和關閉文件操作。其他的操作,包括寫文件操作,也可以被用作觸發(fā)器,通過相同的操作系統(tǒng)掛鉤,調(diào)用文件變換模塊70。
與這些文件操作有關的進一步信息如下(I)打開文件例如微軟的DOSTM視窗系統(tǒng)、和UnixTM這樣的操作系統(tǒng)環(huán)境都采用整數(shù)文件標識符來跟蹤被打開的文件。打開文件請求來自被保護的過程(即被修改的可執(zhí)行程序30A),因為被列在所處理的財產(chǎn)表中的文件(即被變換的文件集合50A和51A),將導致文件變換模塊70記錄操作系統(tǒng)71為該被打開的文件指定的唯一性文件標識符,以便和相關的變換鑰記錄在一起,并且把該文件加到一個活動的文件表上;(II)讀文件當具有在上述的打開文件階段中建立的唯一文件標識符的讀文件操作,為某個被保護的財產(chǎn)文件的唯一標識符而發(fā)生時,文件變換模塊70對操作系統(tǒng)71返回的數(shù)據(jù)進行解密。其實現(xiàn)方法是,允許操作系統(tǒng)71對由調(diào)用過程指定的目標緩沖區(qū)執(zhí)行讀操作,接著,用該財產(chǎn)文件的相關密鑰在原處(即在相同的目標緩沖區(qū))對這些數(shù)據(jù)進行變換;(III)寫文件雖然圖5B中沒有給出寫文件操作的處理,但與打開文件的操作是類似的。在調(diào)用操作系統(tǒng)環(huán)境之前,變換模塊70在調(diào)用過程的數(shù)據(jù)緩沖區(qū)中原處對數(shù)據(jù)進行逆變換,以執(zhí)行實際的寫文件操作;以及(IV)關閉文件當文件變換模塊70接收到關閉該文件的請求時,放棄用來為被打開的被保護財產(chǎn)文件存放文件標識符和密鑰的資源。
圖5B是本發(fā)明的文件變換模塊70所采取的操作步驟的流程圖。在510步中,操作系統(tǒng)71激活了對文件變換模塊70的一個“掛鉤”。如果文件變換模塊70確定該請求不針對屬于或來自被修改可執(zhí)行程序30A的被變換數(shù)據(jù),則這個被截取的請求將被返回操作系統(tǒng)71,以便在523和525步中進行正常處理。
然而,如果該調(diào)用過程被保護(即該請求是針對屬于或來自被修改的可執(zhí)行程序30A的被變換數(shù)據(jù)的),則在步512中執(zhí)行該文件操作的分析。注意,在圖5B中,受到影響的只是打開文件、關閉文件和讀文件的操作。其他的操作,包括“寫文件”操作也可以同樣地被截取。
如果該操作為讀文件,則在516步確定文件標識符是否在激活的文件表中。如果不在,則被截取的請求將被返回給操作系統(tǒng)71,以便在517和525步中正常處理。如果文件標識符在激活的文件表中,則文件變換模塊70在521步返回操作系統(tǒng)71,允許操作系統(tǒng)以正常的方式完成低級讀取,但隨后在522步中返回文件變換模塊70的控制(通過圖中沒有給出的文件變換模塊70的邏輯)。522步確定該財產(chǎn)文件的正確變換鑰,并且在523步中對讀緩沖區(qū)中的數(shù)據(jù)進行變換。操作系統(tǒng)71在被“掛鉤”來調(diào)用文件變換模塊70的讀操作正常過程中已經(jīng)將所述的數(shù)據(jù)放在這里。接著在525步完成該過程。
如果該操作是關閉文件,則518步確定文件標識符是否在激活的文件表中。如果不在,則被截取的請求將被返回到操作系統(tǒng)71,以便在517和525步中進行正常處理。如果文件標識符在激活的文件表中,則在519步中將文件標識符和變換鑰從激活的文件表中刪除。在520步執(zhí)行關閉文件操作。該過程在525步結束。
圖5C是本發(fā)明結束步驟的流程圖。為了終止,在551步釋放為該調(diào)用過程配置的所有資源,并且在552步中刪除操作系統(tǒng)環(huán)境的掛鉤機制。然后在553步完成結束過程。
圖6是一個方塊圖,表示軟件程序根據(jù)本發(fā)明的方法變換其財產(chǎn)文件的過程。這是預發(fā)送變換過程,它將軟件程序變換為其發(fā)送狀態(tài)(見圖4)。首先,軟件程序的原始發(fā)送形式10被過程100分解為若干關鍵部分,即安裝程序20、只讀文件集合50、讀寫文件集合51、核心可執(zhí)行支持文件40、一般可執(zhí)行系統(tǒng)資源41以及原始的核心可執(zhí)行程序30。
接著運行軟件轉換程序101(圖7的流程圖說明其邏輯)。這個軟件程序,通常帶有用戶輸入,從運行時間非可執(zhí)行部分只讀文件集合50、讀/寫文件集合51中選擇特定的財產(chǎn)文件。軟件轉換程序101將為每個所選擇的財產(chǎn)文件選擇變換算法和密鑰。接著,利用為特定文件選擇的密鑰,把所選擇的加密算法應用到每個文件。
還要求修改原始的核心可執(zhí)行程序30。具體來說,原始核心可執(zhí)行程序30被變換為被修改的可執(zhí)行程序30A,該程序調(diào)用保護模塊31。例如,在視窗環(huán)境中,其完成方法是將一個引用加到原始核心可執(zhí)行程序30的入口表的擴展版本中的DLL庫上。保護模塊31和文件變換模塊70必須被加到該文件集合中。變換鑰和財產(chǎn)表也必須被加到該文件集合中。它們可以被作為獨立文件存儲,或者為了安全起見,也可以被嵌入到其他的文件中,例如文件31A、31和/或70中。
最后,還要求對非運行時間部分進行修改。具體來說,軟件程序的安裝程序20必須被增強以便包括上述新的或被修改的部分,從而得到一個被修改的安裝程序20A。
當該過程完成時,存在一組新的運行時間部件,即被修改的可執(zhí)行程序30A、保護模塊31、文件變換模塊70以及被變換的文件集合50A和51A。接著,利用過程102將這些部件傳送到CD-ROM 10A或者其他的介質(zhì)上,以便發(fā)送給軟件用戶。在以后的應用軟件運行時,這些部件將根據(jù)需要被調(diào)用。
所有上述的修改是否都由軟件轉換程序101來實現(xiàn),或者,某些轉換,例如在原始核心可執(zhí)行程序30和/或安裝程序20上實現(xiàn)的轉換是否都由獨立但有關的過程來完成,這些對于本發(fā)明來說,都不重要。用來產(chǎn)生被修改的可執(zhí)行程序30A的任何其他變換的性質(zhì)是什么,準確來說也不重要,只要它調(diào)用(一般通過保護模塊31)文件變換模塊70。
還有其他的方法能把核心可執(zhí)行程序30轉換為被修改的可執(zhí)行程序30A,并且還能有效地控制文件變換模塊70的變換行為。例如,用來建立被修改可執(zhí)行程序30A的轉換過程可以將非可執(zhí)行的數(shù)據(jù)加到核心可執(zhí)行程序30上,這樣,文件變換模塊70在運行時就可以發(fā)現(xiàn)并檢查這些數(shù)據(jù)。這些數(shù)據(jù)可以當成一種“許可證”使用,其存在狀況和內(nèi)容可以被文件變換模塊70用來確定是否對這個特定的程序進行變換。在另一個代替的轉換機制中,轉換過程可以將一個附加的可執(zhí)行“回調(diào)”功能加到核心可執(zhí)行程序30上。這個功能不要求和以前存在的可執(zhí)行程序代碼30有任何關系,但是在所述的模塊正在確定是否提供變換服務時,被文件變換模塊70所調(diào)用。在上述不同實施例的一種中,核心可執(zhí)行程序30(或保護模塊31,如果存在的話)將不調(diào)用文件變換模塊70的第一次初始化。但是,可以通過某些別的手段例如通過應用程序的安裝程序20,來對文件變換模塊70進行初始化。
圖7是圖6所示文件變換過程的一個流程圖。在601步開始文件變換過程。在602步中,用戶為新的一組運行時間和非運行時間部件選擇目的目錄,即被修改的可執(zhí)行程序30A、保護模塊31、文件變換模塊70、被變換的文件集合50A和51A以及被修改的安裝程序20A。在603步中,用戶根據(jù)本發(fā)明選擇要被變換的核心可執(zhí)行文件(可執(zhí)行)。在604步中,用戶還選擇要進行變換的一個數(shù)據(jù)文件(也稱為“財產(chǎn)文件”)。在605步中,軟件轉換程序產(chǎn)生變換鑰。在606步利用變換鑰對所選擇的財產(chǎn)文件進行變換,然后放在目的目錄中。利用判別步驟607來重復執(zhí)行步驟604-606,直到?jīng)]有更多的財產(chǎn)文件要變換。這時,可以得到財產(chǎn)表和相關的變換鑰集合,并且可以分別被存儲,或者被加入到其他文件中。
在608步中,保護模塊31被檢索并且被加上,可選擇地包括上述的財產(chǎn)文件和變換鑰信息。在609步建立依賴保護模塊31的被修改可執(zhí)行程序30A。如上所述,在視窗系統(tǒng)環(huán)境中,這種依賴通常包括將一個入口表引用加到被修改的可執(zhí)行程序30A上,這涉及某個保護DLL庫。注意,在本發(fā)明的一個實施例中,連接原始的核心可執(zhí)行程序30和保護模塊31,可能是為了產(chǎn)生被修改的可執(zhí)行程序30A而對原始核心可執(zhí)行程序30所做的唯一修改。文件變換過程在610步中結束。
以下是根據(jù)一個實施例的本發(fā)明操作的一個示例的實現(xiàn)過程。
1.軟件發(fā)行商為視窗95環(huán)境建立一個軟件程序。例如一個多層次的角色扮演娛樂程序。在該例子中,每層由50兆字節(jié)的只讀數(shù)據(jù)文件(財產(chǎn))表示。核心可執(zhí)行文件是一個2兆字節(jié)的。EXE文件。
2.利用圖6所示的步驟,根據(jù)本發(fā)明對該軟件程序進行轉換,使得每個數(shù)據(jù)文件50被變換為一個被變換的數(shù)據(jù)文件,并且還建立了依賴這些被變換數(shù)據(jù)文件的被修改可執(zhí)行程序30A。
3.這種轉換形式的軟件程序被包裝在CD-ROM或其他的介質(zhì)上然后發(fā)送給用戶。
4.用戶安裝并且運行該軟件程序。
5.安裝時,被修改的可執(zhí)行程序30A、被修改的只讀文件集合50A、保護模塊31以及文件變換模塊70都被拷貝到用戶的計算機上或者是可以使用的。而所述軟件程序的其他所有部件都正常地位于原處。保護模塊31可以采用對象連接和嵌入(OLE)對象、獨立的可執(zhí)行文件或者動態(tài)鏈接庫(DLL)文件等形式。在涉及視窗95TM或98TM的可執(zhí)行的文件的情況下,文件變換模塊70最好是一個視窗系統(tǒng)的虛擬設備驅(qū)動器或VxD。在本示例中,軟件程序的讀/寫文件,如果有的話,應該不受影響。
6.當程序運行時,它把該軟件程序的第一層提供給用戶。顯然,這意味著第一層數(shù)據(jù)文件必須由修改的可執(zhí)行程序30A訪問和讀取。根據(jù)圖5B所示的流程圖,最初的讀文件操作觸發(fā)文件變換模塊70,以確定文件和讀文件程序的這個特定組合將要進行一次變換。
7.隨后的所有對第一層數(shù)據(jù)文件的讀文件操作都調(diào)用文件變換模塊70,根據(jù)圖5B,它允許文件系統(tǒng)進行實際的讀操作,并且在操作系統(tǒng)71使之可以用于被修改的可執(zhí)行程序30A之前,在原處變換緩沖區(qū)中的文件數(shù)據(jù)。雖然這不是一般的讀/寫文件,但如果需要的話,寫操作同樣可以被截取和變換。
8.當程序退出,或者用戶移到軟件程序中的另一個層次時,第一層的文件被關閉,這時,文件變換模塊70重置所有與該數(shù)據(jù)文件有關的信息。對該文件的隨后任何操作都應該從打開文件操作開始,因為本地的文件系統(tǒng)和根據(jù)本發(fā)明的變換模塊70都要求這樣做。
最佳實施例的以上描述不應該用任何局限的方式來解釋,因為在不脫離本發(fā)明原理的前提下可以進行各種變化和精練。本發(fā)明的范圍由隨后的權利要求書及其等同物來限定。
權利要求
1.一種計算機系統(tǒng),包括(a)一種用于至少存放一個被變換數(shù)據(jù)文件的存儲器,(b)一種用于執(zhí)行一個操作系統(tǒng)、一個可執(zhí)行程序以及一個僅對所述可執(zhí)行程序提供變換服務的文件變換模塊程序的處理器,所述文件變換模塊程序把文件操作從所述可執(zhí)行程序中截取到所述的操作系統(tǒng),其中,在截取文件操作時,所述文件變換模塊程序從所述至少一個被變換的數(shù)據(jù)文件中檢索被變換的數(shù)據(jù),利用變換鑰對所述的被變換數(shù)據(jù)進行逆變換,使之成為其非變換狀態(tài),并且將處于其非變換狀態(tài)的所述數(shù)據(jù)提交給所述的可執(zhí)行程序。
2.根據(jù)權利要求1的計算機系統(tǒng),其中,所述文件操作包括打開文件操作、讀文件操作、寫文件操作以及關閉文件操作。
3.根據(jù)權利要求2的計算機系統(tǒng),其中,一旦執(zhí)行打開文件操作,所述文件變換模塊程序就把唯一文件標識符賦予所述的至少一個被變換的數(shù)據(jù)文件,并且將所述的唯一文件標識符記錄在某個激活的文件表中。
4.根據(jù)權利要求3的計算機系統(tǒng),其中,在執(zhí)行讀文件和寫文件操作時,文件變換模塊程序檢測該激活的文件表,以確定是否要應用逆變換,如果不用,則將所述文件操作返回到所述的操作系統(tǒng),以便進行正常處理。
5.根據(jù)權利要求3的計算機系統(tǒng),其中,在關閉所述的被變換數(shù)據(jù)文件時,文件變換模塊程序從所述的激活文件表中刪除用于所述至少一個被變換的數(shù)據(jù)文件的唯一文件標識符。
6.根據(jù)權利要求1的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個只讀文件。
7.根據(jù)權利要求1的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個讀/寫文件。
8.根據(jù)權利要求1的計算機系統(tǒng),其中,所述可執(zhí)行程序被嵌入針對執(zhí)行保護模塊程序的一個調(diào)用,它僅當執(zhí)行所述可執(zhí)行程序時才能被調(diào)用,當所述可執(zhí)行程序第一次執(zhí)行時,所述保護模塊程序初始化所述文件變換模塊。
9.根據(jù)權利要求8的計算機系統(tǒng),其中所述變換鑰被存放在所述保護模塊程序中。
10.根據(jù)權利要求8的計算機系統(tǒng),其中,所述保護模塊程序是一個動態(tài)鏈接庫(DLL)。
11.根據(jù)權利要求1的計算機系統(tǒng),其中,所述至少一個被變換數(shù)據(jù)文件已經(jīng)利用DES和RSA加密算法中的一種進行加密。
12.根據(jù)權利要求1的計算機系統(tǒng),其中,非可執(zhí)行的許可數(shù)據(jù)被嵌入所述的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述的可執(zhí)行程序提供變換服務。
13.根據(jù)權利要求1的計算機系統(tǒng),其中,可執(zhí)行程序代碼被嵌入所述的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述的可執(zhí)行程序提供變換服務。
14.一種從包含可執(zhí)行程序以及一個或多個數(shù)據(jù)文件的計算機軟件應用中產(chǎn)生該計算機軟件應用的一個被保護版本的方法,包括以下的步驟I.應用一個或多個變換算法和變換鑰將一個或多個數(shù)據(jù)文件變換成一個或多個對應的被變換數(shù)據(jù)文件;II.存放所述的變換鑰;III.檢索只對所述可執(zhí)行程序提供變換服務的文件變換模塊程序;IV將所述的一個或多個對應的被變換數(shù)據(jù)文件、變換鑰、可執(zhí)行程序以及文件變換模塊程序傳送到某個介質(zhì)上,以便發(fā)送給用戶。
15.根據(jù)權利要求14的方法進一步包含修改所述可執(zhí)行程序的步驟,它將執(zhí)行保護模塊程序的一個調(diào)用嵌入所述的可執(zhí)行程序,僅當執(zhí)行所述可執(zhí)行程序時才能調(diào)用該保護模塊程序,當?shù)谝淮螆?zhí)行所述的可執(zhí)行程序時,所述保護程序?qū)λ鑫募儞Q模塊進行初始化。
16.根據(jù)權利要求15的方法,其中,存儲所述變換鑰的步驟包括將所述變換鑰嵌入所述保護模塊程序的步驟。
17.根據(jù)權利要求15的方法,其中,所述保護模塊程序是一個動態(tài)鏈接庫(DLL)。
18.根據(jù)權利要求14的方法,其中,所述變換算法是從DES和RSA加密算法中的一個選擇的。
19.根據(jù)權利要求14的方法,進一步包含將非可執(zhí)行的許可數(shù)據(jù)嵌入所述可執(zhí)行程序的步驟,以便保證所述文件變換模塊僅對所述可執(zhí)行程序提供變換服務。
20.根據(jù)權利要求14的方法,進一步包括將可執(zhí)行程序代碼嵌入所述的可執(zhí)行程序中的步驟,以便保證所述的文件變換模塊僅對所述的可執(zhí)行程序提供變換服務。
21.一種機器可讀介質(zhì),包含一個可執(zhí)行程序、至少一個被變換的數(shù)據(jù)文件、至少一個變換鑰,以及僅對所述可執(zhí)行程序提供變換服務的文件變換模塊程序,并且當所述可執(zhí)行程序和所述文件變換模塊程序在一個計算機系統(tǒng)上運行時,所述文件變換模塊程序從所述可執(zhí)行程序中將文件操作截取到所述的計算機系統(tǒng)的操作系統(tǒng)上,其中,當某個文件操作被截取時,所述文件變換模塊程序從至少一個被變換的數(shù)據(jù)文件中檢索被變換的數(shù)據(jù),利用所述至少一個變換鑰將所述被變換的數(shù)據(jù)逆變換為其非被變換的狀態(tài),并且將這種狀態(tài)下的所述數(shù)據(jù)提交給所述的可執(zhí)行程序。
22.根據(jù)權利要求21的機器可讀介質(zhì),其中,所述文件操作包括打開文件操作、讀文件操作、寫文件操作以及關閉文件操作。
23.根據(jù)權利要求22的機器可讀介質(zhì),其中,在截取打開文件操作時,所述文件變換模塊程序把唯一文件標識符賦予所述的至少一個被變換的數(shù)據(jù)文件,并且將所述的唯一文件標識符記錄在某個激活的文件表中。
24.根據(jù)權利要求23的機器可讀介質(zhì),其中,在截取讀文件或?qū)懳募僮鲿r,文件變換模塊程序檢測該激活的文件表,以確定是否要應用逆變換,如果不用,則將所述文件操作返回到所述的操作系統(tǒng),以便進行正常處理。
25.根據(jù)權利要求23的機器可讀介質(zhì),其中,當在計算機系統(tǒng)上運行時,一旦關閉所述的至少一個被變換數(shù)據(jù)文件,文件變換模塊程序就從所述的激活文件表中刪除用于所述至少一個被變換的數(shù)據(jù)文件的所述唯一文件標識符。
26.根據(jù)權利要求21的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個只讀文件。
27.根據(jù)權利要求21的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個讀/寫文件。
28.根據(jù)權利要求21的計算機系統(tǒng),其中,在所述可執(zhí)行程序中嵌入執(zhí)行保護模塊程序的一個調(diào)用,僅當執(zhí)行所述可執(zhí)行程序時才能被調(diào)用,當所述可執(zhí)行程序第一次執(zhí)行時,所述保護模塊程序初始化所述文件變換模塊。
29.根據(jù)權利要求28的計算機系統(tǒng),其中所述至少一個變換鑰被嵌入所述保護模塊程序中。
30.根據(jù)權利要求28的計算機系統(tǒng),其中,所述保護模塊程序是一個動態(tài)鏈接庫(DLL)。
31.根據(jù)權利要求21的計算機系統(tǒng),其中,所述至少一個被變換數(shù)據(jù)文件已經(jīng)利用DES和RSA加密算法中的一種進行加密。
32.根據(jù)權利要求21的計算機系統(tǒng),其中,非可執(zhí)行的許可數(shù)據(jù)被嵌入所述的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述的可執(zhí)行程序提供變換服務。
33.根據(jù)權利要求21的計算機系統(tǒng),其中,可執(zhí)行程序代碼被嵌入所述的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述的可執(zhí)行程序提供變換服務。
34.一種計算機系統(tǒng),包括(a)一個用于至少存放一個被變換數(shù)據(jù)文件的存儲器,(b)一個用于執(zhí)行某個操作系統(tǒng)和某個被修改的可執(zhí)行程序的處理器,所述被修改的可執(zhí)行程序被修改來調(diào)用僅對所述被修改的可執(zhí)行程序提供變換服務的文件變換模塊程序,所述文件變換模塊程序把文件操作從所述被修改的可執(zhí)行程序中截取到所述的操作系統(tǒng),其中,在截取文件操作時,所述文件變換模塊程序從所述至少一個被變換的數(shù)據(jù)文件中檢索被變換的數(shù)據(jù),利用變換鑰對所述的被變換數(shù)據(jù)進行逆變換,使之成為其非變換狀態(tài),并且將處于其非變換狀態(tài)的所述數(shù)據(jù)提交給所述被修改的可執(zhí)行程序。
35.根據(jù)權利要求34的計算機系統(tǒng),其中,所述文件操作包括打開文件操作、讀文件操作、寫文件操作以及關閉文件操作。
36.根據(jù)權利要求35的計算機系統(tǒng),其中,在執(zhí)行打開文件操作時,所述文件變換模塊程序把唯一文件標識符賦予所述至少一個被變換的數(shù)據(jù)文件,并且將所述的唯一文件標識符記錄在某個激活的文件表中。
37.根據(jù)權利要求36的計算機系統(tǒng),其中,在執(zhí)行讀文件和寫文件操作時,文件變換模塊程序檢測該激活的文件表,以確定是否要使用逆變換,如果不用,則將所述文件操作返回到所述的操作系統(tǒng),以便進行正常處理。
38.根據(jù)權利要求36的計算機系統(tǒng),其中,在關閉所述的被變換數(shù)據(jù)文件時,文件變換模塊程序從所述的激活文件表中刪除用于所述至少一個被變換的數(shù)據(jù)文件的唯一文件標識符。
39.根據(jù)權利要求34的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個只讀文件。
40.根據(jù)權利要求34的計算機系統(tǒng),其中,所述至少一個被變換的數(shù)據(jù)文件是一個讀/寫文件。
41.根據(jù)權利要求34的計算機系統(tǒng),其中,在所述被修改的可執(zhí)行程序中嵌入執(zhí)行保護模塊程序的一個調(diào)用,它僅當執(zhí)行所述被修改的可執(zhí)行程序時才能被調(diào)用,當所述被修改可執(zhí)行程序第一次執(zhí)行時,所述保護模塊程序初始化所述文件變換模塊。
42.根據(jù)權利要求41的計算機系統(tǒng),其中,所述變換鑰被存放在所述保護模塊程序中。
43.根據(jù)權利要求41的計算機系統(tǒng),其中,所述保護模塊程序是一個動態(tài)鏈接庫(DLL)。
44.根據(jù)權利要求34的計算機系統(tǒng),其中,所述至少一個被變換數(shù)據(jù)文件已經(jīng)利用DES和RSA加密算法中的一種進行加密。
45.根據(jù)權利要求34的計算機系統(tǒng),其中,非可執(zhí)行的許可數(shù)據(jù)被嵌入所述被修改的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述被修改的可執(zhí)行程序提供變換服務。
46.根據(jù)權利要求34的計算機系統(tǒng),其中,可執(zhí)行程序代碼被嵌入所述被修改的可執(zhí)行程序中,以便保證所述的文件變換模塊僅對所述被修改的可執(zhí)行程序提供變換服務。
全文摘要
公開一種改進的軟件保護機制,通過這種軟件保護機制,軟件程序的“財產(chǎn)文件”和核心可執(zhí)行程序本身都以這樣一種方式進行變換,使得被修改的可執(zhí)行程序的任何重發(fā)送也要求重發(fā)送對應的被變換的財產(chǎn)文件。在操作中,文件變換模塊被用來截取來自操作系統(tǒng)的任何文件活動。僅當對操作系統(tǒng)的調(diào)用請求被識別為是針對屬于或來自被修改的可執(zhí)行程序的被變換數(shù)據(jù)時,文件變換模塊才執(zhí)行所要求的逆變換。保護模塊包括財產(chǎn)表、調(diào)用過程識別信息、變換鑰以及可任意選擇的其他信息,例如與文件變換模塊結合使用的變換算法。
文檔編號G06F21/22GK1258041SQ9912651
公開日2000年6月28日 申請日期1999年12月22日 優(yōu)先權日1998年12月22日
發(fā)明者戈登·E·拉羅斯, 斯科特·A·湯姆森 申請人:網(wǎng)絡活動公司