(汕頭職業技術學院計算機系,廣東 汕頭515078)
作為軟件開發企業來說,如何保護其軟件產品不受盜版影響,事關企業的生存和發展。一般情況下,軟件保護方法有使用加密狗保護和使用認證書2種方法,但不管使用哪種方法,都只能增加軟件破解的難度,而無法保證絕對不受盜版的侵害。基于機器特征碼的軟件簡便認證方法,可以讓用戶自定義加密方法,在軟件安裝過程中獲取機器特征碼,如CPU的ID、主板IDE序列碼或網卡MAC等,編制加密文件作為軟件在該機器運行的許可認證,軟件公司可以將機器與軟件序碼捆綁,通過網上激活的方法來控制軟件在捆綁機器上的使用[1]。該方法簡便易行,且由于加密規則由用戶自定義,增加了軟件破解難度,從而達到保護軟件的目的。為此,筆者對基于機器碼的軟件簡便認證方法進行了研究。
要生成軟件認證文件,必須完成以下主要步驟:①獲取用戶端的機器特征碼;②將用戶端的特征碼加密成認證文件;③將認證文件發回用戶端;④在程序中讀取認證文件,按一定規則解密取得特征碼與本機特征碼比對,判斷是否予以執行。獲取機器特征碼如圖1所示,生成認證文件如圖2所示,軟件運行流程如圖3所示。

圖1 獲取機器特征碼

圖2 生成認證文件
當軟件用戶安裝軟件時,先運行一段程序,用于產生加密的機器特征碼文件,加密種子為其后的六位隨機十六進制碼。要求用戶填寫軟件序列碼,接著上網激活,服務器端讀取用戶加密文件和軟件序列碼,解密得到機器的特征碼,如數據庫沒有序列碼的捆綁記錄或存在與當前特征碼捆綁情況時,可按照軟件加密規則產生一個key.lic認證文件并發送到用戶的安裝目錄中,否則告知用戶該序列碼已與其他計算機捆綁,不能在本機使用[2]。當激活并安裝正確后,在運行軟件時利用約定的解密規則讀取key.lic文件,解碼得到機器特征碼,與當前機器碼對比,如一致則放行,否則告知用戶該序列碼已在其他機器登記而不能在本機運行。

圖3 軟件運行流程
1)獲取機器特征碼 安裝軟件時,從用戶端獲取機器特征碼,包括本機的4組8位十六進制CPU的ID碼(如0001067A-01020800-0408E39D-BFEBFBFF)、主版的IDE序列碼(如081104BB6C005GGZUAXJ)或網卡的MAC(如00-23-8B-56-4E-D9)等。以獲取CPU的ID為例,可以編制一個動態庫cpuid.dll,函數為GetCPUID:TCPUID[3],以便獲得用戶端CPU的ID。常見方法如下:①在程序開發過程直接調用API函數獲取4組8位十六進制碼;②嵌入一段匯編程序來獲取。以下為獲取CPU的ID的匯編程序。

2)生成6位隨機碼 當讀取本機的特征碼后,為保密起見,應該將信息加密而不是以明碼方式發送到軟件廠商。加密時,混入一組6位的隨機十六進制碼。為此,必須編制一個生成6位十六進制碼的動態庫B6RND.dll,可通過函數B6crt()產生6位十六進制數。
3)生成字符串加解密動態庫 文件在傳輸過程必須加密,加密規則應由開發者定義。為此,必須編制一個字符串加/解密的動態庫mdsec.dll,加密函數是 Makesec(原字符串:pchar;加密字符串:pchar),輸出加密后字符串:pchar;解密函數是Disce(加密后字符串:pchar;加密字符串:pchar),輸出還原字符串:pchar。
采用ASCII碼加密方法,其規則由開發者定義。字符串為字母或數字,不要含標點,加密字符串不長于原字符串。
獲得安裝軟件的機器特征碼并進行加密,這樣用戶就看不到程序究竟是使用何種機器碼來認證,從而增加軟件被破解的難度。應該注意的是,文件必須包含加密的種子字符串,這樣才能被重新解密出機器特征碼。將加密后的文件getlic.dat發送到軟件商,可以獲取認證文件。
讀取用戶加密文件getlic.dat,按自定義規則解密后獲得用戶的機器碼,軟件商按新的加密規則重新加密后生成新加密認證文件key.lic。為了增加文件被破解的難度,建議采用二進制方式寫入,首字節為有效字節的指針,混寫入一些無關的字節,這樣用戶便無法獲知文件內容,也無法獲知是何種機器碼或組合。將認證文件發送回用戶,拷貝到指定目錄即可。也可以在網上直接給用戶認證,這樣更加方便快捷。
在程序中,讀取認證文件并按加密規則解密得到機器特征碼,與讀取的本機特征碼比較來進行認證控制。如驗證通過則運行正式版本的軟件,否則提醒用戶驗證失敗,運行限制(如限時/次或減少部分功能)版本軟件。另外,由于認證文件與機器碼有關,因而即使拷貝到其他電腦軟件也無法正常使用。至此,便可實現軟件與機器特征碼的捆綁認證。當然,還可以采用比較復雜的辦法,比如多種機器碼混合使用,或者采用更復雜的加密算法,如用流行的MD5算法編制加密的許可文件來驗證軟件是否許可運行[4]。
為了保護軟件的知識產權不受侵害,通過對比機器特征碼與加密認證文件的特征碼,實現了軟件的認證控制。實踐表明,基于機器特征碼的軟件認證方法簡便實用,控制靈活,特別適用于軟件與機器捆綁認證。
[1]William Stallings.密碼編碼學與網絡安全原理與實踐 [M].劉玉珍,王麗娜,傅建明 等譯.北京:電子工業出版社,2001.
[2]樊剛.加密與解密——軟件保護技術及完全解決方案 [M].北京:電子工業出版社,2001.
[3]熊曾剛,張學敏,王時繪.軟件加密技術及應用實例 [J].控制工程,2003,10(6):571-573,576.
[4]王津濤,覃尚毅,王冬梅.基于MD5的迭代冗余加密算法 [J].北京:計算機工程與設計,2007,28(1):41-42.