基於硬盤號和CPU序列號的軟件加密技術

來源:文萃谷 2.79W

應用與安全

基於硬盤號和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

熱門標籤