共享軟件保護方法之虛擬加密狗

隨著大規(guī)模復制分發(fā)非法軟件拷貝成為可能,如何設計出切實可行的軟件保護方案一直是軟件開發(fā)商不斷研究的課題,為此,在虛擬加密狗保護方法的基礎上,加大其核心代碼量,應用核心數(shù)據(jù)與代碼、用戶計算機指紋綁定技術,我們提出了一種安全增強的虛擬加密狗共享軟件保護方法。

一、共享軟件保護方法之虛擬加密狗

1、基本思想

針對虛擬加密狗軟件保護方法易被爆破與替換的問題,提出一種安全增強的虛擬加密狗共享軟件保護方法,該方法分兩部分:一、加大虛擬加密狗文件中的核心代碼量,將所有需要注冊才能使用的核心功能以下簡稱注冊功能)代碼封裝到DLL文件中,并將該文件所需的核心數(shù)據(jù)分離出來,保存到INI文件中,實現(xiàn)軟件狗的主要功能;二、應用核心數(shù)據(jù)與代碼、用戶計算機指紋綁定技術增強虛擬加密狗自身的安全性。

1)增加虛擬加密狗文件中的核心代碼量,將所有注冊功能的核心代碼封裝到DLL中,實現(xiàn)虛擬加密狗的主要功能。如圖1所示,將軟件注冊版中每個注冊功能模塊中的核心代碼及數(shù)據(jù)剔除并預留虛擬加密狗調(diào)用接口(圖1a虛線框中)生成軟件試用版(圖1a),將核心代碼及數(shù)據(jù)封裝在虛擬加密狗中(圖1a);虛擬加密狗由DLL文件及其所需的數(shù)據(jù)文件兩部分組成,其中DLL文件中包括軟件核心代碼模塊、用戶計算機指紋驗證模塊、數(shù)據(jù)解密模塊與DLL文件完整性校驗模塊等,實現(xiàn)軟件狗的主要功能。數(shù)據(jù)文件保存的是虛擬加密狗DLL文件所需的參數(shù),圖1b中核心代碼模塊與數(shù)據(jù)文件中的數(shù)據(jù)一一對應,為便于實現(xiàn),數(shù)據(jù)文件采用INI文件格式。

1

2)應用核心數(shù)據(jù)與代碼、計算機指紋綁定技術增強虛擬加密狗自身的安全性。具體步驟是:在虛擬加密狗的DLL文件中加入軟件運行時所需數(shù)據(jù)的解密模塊劬能是從虛擬加密狗的數(shù)據(jù)文件中解密其核心代碼所需的數(shù)據(jù)),然后用DLL文件的數(shù)字簽名、用戶計算機指紋為密鑰加密DLL文件中核心代碼所需的數(shù)據(jù),而將DLL文件所需的數(shù)據(jù)文件加密保存在數(shù)據(jù)文件中,其原理描述如下:

①密鑰=F DLI.文件的數(shù)字簽名,用戶計算機指紋);

②明文M= Decrypt密文C,密鑰);

③密文C= Encrypt朗文M,密鑰);

其中明文M是軟件運行時DLL文件所需的正確數(shù)據(jù),密文C是DLL文件所需數(shù)據(jù)加密后的數(shù)據(jù)。

將①、②加入DLL文件的數(shù)據(jù)解密模塊中,③加密的密文C寫入INI數(shù)據(jù)文件供軟件運行時DLL文件調(diào)用。為了保證密文C的安全性,在其外層采用1024位的RSA算法私鑰進行加密保護,確保其安全性,同時在DLL文件中的解密模塊的②前加入RSA的公鑰解密算法。數(shù)據(jù)解密模塊的流程如圖2虛線框中所示,與之向?qū)臄?shù)據(jù)文件的加密流程如圖3所示。

1

圖2描述虛擬加密狗的軟件保護流程:①文件完整性校驗檢測DLL文件是否被篡改;②用戶計算機指紋驗證模塊確保軟件在注冊用戶計算機上運行;③核心代碼數(shù)據(jù)的解密模塊是虛擬加密狗保證自己安全的核心模塊,先用RSA公鑰解密數(shù)據(jù)文件中key值外層的保護,然后以用戶計算機指紋與虛擬加密狗自己DLI.文件的數(shù)字簽名生成密鑰解密出正確的數(shù)據(jù)供DLL中核心代碼模塊使用;④核心代碼模塊完成注冊功能調(diào)用。

1

2、安全增強的虛擬加密狗開發(fā)流程

虛擬加密狗的開發(fā)包括DLL文件的開發(fā)與數(shù)據(jù)文件生成程序的開發(fā)兩部分。

(1)DLI.文件的開發(fā)

1)注冊用戶計算機指紋驗證模塊

所謂計算機指紋是指與計算機硬件有關的不可復制的信息,這些信息通常包括硬盤物理序列號和主板序列號、CPU序列號與網(wǎng)卡的MAC地址等,可以起到唯一標識計算機的作用。本文中采取的是提取計算機硬盤的序列號與網(wǎng)卡的MAC地址,并糅合成計算機指紋預置到虛擬加密狗的DLL工程的用戶計算機指紋驗證模塊中,確保編譯生成虛擬加密狗DLL文件具有不可復制性。當軟件運行時采集用戶計算機信息生成計算機指紋與預置的注冊用戶的計算機指紋進行比較,驗證用戶的合法性。

2)注冊功能模塊

軟件設計時將所有需要注冊才能使用其功能的核心代碼封裝在DLL文件中,而軟件試用版保留共享功能、核心代碼的調(diào)用接口函數(shù),如圖1所示。

3)數(shù)據(jù)解密模塊

數(shù)據(jù)解密模塊包括RSA公鑰解密模塊與對稱密鑰解密模塊。

RSA公鑰解密模塊的功能是解密虛擬加密狗數(shù)據(jù)文件中key值外層的保護。RSA非對稱算法是密碼學上十分成熟的算法,廣泛用于數(shù)據(jù)的加密、解密。該算法采用一對公鑰和私鑰,從公鑰很難推出私鑰,反之從私鑰也很難推出公鑰,此難度是基于大數(shù)分解的難度。采用RSA算法加密數(shù)據(jù)只要選用1024位及其以上的模數(shù)就能確保加密數(shù)據(jù)的安全性。

下面是用大數(shù)運算庫Miracl ver4. 82實現(xiàn)的RSA算法的關鍵代碼:

char szData C256]=CetlniFileKeyValue (strSection,strKey);

//從INI文件中讀取相應核心代碼的加密數(shù)據(jù)

big n,e,c,m;

mip ->IOBASE= 16; //設定十六進制輸入輸出模式

n= mirvar O);

e= mirvar O);

c= mirvar O);

m= mirvar Q);

cinstr(n,szData);

cinsti(1, ehar*)LPCTSTR)retumN);//初始化模數(shù)n

cinstie,"10001”);//初始化公鑰e

if eompare (n,n)==-1)

{

//解密數(shù)據(jù),將解密后的數(shù)據(jù)存放在szUerID數(shù)組中

pmvmod 6l,e,n,c);

big_to_byte 256, c,&szData,0);

}

//釋放內(nèi)存

mirkill e);

mirkill e);

mirkill e);

mirkill (n);

mirexit O;

對稱密鑰算法的功能是以注冊用戶計算機指紋、虛擬加密狗文件的數(shù)字簽名為密鑰解密出上述RSA算法解密后數(shù)據(jù),供虛擬加密狗DLL文件中核心功能模塊使用。

由于加密數(shù)據(jù)的外層有RSA算法加密保護,對稱密鑰算法采用簡單的異或運算對數(shù)據(jù)進行加密解密,下面是部分關鍵代碼:

CSUing strData= GetData O; //讀取RSA公鑰解密后的數(shù)據(jù)

//讀取虛擬加密狗DLL文件數(shù)字簽名、用戶計算機指紋生成的密鑰

CSUing strPwd= GetPwd O;

BYTE*p.vd;

pwd= new BYTEstrPwd. (;etLength O);

pwd= BYTE*)strPwd. (;etBuffer Q);

for (nt i =l;i< strPwd. GetLength O;i++)

{

pwd=pwd&pwd-l];

}

BYTE*ptxt;

ptxt= new BYTE [strData. GetLengffi];

ptxt=BYTE*)strData. GetBuffer O);

//對數(shù)據(jù)進行異或運算解密

for (nt j =0;j

對稱加密算法的密鑰是DLL文件的數(shù)字簽名、用戶計算機指紋簡單地連接在一起后采用MD5算法生成的,DLL文件的數(shù)字簽名也是采用MD5算法生成的。MD5算法的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被壓縮成一種保密的格式,產(chǎn)生了唯一的MD5信息摘要。這個算法被廣泛應用在加密、解密以及數(shù)字簽名技術上,具有很高的安全性。

4)虛擬加密狗的防破解措施

除上述采用的用戶計算機指紋、虛擬加密狗文件的數(shù)據(jù)簽名為密鑰加密核心數(shù)據(jù),并再次用RSA算法加密保護外,還采用以下措施。

①對虛擬加密狗DLL文件進行的完整性校驗,防止非法篡改。校驗的方法可采用API函數(shù)MapFileAndCheckSum進行完整性校驗。該函數(shù)是通過比較DLL文件的原始校驗和與計算的校驗和判斷是否被篡改。

②用VMProtect保護軟件對虛擬加密狗中的核心代碼進行虛擬、變異保護,同時開啟文件完整性、內(nèi)存保護功能,進一步增強虛擬加密狗文件的安全性。

(2)虛擬加密狗加密數(shù)據(jù)文件的生成程序的開發(fā)

數(shù)據(jù)文件以INI文件格式保存,其中Section名對應相應核心代碼功能模塊名,其key值對應該功能模塊所需的參數(shù)。加密處理流程如圖3所示,先用上述對稱加密算法加密,再用與RSA公鑰相匹配的私鑰加密。

3、軟件發(fā)布與注冊流程

軟件開發(fā)商按上述安全增強的虛擬加密狗制作方法將軟件設計成試用版和虛擬加密狗的DLL工程及數(shù)據(jù)文件生成程序;為了方便軟件開發(fā)商生成加密虛擬加密狗文件,可按圖4流程開發(fā)虛擬加密狗生成工具,可實現(xiàn)輸入用戶計算機指紋一次性生成DLL文件及其數(shù)據(jù)文件;軟件試用版中只有共享功能而沒有虛擬加密狗文件,不用擔心破解,可以通過互聯(lián)網(wǎng)等途徑進行發(fā)布傳播。

1

當軟件試用版用戶希望購買時,調(diào)用軟件中計算機指紋采集模塊生成Register. clat文件,按圖5所示的流程通過電子郵件將該文件發(fā)送給軟件開發(fā)商,軟件開發(fā)商根據(jù)Register. dat生成虛擬加密狗文件(egDog. dll、regDog.ini)通過電子郵件發(fā)送給用戶,然后用戶接收后覆蓋軟件安裝文件夾下的同名文件,就完成注冊,使用軟件的全部功能了,從而方便地利用互聯(lián)網(wǎng)進行軟件試用版的發(fā)布和銷售虛擬加密狗。

1

二、虛擬加密狗的安全性分析

(1)破解者要通過爆破的方式破解軟件,首先要篡改虛擬加密狗文件的完整性驗證指令與用戶計算機指紋驗證指令,必然導致DLL文件的數(shù)字簽名改變,同時由于虛擬加密狗文件不在注冊電腦上運行,生成用戶計算機指紋也不是注冊用戶的計算機指紋,這兩者中任何一個改變都將導致生成數(shù)據(jù)文件的解密密鑰不正確,核心數(shù)據(jù)文件解密失敗,導致軟件不能正常運行,從而加大了采用爆破方法破解的難度。

(2)虛擬加密狗文件中包含軟件中所有注冊功能的核心代碼及其核心數(shù)據(jù)用1024位的RSA算法加密保護,加大了破解者逆向分析的工作量,增強了用替換DLL文件的方法破解的難度。

(3)用VMProtect軟件保護系統(tǒng)對虛擬加密狗的核心代碼進行虛擬、變異保護,進一步增強了虛擬加密狗的安全性。

小知識之共享軟件

共享軟件是以“先使用后付費”的方式銷售的享有版權的軟件。根據(jù)共享軟件作者的授權,用戶可以從各種渠道免費得到它的拷貝,也可以自由傳播它。用戶總是可以先使用或試用共享軟件,認為滿意后再向作者付費;如果你認為它不值得你花錢買,可以停止使用。