共享軟件的版權保護如何用虛擬加密鎖實現

版權保護是最近幾年吵得比較火熱的一個話題,那么,共享軟件如何進行版權保護呢?今天我們就介紹一下。

一、常見的軟件版權保護技術

因特網的飛速發(fā)展為共享軟件的快速發(fā)展提供了前所未有的機遇,同時,由于軟件是一類特殊商品,極易復制和網上傳播,造成盜版軟件泛濫,嚴重地損害了軟件開發(fā)商的利益。如何進行軟件版權保護,防止非法用戶盜版,一直是軟件開發(fā)商不斷研究的課題。依據加密的原理和加密方式,目前軟件版權保護技術分為以下三大類:

(1)軟加密

它就是不依賴特定的硬件來實現對軟件加密保護的技術。常見的保護方式包括:序列號(注冊碼)保護方式、KeyFile保護方式、功能限制保護方式和時間限制保護方式等。它的最大優(yōu)勢在于加密成本低,便于在互聯網上進行軟件的發(fā)布和銷售,是適合共享軟件的保護方式;它的缺點在于不能防止破解者通過動態(tài)調試或靜態(tài)分析技術找到軟件的關鍵指令,修改該指令破解軟件。

(2)硬加密

它就是依賴特定的硬件,通過硬件和軟件相結合的方式來實現軟件加密保護的技術。常用的方法有磁盤加密、加密卡和加密鎖等。它的優(yōu)勢在于利用硬件的不可復制性達到較高強度的加密保護;其缺點是需要額外的硬件,成本高,而且也不利于網上發(fā)布軟件。

(3)網絡加密

它就是利用網絡技術對軟件進行加密保護的技術。常見的方法有網絡驗證等。它的優(yōu)點是將軟件運行的重要數據放在服務器上,只有通過聯網驗證用戶注冊信息后才能取得這些數據運行軟件,它的加密強度較高,其缺點是需要建立專門的服務器網站,成本高。

通過以上介紹可以看出較為安全的共享軟件版權保護方式要同時具有以下四個特征:①軟件的重要數據與軟件主體分離;②軟件不可復制;③軟件要有反修改,反跟蹤和反靜態(tài)分析等反破解功能;④便于在互聯網上發(fā)布和銷售軟件。根據這四個特征筆者提出一種基于虛擬加密鎖的共享軟件版權保護方法。

二、虛擬加密鎖的理論基礎

1、軟件加密鎖

軟件加密鎖是為軟件開發(fā)商提供的一種智能型的軟件加密工具,它包括一個安裝在計算機并行口或USB口上的硬件,及套適用于各種語言的接口軟件和工具軟件。它具有如下特點:加密鎖據有防破解功能,可對抗各種調試工具的跟蹤;一鎖一密碼或一種電路,軟硬件不可互換;提供各種語言的編程和工具軟件,方便開發(fā)人員在自己開發(fā)的程序中使用;允許軟件開發(fā)商將自己軟件中的一部分程序或算法寫進鎖中,并在鎖中運行,從而使開發(fā)商的軟件同加密硬件有機地結合在一起。

用戶在使用軟件時,必須把加密鎖連接到計算機的并口或USB口上,軟件才能繼續(xù)運行。如果沒有安裝加密鎖或安裝的不是該軟件的加密鎖,則軟件不能運行或功能不完整,從而達到保護軟件版權的目的。

2、DLL動態(tài)鏈接庫

DLL是一個可以被其它應用程序共享的已編譯的代碼模塊,其中封裝了一些可以被共享的代碼和資源。Windows應用程序可根據DLL中的指令打開、啟用、查詢、禁用和關閉驅動程序。DLL文件還可以方便地實現對硬件資源和內存資源的訪問。它主要具有如下特點:DLL的開發(fā)與具體的編程語言及編譯器無關,只要遵循其開發(fā)規(guī)范并安排正確的編程接口,無論使用何種語言編制的DLL都具有通用性;使用DLL不是將其庫代碼拷貝,而只在程序中記錄函數的入口點和接口,程序執(zhí)行時才能將代碼載入內存。多個程序使用相同的DLL時,內存只需要裝載一次,可以高效經濟地使用內存;DLL是基于Windows的程序模塊,它不僅包含可執(zhí)行代碼,還可以包含數據和各種資源,擴大了庫文件的使用范圍。

三、用虛擬加密鎖實現共享軟件版權保護的方法

1、虛擬加密鎖加密的原理

由上述DLL文件具有的功能和特點可知,對DLL文件進行反破解處理就可以實現硬件加密鎖的主要功能,完成對軟件版權的保護。另外,與加密鎖的硬件價格相比,DLL文件的開發(fā)幾乎不需要投入成本。再者,由于DLL文件與軟件主體在同一個文件夾下,軟件主體執(zhí)行時無需訪問并行接口或USB接口,因而節(jié)約了計算機硬件開銷,運行速度更快,可實現對軟件的保護?;谏鲜鲆蛩乜紤],我們在傳統的軟件保護技術的基礎上,推陳出新,提出一種基于虛擬加密鎖的軟件版權保護方法。

虛擬加密鎖是一種基于DLL文件的軟件保護技術,它是軟加密技術的一種,DLL文件主要是通過模擬硬件加密鎖對軟件主體運行的控制來仿真加密鎖的D將軟件中只有注冊用戶才能使用的關鍵功能模塊、注冊用戶的計算機指紋信息和基于用戶計算機指紋的注冊驗證模塊都封裝到DLL文件中,同時在DLL文件中加入文件完整性檢測、反調試和反靜態(tài)分析功能模塊來提高DLL文件的反破解性能。軟件運行時,當執(zhí)行到DLL文件中需要注冊才能使用的功能時,必須進行DLL文件的完整性檢測、調試器的檢測,只有通過檢測、注冊驗證后才能執(zhí)行軟件的功能,否則退出軟件。由于DLL文件內置了用戶計算機指紋信息(具有不可復制性)和反破解模塊,因而DLL文件具有類似加密鎖的功能,可以取代加密鎖,達到對軟件版權保護的目的。其系統基本原理圖如圖1所示。

1

2、虛擬加密鎖實現的功能

(1)封裝軟件中的關鍵功能使軟件試用版與正式版分離

為滿足第1節(jié)所述特征①,設計軟件時將軟件分成軟件主體和DLL文件兩部分。軟件主體就是軟件的試用版,在網上發(fā)布。將軟件的關鍵功能封裝在DLL文件(虛擬加密鎖)中(在實際開發(fā)軟件時,如果封裝的功能多導致DLL文件過大,可以只封裝每個功能模塊中的關鍵數據處理部分),如圖1所示,它只提供給注冊用戶,從而實現軟件試用版與正式版(即軟件主體+虛擬加密鎖)文件的分離,降低了破解者破解正式版的幾率。

(2)采集用戶計算機指紋信息并生成計算機

所謂計算機指紋是指與計算機硬件有關的不可復制的信息,這些信息通常包括硬盤物理序列號和主板序列號、CUP序列號等。不同的計算機有不同的計算機指紋,因而用戶計算機指紋可以起到唯一標識計算機的作用,確保虛擬加密鎖文件具有不可復制性。將采集的用戶計算機指紋信息經過Hash算法(如SHA、MD5等)處理生成用戶計算機ID。

(3)注冊用戶的合法驗證

為滿足第1節(jié)所述特征②,將根據注冊用戶的計算機指紋信息生成的ID預置到虛擬加密鎖(DLL文件)中,保證了該虛擬加密鎖只能運行在該注冊用戶的計算機上。當用戶運行虛擬加密鎖中的關鍵功能時,虛擬加密鎖采集該用戶計算機指紋,經過一定加密運算生成計算機ID與預置的計算機ID比較,若兩者相等,說明該用戶是合法用戶,則正常運行軟件功能;若不相等,說明該用戶是非法用戶,則限制該功能的運行或退出軟件。

(4)反破解

如果軟件不能防止破解者的非法修改,其它保護措施做得再好,也很容易被破解。為滿足第1節(jié)所述特征③,在對虛擬加密鎖文件進行反調試、反靜態(tài)分析的基礎上增加反修改功能。

1)虛擬加密鎖的完整性校驗

對虛擬加密鎖文件進行完整性校驗,可確保其不被非法修改。校驗的方法可采用API函數MapFileAndCheckSum進行完整性校驗。

//讀取虛擬加密鎖文件DIIFile的原始的校驗和HeaderSum并計算其校驗和CheckSum

MapFileAndCheckSum( DIIFile, &HeaderSum, &CheckSum);

if( HeaderSum==CheckSum)

{

//虛擬加密鎖文件DIIFilename沒有被修改,執(zhí)行軟件功能

}

else

{

//虛擬加密鎖文件DIIFilename被修改,中止軟件

}

2)調試器檢測

為了防止破解者用調試工具(如OllyDbg等)對虛擬加密鎖程序文件進行跟蹤,可用API函數IsDebuggerPresent來檢測。

if( IsDebuggerPresent())

{

//當前程序被調試,中止軟件

}

else

{

//沒有被調試,執(zhí)行軟件功能

}

3)反靜態(tài)分析

為了防止破解者通過W32Da.m、IDA Pro等反匯編分析工具進行反匯編分析,可在虛擬加密鎖文件中增加大量花指令。另外,用虛擬機軟件VMPtotedt對虛擬加密鎖文件進行處理,可以大大增強其抗靜態(tài)分析的性能。

3、用戶注冊過程

軟件試用版用戶試用滿意后,通過匯款或網上銀行轉賬等方式付款后,用戶將計算機ID(根據用戶計算機指紋經加密生成的)通過電子郵件發(fā)送給軟件開發(fā)商,軟件開發(fā)商根據用戶計算機ID重新編譯程序生成虛擬加密鎖文件,再通過電子郵件發(fā)送給用戶,用戶接收后用該文件覆蓋軟件安裝文件夾下的同名文件,就可以使用軟件的全部功能硝這樣就可以方便地利用互聯網完成軟件試用版的發(fā)布和正式版的銷售,這滿足了第1節(jié)所述特征④。

小知識之DLL文件

DLL文件又稱“應用程序拓展”,是軟件文件類型。