1. 程式人生 > >目前常見軟體保護技術概述

目前常見軟體保護技術概述

       軟體保護技術從廣義的角度來說,可以包括計算機軟體和系統的安全。目前大多數關於計算機的安全研究,主要是研究如何防止合法使用者和其資料被惡意客戶端程式所攻擊,以及如何設計和管理計算機系統來實現一個嚴密的安全系統。典型的方法是使用者限制客戶端程式的行為。例如在JAVA安全模型中,使用者可以使用位元組碼校驗來保證不被信任的客戶端程式的型別安全,不被信任的程式碼(例如APPLET)將被禁止執行一些特定操作,例如可以限制在本地檔案系統寫檔案操作。類似的技術還有軟體故障隔離(Software Fault Isolation),它可以監視客戶端程式,確保其不能夠在它賦予範圍之外進行寫操作,在.NET中也採用了此種技術。
 
        近期,關於移動代理(Mobile Agent)系統的安全研究吸引了更多人的注意,移動代理屬於分散式計算的一個實施方法,即把原本在一臺計算機上執行的一個大的程式,分解成多個子程式,然後在不同的計算機上進行執行,這樣就帶來了一個問題,即合法的客戶端程式如果安裝在惡意主機上,如何防止惡意主機的侵犯。客戶端程式碼有可能包含一些商業機密或者版權資訊,如果客戶端程式的完整性被侵犯,也將會導致客戶端程式擁有者的財產損失。
 
         微軟還推出了安全計算平臺(Trusted Computing Platform Alliance),它的目標是定義硬體支援的、以作業系統為基礎的,受信任的子系統,它們將變為個人計算平臺的有機組成部分,依賴於公鑰體系和架構,系統需要支援安全儲存,系統內部信任路徑、安全協處理器。
 
         軟體保護技術從狹義的角度來說,即如何防止合法軟體被盜版,主要包括基於硬體的保護方式和基於軟體的保護方式

。關於軟體保護技術的研究,實際上是一項綜合的技術,目前一些軟體保護產品供應商宣稱自己的產品是不可破解的,往往是一種營銷的策略,並沒有提供確切的資料和評測報告。還有一些供應商利用智慧卡晶片本身具有很高的安全性,來誤導軟體開發商以為採用智慧卡晶片的軟體保護產品也一定具有同樣的安全性,其實這些都是一些錯誤,片面的觀點。軟體保護產品和其他安全產品相比具有一定的特殊性,它所涉及的內容非常的廣泛,從上層的應用軟體、作業系統、驅動、硬體、網路等等,是一個綜合的技術範疇,不能夠單一的由某個方面來以偏概全的斷定其安全與否。
 
1、基於硬體的保護方式


         基於硬體的軟體保護策略可以包含多種功能,主要有認證過程、資料加密、訪問控制、唯一的系列號、金鑰產生、可靠的資料傳輸和硬體識別。這些手段主要的目的是防止硬體被複制,有一些產品也支援許可證策略。基於硬體的保護可以具有很好的安全性。主要包括以下幾種典型方式:
 
       1.1 加密狗、加密鎖(Special-purpose Dongles)
加密狗是一種智慧性加密產品,又被稱為加密鎖。它是一個可以安裝在並口、串列埠或USB介面上的硬體電路。在安全性上和基於軟體的保護方式相比,具有更高的安全性,但是對於使用被保護軟體的終端使用者而言,就不得不被迫接收在自己的機器上安裝相應的保護硬體和驅動程式,易用性上存在一定問題。同時和基於軟體的保護方式相比,價格也比較高。
       
       1.2 光碟、軟盤保護
被保護軟體的部分金鑰可以放在可移動的軟盤或光碟當中,只有當軟盤或光碟存在的時候,被保護軟體才可以執行,遊戲軟體經常採用此種方式。
其基本原理是,例如Macrovision SafeDisk工具,它是在光碟的光軌上隱藏一個金鑰,而一般的光碟燒錄機無法複製此金鑰,通過此方法達到不可以複製光碟的目的,軟盤使用的技術類似。
存在問題:如果一旦原盤被劃壞或者毀壞,使用者就無法繼續使用軟體,同時這種保護方式可以被黑客很容易的分析或跟蹤找到判斷程式碼處,通過修改可執行檔案,跳過此段程式碼,達到破解的目的。而且有的加密光碟可用工作在原始模式(RAW MODE)的光碟拷貝程式來原樣拷貝,比如用Padus公司的DiscJuggler和Elaborate Bytes公司的CloneCD等拷貝工具,所以此種保護技術的安全性並不是很高,但是由於其具有價格優勢,目前還是有一些軟體開發商使用此種技術來保護自己的軟體。

2 基於軟體的保護方式
        基於軟體的保護技術和基於硬體的保護技術相比,在價格上具有明顯的優勢,但是在安全性上和硬體相比還是相差很大,一般正式的商業軟體都使用基於硬體的保護方式。基於軟體的軟體保護方式一般分為:註冊碼、許可證檔案、許可證伺服器、應用伺服器模式、軟體老化等。


       2.1 註冊碼 (License Key) 
軟體開發商對一個唯一串(可能是軟體終端使用者的相關資訊,例如:主機號、網絡卡號、硬碟序列號、計算機名稱等),使用對稱或非對稱演算法以及簽名演算法等方法產生註冊碼。然後需要使用者進行輸入(可以在軟體安裝過程或單獨的註冊過程)。當輸入註冊碼後,被保護軟體執行時進行解密,並和儲存在軟體中的原始串進行比較。存在問題:金鑰隱藏在程式程式碼中,比較容易洩漏,同時黑客可以使用逆向工程,分析或跟蹤找到判斷程式碼處,通過暴力破解的方法進行破解。


       2.2 許可證檔案(License File) 
和使用註冊碼類似,但是許可證檔案可以包含更多的資訊,通常是針對使用者的一些資訊。檔案中可以包含試用期時間,以及允許軟體使用特定功能的一些資訊。被保護軟體在執行時,將每次檢查許可證檔案是否存在。典型的方法是使用非對稱演算法的私鑰對許可證檔案進行簽名,而公鑰嵌在軟體程式碼中。存在問題:可以通過修改系統時鐘來延長使用試用期許可證,當許可證到期時,還可以重新安裝作業系統,繼續使用。同時黑客可以使用逆向工程,分析或跟蹤找到判斷程式碼處,通過暴力破解的方法進行破解。


       2.3 許可證伺服器(License Server)
主要適用於網路環境中,可以為多套被保護軟體提供服務,例如一個網路許可證,可以限制併發最大使用者數為10。當客戶端被保護程式執行時,將佔用一個使用者數,退出時將釋放出使用者數,如果超過最大使用者數,伺服器將禁止多餘的被保護程式執行。存在問題:一般必須面向企業級使用者,黑客可以使用逆向工程,分析或跟蹤找到判斷程式碼處,通過暴力破解的方法進行破解。


       2.4 應用伺服器模式(Application Server Model)
所有程式程式碼儲存在受信任的伺服器端,終端使用者不需要安裝程式碼。典型應用為終端使用者不需要安裝軟體,只需要使用瀏覽器訪問伺服器來使用被保護軟體。一般遊戲軟體都是採用這種方式進行保護的。目前這種保護方式朝著兩個方向進行發展,一個是瘦客戶端程式,另一個是胖客戶端程式。存在問題:此種程式受到伺服器效能和網路頻寬,以及擴充套件性,成本等因素的影響。
       
       2.5 軟體老化(Software Aging)
這是一種極端的軟體保護方式[21],依賴於軟體的定期升級更新,每次更新都將使老版本的軟體功能不能繼續使用,例如不相容的檔案格式。盜版者必須給他的使用者經常升級。存在問題:經常升級造成很大的不便,如果可以自動化的進行此項工作,可以節省一部分精力。如果終端使用者需要共享資料,將依賴於每個人都有最新版本的軟體。這種保護方式並不適用於所有領域,例如:Microsoft Word可能工作的很好,但是如果是單使用者的遊戲程式將不適合。