當前位置:才華齋>計算機>計算機硬體>

基於硬碟號和CPU序列號的軟體加密技術

計算機硬體 閱讀(2.87W)

應用與安全

基於硬碟號和CPU序列號的軟體加密技術

摘要:本文提供了一種註冊碼與計算機硬體引數相關的一種加密方法,並通過具體的例項講述瞭如何對軟體加密的方法。

關鍵詞:硬碟號,CPU序列號,登錄檔

 1引言

計算機軟體是一種特殊的產品,為了防止軟體的非法複製、盜版,保護軟體開發商的利益,就必須對軟體進行加密保護。採用基於硬碟號和CPU序列號的軟體加密技術,軟體會根據微機硬體引數給出該軟體的序列號;使用者需要把這一序列號用E-mail、電話或郵寄等方法寄給軟體提供商或開發商,軟體開發商利用註冊機(軟體)產生該軟體的註冊號寄給使用者即可。它的註冊資訊與機器的硬體資訊有關,不同於以前的序列號的註冊方法,提高了軟體的安全性。

 2硬碟號和CPU序列號

(1)硬碟序列號:英文名HardDiskSerialNumber,該號是出廠時生產廠家為區別產品而設定的,是唯一的,是隻讀的,利用硬碟序列號的加密往往是利用其唯一和只讀的特性。在有的加密軟體中採用的是硬碟卷的序列號:英文名VolumeSerialNumber,以指硬碟的邏輯盤,如:“C:”、“D:”等,是高階格式化時隨機產生的,是可以修改的,由於其可修改,所以利用其加密,對於安全而言就大打折扣了。硬碟的卷號通過WINAPI函式,GetVolumeInformation即可獲得。就IDEHDD而言,對於沒有序列號或SCSIHDD硬碟則無能為力,這也是利用它進行加密的侷限性。

(2)CPU序列號是一個建立在處理器內部的、唯一的、不能被修改的編號。它由96位數字組成。高32位是CPUID,用來識別CPU型別。低64位每個處理器都不同,唯一地代表了該處理器。CPU號可以用來識別每一個處理器。為了適應這一新特徵,Intel在處理中增加了兩條指令(“讀取”和“禁止”)和一個暫存器位(模式指定暫存器位:ModelSpecificRegister-“MSR”)。讀取指令擴充套件了CPUID讀取指令。當執行讀取指令時可以得到96位的處理器序列號。禁止指令可以禁止對處理器序列號的讀取。為了配合CPU序列號的讀取和禁止,設定了MSR位。當MSR位為“0”時可以讀取CPU序列號;當“MSR”位為“1”時只能讀取高32位(即CPUID),而低64位全為零。

3程式實現

3.1加密方法

通過應用程式取得機器硬碟號和CPU號通過機密程式形成一個註冊序列號,使用者將這個註冊序列號傳送到軟體註冊者,軟體註冊者按照預定的演算法生成註冊碼,然後將其發給使用者,通過註冊形成合法使用者。軟體每次啟動時都到登錄檔或註冊檔案的相應位置讀取註冊碼並與軟體生產的註冊碼比較,一致則是合法使用者,否則是非法使用者。由於註冊碼與使用者計算機的硬碟號與CPU號相關聯,故其是唯一的,非法使用者即使知道註冊序列號與註冊碼也無法使用。

3.2實現過程

(1)CPU號的讀取

硬碟的序列號只能採用對硬碟控制器直接操作的方式進行讀取,也就是說只能採用CPU的I/O指令操作硬碟控制器,對於CPU號的讀取採用了在DELPHI嵌入彙編的方法讀取。其讀取方法如下:

MOVEAX.01H

如果返回的EDX中,低18位為1,那麼這個CPU就是支援序列號的。此時EAX就是序列號的高32位。這32位對同一型號的'CPU是一樣的。

再執行:

MOVEAX.03H

此時的EDX:ECX就是序列號的第64位。

(2)硬碟號的讀取

硬碟號的讀取通過CreateFile函式,CreateFile可以開啟物理裝置和串列埠等,使用CreateFile(?ICALDRIVEI?,)開啟硬碟,其中的I為0~255,其為需要讀取的硬碟。命令如下:

hDevice:=CreateFile(?icalDrive0?,GENERIC_READORGENERIC_WRITE,FILE_SHARE_READORFILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0)

使用DeviceIOControl函式對開啟的裝置進行通訊,傳送指定命令,根據返回的PSENDCMDOUTPARAMS結構,得到物理序列號和模型號,把物理序列號和模型號格式化為一定的格式輸出。

(3)對登錄檔的操作

Delphi程式中可利用TRegistry物件來存取登錄檔檔案中的資訊。

①建立和釋放TRegistry物件

通過Create和Destroy來建立物件和釋放記憶體。

②讀取登錄檔中寫入資訊

對於登錄檔資料的讀取可採用ReadString、ReadInteger、ReadBinaryData等函式來讀取字串、數值、二進位制值。

③向登錄檔中寫入資訊

Write系列方法將資訊轉化為指定的型別,並寫入登錄檔。

對於登錄檔資料的寫入可採用WriteString、WriteInteger、WriteBinaryData來寫入字串、數值、二進位制值。

4結語

本文給出了一種軟體加密的方法,通過該方法產生的註冊碼與計算機的硬體相關,對於讀取的硬碟號、CPU號可以通過MD5加密演算法產生一個註冊號,保證軟體加密的可靠性,可有效地防止非法使用者破解註冊碼,保護軟體的智慧財產權。

 參考文獻:

[1]Delphi程式開發範例寶典[M].人民郵電出版社,2006.7:127-129

[2]Delphi從入門到精通[M].電子工業出版社,2006.4:373-376