計算機軟體安裝的製作方法
2023-05-22 09:23:56
專利名稱:計算機軟體安裝的製作方法
技術領域:
本發明涉及計算機軟體並且特別涉及用於計算機軟體安裝的裝置。
目前計算機軟體,特別是例如電子表格和文字處理程序的應用軟體,都很複雜並且使用了許多主執行程序需要時被調用的子例程。在許多情況下,其它應用程式也需要這些子例程。例如,列印子例程或者用於打開文件或關閉文件的子例程,可以被多種不同的應用程式使用。因此已經提出了為了節約系統存儲器的空間,這些子例程在儘可能的情況下應該共享。這樣,在安裝一個新的應用程式時,建議新的應用程式在儘可能的情況下檢測系統內已經可用的資源並使用那些資源。這樣,當新的應用程式需要一個比它所發現的系統內可用的子例程更新的版本時,在安裝這個新的應用程式時,安裝這個較新的版本。
這導致了應用程式間的衝突。系統內已存在的應用程式可能需要一個較早版本的子例程,而其現在卻被新的應用程式所需的較新的版本所覆蓋。這樣可能會導致這個已存在的應用程式的操作變得不可預知或者不能完成。
本發明試圖解決這些難題。
本發明提供了包括一個在執行期間需要訪問所述至少一個子例程的可執行程序的計算機軟體,該軟體進一步包括加密形式的一個或每個子例程,並且進一步包括一個可操作的解密例程,用於至少在訪問需要時將這些加密子例程轉換成可執行形式。
優選地,無論何時所述程序被執行,都可以執行解密例程,以便在任何情況下重新創建可執行形式的子例程。優選地,解密例程創建一個可被程序訪問的地址表以便為訪問而定位子例程。優選地,解密例程是可操作的,以用於檢測在運行軟體的系統內是否存在已經可用的子例程,並用於使該可執行程序使用已可用的子例程。該解密例程可操作用於把一個已可用子例程的地址合併到地址表內,這樣就不需要解密該子例程的另一個複本。
該解密例程最好可操作用於區分子例程的不同版本,由此在系統內只有一個不同版本可用的情況下才解密加密版本。
該軟體最好進一步合併可執行程序的加密複本,該解密例程可被可操作以便解密所述程序的一個可執行複本。解密例程最好可執行,用於在檢測到包含在該軟體內的非加密複本被破壞時解密該可執行程序的複本。
加密和解密最好包括或者涵蓋壓縮或解密技術。
本發明還提供了一種包括上述計算機軟體的數據存儲裝置。
本發明還提供了一種計算機系統,它包括運行時可執行軟體的處理裝置,以及至少一個上述的計算機軟體。
本發明進一步提供了一種運行時可執行一個可執行程序的計算機系統,該系統包括第一存儲裝置,它包括表示可執行程序的計算機可讀代碼;加載裝置,運行時用於加載執行代碼;標識裝置,運行時用於標識在可執行程序執行期間所需要的任何子例程;第二存儲裝置,它包括表示由該標識裝置標識的所述或每個子例程的計算機可讀代碼;以及第二加載裝置,它運行時用於在系統的別處沒有可用的子例程的情況下,從第二存儲裝置加載所述或每個子例程。
最好所述的標識裝置和第二存儲裝置在可執行程序執行初始化的時候被運行,由此使所述子例程在任何時候都可以使用。所述第二加載裝置在地址表中產生的入口,以標識已經可以使用的子例程的位置,地址表可以在需要訪問時被可執行程序訪問,用於定位子例程。第二加載裝置最好運行時用於檢測系統內是否存在已經可用的子例程,並且如果可用,就使所述可執行程序使用所述子例程。第二加載裝置可操作地將系統內其它地方可用子例程的地址合併到地址表內。第二加載裝置最好運行時用於區分子例程的不同版本,由此在系統內其它地方的僅僅有不同版本可用的情況下才解密和加密版本。
所述第二存儲裝置進一步包括表示所述可執行程序的計算機可讀代碼,並且該第二加載程序可以操作用於在系統內其它地方可執行程序不可用時從該第二存儲裝置中加載該可執行程序。在檢測到系統內其它地方可執行程序的複本被破壞時,所述可執行程序可以採用加密的形式保存在所述第二存儲裝置中,並且第二加載裝置可操作用於解密所述複本。
加密和解密包括或者涵蓋壓縮或解密技術。
本發明還提供了一種安裝一個計算機軟體的方法,包括
1.安裝一個在執行期間需要訪問至少一個子例程的那種類型的可執行程序;2.對所述子例程的加密複本進行解密;以及3.安裝所述的解密複本,以便被可執行程序訪問。
最好在每個所述可執行程序需要被執行的時候都執行解密和安裝的步驟。
該方法進一步包括標識任何已經安裝並且對可執行程序是可使用的子例程,以及解密和安裝所述或任何需要的但不能使用的子例程的步驟。標識已可用的子例程的步驟最好包括區分子例程的不同版本,由此在只有一個不同版本是可用的情況下解密一個加密版本。
該方法進一步包括評定可執行程序的破壞情況,以及解密和安裝該可執行程序的另外的複本以便在檢測到破壞的情況下使用的步驟。
加密和解密最好包括或者涵蓋壓縮或解壓縮技術。
本發明的實施例將參照附圖以舉例的方式詳細描述,其中
圖1表示實現本發明所用的數據處理設備的原理性簡單示意圖。
圖2表示了根據前面所述的方案安裝了應用程式的RAM。
圖3a、3b和3c表示根據本發明在RAM中安裝應用程式的步驟。
在描述用於安裝軟體的裝置之前,首先描述一下實現本發明所使用的數據處理系統的基本部件是很有幫助的。圖1表示包括一個與輸入/輸出設備3相連的處理器2的計算機系統1。處理器2還配有在處理期間使用的隨機存儲器(RAM)4。附加存儲容量由例如硬碟驅動器5來提供。計算機系統可以是,例如IBM PC類型,或者是與其等同的計算機。
按一般的習慣,軟體應用程式在需要之前要被存儲在驅動器5上,然後在需要使用時才安裝到RAM4中。這提高了處理器2訪問軟體的速度,並且因此就允許處理器2更快的處理。圖2示出了一部分RAM10,其中存儲了為圖1所示類型設備的處理器的使用而安裝的一個應用程式(例如文字處理應用程式)。此圖採用非常簡化、示意性的形式表示了應用程式的各個組成部分。這些部分包括一個加載程序12,它是用於在應用程式最初被打開時實施初始化操作的代碼塊。該程序的主體安裝在RAM10的14處。如上所述,程序14需要訪問包括子例程的文件。這些文件通常稱為.DLL文件並且被不同的應用程式所共享。因此,.DLL文件16在圖中RAM10的其它區域示出。程序14和.DLL文件之間的區域18可自由用於其它應用,例如用於另一個應用程式的安裝。
RAM10還包括一個輸入地址表(IAT)20。這是一個標識.DLL文件16的位置的表,以使處理器2在程序14需要的時候通過查找它們在IAT20內的位置而訪問這些文件16。在應用程式被從硬碟驅動器複製到RAM10之後,當執行首先轉到加載程序12時,由加載程序12創建IAT。加載程序12檢查應用程式需要哪些.DLL文件,在硬碟驅動器上尋找這些文件,將它們加載到RAM10中並創建IAT20以標識每個.DLL文件以及它在RAM中的位置。
圖3a、3b和3c表示了根據本發明加載應用程式的方式。這些可以結合圖4來理解,圖4是一個表示應用程式加載時所執行的一系列步驟的流程圖。所示的步驟僅僅是與本發明有關的那些步驟。應當理解的是,與本發明無關的其它步驟也可以作為加載的一部分在所示的步驟之前、期間或之後執行。
RAM10最初的加載產生了圖3a所示的狀態。加載程序模塊12a處於適當的位置上(圖4的步驟100),大體上相應於圖1的加載程序12。程序14也被安裝(步驟102)在與圖1中的安裝相對應的位置。然而,應當注意在圖3a中,圖1中用於LAT20的存儲器區域就是圖3a中的空白區域。
根據本發明,作為初始化加載的一部分,稱為引擎22的可執行代碼的附加塊被安裝在RAM10中程序14的下面,也就是區域18的一部分。其它文件24與引擎22相關聯,並且與其一起加載(步驟106)。這些文件是圖1的.DLL文件16的加密版本。加密可以採用壓縮或採用更安全的加密技術。在圖3a中,文件24用圓括號標識以示意性地表示它們的加密性質。
上述初始化加載之後,執行轉到加載程序模塊12a(步驟108)。也就是,處理器12的程序指針指向加載程序模塊12a起始的存儲器地址。圖3b表示接著在RAM10中發生的變化。作為應用程式初始化的一部分,加載程序12使引擎22運行(步驟110)。引擎22提供了兩個功能。首先,引擎22查看系統,以便標識應用程式所需的任何資源(也就是例中的.DLL文件) (步驟112)並且標識那些在系統中已可用的資源(步驟114)。預設地,步驟114還標識那些不可用的資源。在此實施例中,假定需要子例程.DLL1,並且它在硬碟驅動器5上是可以獲得的,但是子例程.DLL2也是需要的,在硬碟驅動器上卻不可以獲得。這樣引擎22可以定位在硬碟驅動器上的.DLL1,將其拷貝到RAM10(步驟116)並通過在IAT20中產生一個正確的入口來創建IAT表20(步驟118)用來標識子例程.DLL1及其位置。這就產生了圖3b所示的情況。
作為該過程的一部分,引擎22也會標識出(步驟114)在硬碟驅動器上已經不可使用的或者沒有可用的合適版本並需要的任何子例程。在此實施例中,子例程.DLL2開始就是不可用的。因此引擎22訪問(步驟120)如(.DLL2)表示的加密文件,然後對.DLL2的複本進行解密操作(步驟122)。然後安裝解密的複本(步驟124)以使其對於程序14可以使用。同樣,引擎22在IAT20中再產生一個合適的用於標識文件.DLL2的狀態和位置的入口(步驟126)。
這樣,在引擎22完全如所描述的那樣執行後,RAM10就是圖3c所示的狀態。應用程式的安裝就和圖2的安裝相同了,那兒有加載程序12a、程序14、用於把程序指向子例程的IAT20和完整的一組DLL子例程16。另外,圖2中的一些空區域18現在也填充引擎22和解密的(.DLL)文件,但是程序14一旦開始執行這些還不被調用。程序14所需要的資源已經在區域16處可以使用並且在IAT20中已進行了標識,程序14現在開始執行(步驟128)。
將引擎22和加密(.DLL)文件合併到最初安裝在RAM10中的軟體以達到下面所述的非常有用的技術效果。應用程式是自包含的,因為它具有其操作所需要的全套子例程。為了節約空間這些子例程最好採用壓縮格式,為安全起見其還可加密。當子例程不可用或者不是正確的版本時,可以按照上面的說明進行安裝。更進一步的,當加載程序模塊執行並調用引擎22時,每當應用程式運行時,它們就按需被安裝。因此,不同的應用程式的安裝或操作都不影響應用程式的正確操作,然而,受到攻擊時其它的應用程式可能修改、替換或覆蓋共享的.DLL文件。當應用程式下一次運行時,任何由於其它應用程式的動作或者其它的原因而導致不可用的共享文件都將從加密(.DLL)文件而被存儲。
引擎22和加密文件(DLL)的操作還提供了一定程度的防止病毒攻擊或其它破壞的保護。引擎22可以被編程為在發現或懷疑任何破壞時,評估硬碟上明顯可用的子例程的破壞程度、從(.DLL)文件安裝新近的、未加密的複本。
本發明可進一步擴展,針對在檢測到或懷疑主程序14內的任何破壞的情況下,引擎22還可以提供一個主程序14的加密複本,解密並安裝一個完整的、全新的程序14的複本。
根據上面的描述很明顯的,在不背離本發明的範圍下,可對上述的裝置進行許多變化形式和修改。特別是,對於本領域的技術人員來說很明顯,此技術可以用非常廣泛種類的語言以及使用任何不同的加密、解密壓縮或解密技術來實施。
儘管,前面的說明書的盡力描述力在突出本發明中被視為相當重要的那些特徵,應當理解,在前面所提到的和/或在附圖中所表示的任何專利性技術特徵或者技術特徵的組合方面,不管是否特別強調,申請人的權利要求保護均已在其中記載了。
權利要求
1.計算機軟體,包括在執行期間需要訪問至少一個子例程的可執行程序,該軟體進一步包括加密形式的所述或每個子例程,以及進一步包括解密例程,所述解密例程運行時用於至少在需要訪問時將加密的子例程轉換成可執行的形式。
2.根據權利要求1的軟體,其特徵在於,每當所述程序執行時,所述解密例程就執行,由此在每種情況下重新創建具有可執行形式的所述子例程。
3.根據權利要求1或2的軟體,其特徵在於解密例程在地址表中產生用來標識重新創建的子例程的位置的入口,所述地址表可以被所述程序訪問以便在需要時對要訪問的子例程進行定位。
4.根據任何前面權利要求的軟體,其特徵在於所述解密例程運行時用於檢測在運行所述軟體的系統內是否存在已經可用的子例程,並且如果已經可用則使所述可執行程序使用子例程。
5.根據權利要求4和3的軟體,其特徵在於所述解密例程運行時用於將已經可用的子例程地址合併到所述地址表中,由此就不需要解密所述子例程的另外的複本。
6.根據任何前面權利要求的軟體,其特徵在於所述解密例程運行時用於區分子例程的不同版本,由此在系統中僅僅有一個不同的版本可以使用時對加密版本進行解密。
7.根據任何前面權利要求的軟體,還合併所述可執行程序的加密複本,所述解密例程運行時用於解密所述程序的可執行複本。
8.根據權利要求7所述的軟體,其特徵在於所述解密例程運行時用於在檢測到包含在所述軟體內的非加密複本被破壞時解密所述可執行程序的複本。
9.根據任何前面權利要求的軟體,其特徵在於加密和解密包括或涵蓋壓縮或解壓縮技術。
10.一種計算機可讀介質,其上記載了有程序,其特徵在於所述程序包括根據任何前面的權利要求所述的計算機軟體。
11.一種計算機系統,其包括運行時用於執行軟體的處理裝置,以及至少一個根據權利要求1至9中任何一個的所述計算機軟體。
12.一種計算機系統,運行時用於執行可執行程序,所述系統包括第一存儲裝置,包括表示所述可執行程序的計算機可讀代碼;加載裝置,運行時用於加載所述要執行的代碼;標識裝置,運行時用於標識所述可執行程序在其執行期間所需要的任何子例程;第二存儲裝置,包括表示由所述標識裝置標識的所述或每個子例程的計算機可讀代碼;以及第二加載裝置,運行時用於在所述系統別處子例程不可用時從所述第二存儲裝置加載所述或每個子例程。
13.根據權利要求12的系統,其特徵在於所述標識裝置和第二加載裝置在每當所述可執行程序的執行初始化時被運行,由此使所述子例程在每種情況都可以使用。
14.根據權利要求12或13的系統,其特徵在於所述第二加載裝置在地址表中生成一個入口以便標識已經可以使用的子例程的位置,所述地址表可以被所述可執行程序訪問以便在需要時對要訪問的子例程進行定位。
15.根據權利要求12至14中的的系統,其特徵在於所述第二加載裝置運行時用於檢測在所述系統內已經可以使用的子例程的狀態,並且如果可以使用就使所述可執行程序使用所述子例程。
16.根據權利要求15和14的系統,其特徵在於所述第二加載裝置運行時用於將在系統其它地方可用子例程的地址合併到地址表內。
17.根據權利要求12至16中的任意一個的系統,其特徵在於所述第二加載裝置運行時用於區分子例程的不同版本,由此在系統內別處僅僅有不同版本可用的情況下對加密版本進行解密。
18.根據權利要求12至17中的任意一個的系統,其特徵在於所述第二存儲裝置進一步包括表示所述可執行程序的計算機可讀代碼,並且所述第二加載程序運行時用於在所述系統內別處可執行程序不可用時從所述第二存儲裝置中加載所述可執行程序。
19.根據權利要求18的系統,其特徵在於在檢測到所述系統內別處可用的所述可執行程序的複本被破壞時,所述可執行程序以加密的形式保存在所述第二存儲裝置中,並且所述第二加載裝置運行時用於解密所述複本。
20.根據權利要求12至19中任意的一個的系統,其特徵在於加密和解密包括或者函蓋壓縮或解壓縮技術組成。
21.一種安裝一個計算機軟體的方法,其包括1.安裝一個在執行期間需要訪問至少一個子例程的那種類型的可執行程序;2.對所述子例程的加密複本進行解密;以及3.安裝所述解密複本,以便被所述可執行程序訪問。
22.根據權利要求21的方法,其特徵在於所述解密和安裝的步驟在每當所述可執行程序需要被執行的時候執行。
23.根據權利要求21或22的方法,其特徵在於所述方法進一步包括標識任何已經安裝並且對於所述可執行程序是可使用的子例程,並且僅對所述或任何需要的但不能使用的子例程進行解密和安裝的步驟。
24.根據權利要求23的方法,其特徵在於所述標識已可用的子例程的步驟包括區分子例程的不同版本,由此在僅僅有一個不同版本是可用的情況下解密一加密版本。
25.根據權利要求21至24中任意的一個的方法,其特徵在於所述方法進一步包括評定所述可執行程序的破壞情況,以及在檢測到破壞的情況下解密和安裝所述可執行程序另外的複本以供使用的步驟。
26.根據權利要求21至25中任意的一個的方法,其特徵在於加密和解密包括或涵蓋壓縮或解壓縮技術。
27.一種參照相關附圖如上所述的計算機軟體產品。
全文摘要
當可執行程序要被安裝到RAM(10)中時,RAM最初包括加載程序模塊(12a)、程序(10)、引擎(22)和諸如加密的DLL文件的加密資源(24)。在程序(14)要被運行時,加載程序模塊(12a)調用引擎(22),它訪問程序(14)所需要的子例程資源,標識出系統內已經可用的任何子例程,加載那些已經可用的子例程,以及解密和加載任何不可用的子例程。這樣就保證了所需要的子例程在每當程序(14)執行時對於程序(14)都是可以使用的。
文檔編號G09C1/00GK1527972SQ01815804
公開日2004年9月8日 申請日期2001年7月12日 優先權日2000年7月18日
發明者J·A·薩法, J A 薩法 申請人:比特阿茲有限公司