- 相關推薦
基于硬盤號和CPU序列號的軟件加密技術
應用與安全
摘要:本文提供了一種注冊碼與計算機硬件參數(shù)相關的一種加密方法,并通過具體的實例講述了如何對軟件加密的方法。
關鍵詞:硬盤號,CPU序列號,注冊表
1引言
計算機軟件是一種特殊的產品,為了防止軟件的非法復制、盜版,保護軟件開發(fā)商的利益,就必須對軟件進行加密保護。采用基于硬盤號和CPU序列號的軟件加密技術,軟件會根據(jù)微機硬件參數(shù)給出該軟件的序列號;用戶需要把這一序列號用E-mail、電話或郵寄等方法寄給軟件提供商或開發(fā)商,軟件開發(fā)商利用注冊機(軟件)產生該軟件的注冊號寄給用戶即可。它的注冊信息與機器的硬件信息有關,不同于以前的序列號的注冊方法,提高了軟件的安全性。
2硬盤號和CPU序列號
。1)硬盤序列號:英文名HardDiskSerialNumber,該號是出廠時生產廠家為區(qū)別產品而設置的,是唯一的,是只讀的,利用硬盤序列號的加密往往是利用其唯一和只讀的特性。在有的加密軟件中采用的是硬盤卷的序列號:英文名VolumeSerialNumber,以指硬盤的邏輯盤,如:“C:”、“D:”等,是高級格式化時隨機產生的,是可以修改的,由于其可修改,所以利用其加密,對于安全而言就大打折扣了。硬盤的卷號通過WINAPI函數(shù),GetVolumeInformation即可獲得。就IDEHDD而言,對于沒有序列號或SCSIHDD硬盤則無能為力,這也是利用它進行加密的局限性。
。2)CPU序列號是一個建立在處理器內部的、唯一的、不能被修改的編號。它由96位數(shù)字組成。高32位是CPUID,用來識別CPU類型。低64位每個處理器都不同,唯一地代表了該處理器。CPU號可以用來識別每一個處理器。為了適應這一新特征,Intel在處理中增加了兩條指令(“讀取”和“禁止”)和一個寄存器位(模式指定寄存器位:ModelSpecificRegister-“MSR”)。讀取指令擴展了CPUID讀取指令。當執(zhí)行讀取指令時可以得到96位的處理器序列號。禁止指令可以禁止對處理器序列號的讀取。為了配合CPU序列號的讀取和禁止,設置了MSR位。當MSR位為“0”時可以讀取CPU序列號;當“MSR”位為“1”時只能讀取高32位(即CPUID),而低64位全為零。
3程序實現(xiàn)
3.1加密方法
通過應用程序取得機器硬盤號和CPU號通過機密程序形成一個注冊序列號,用戶將這個注冊序列號發(fā)送到軟件注冊者,軟件注冊者按照預定的算法生成注冊碼,然后將其發(fā)給用戶,通過注冊形成合法用戶。軟件每次啟動時都到注冊表或注冊文件的相應位置讀取注冊碼并與軟件生產的注冊碼比較,一致則是合法用戶,否則是非法用戶。由于注冊碼與用戶計算機的硬盤號與CPU號相關聯(lián),故其是唯一的,非法用戶即使知道注冊序列號與注冊碼也無法使用。
3.2實現(xiàn)過程
。1)CPU號的讀取
硬盤的序列號只能采用對硬盤控制器直接操作的方式進行讀取,也就是說只能采用CPU的I/O指令操作硬盤控制器,對于CPU號的讀取采用了在DELPHI嵌入?yún)R編的方法讀取。其讀取方法如下:
MOVEAX.01H
如果返回的EDX中,低18位為1,那么這個CPU就是支持序列號的。此時EAX就是序列號的高32位。這32位對同一型號的CPU是一樣的。
再執(zhí)行:
MOVEAX.03H
此時的EDX:ECX就是序列號的第64位。
。2)硬盤號的讀取
硬盤號的讀取通過CreateFile函數(shù),CreateFile可以打開物理設備和串口等,使用CreateFile(?.PHYSICALDRIVEI?,)打開硬盤,其中的I為0~255,其為需要讀取的硬盤。命令如下:
hDevice:=CreateFile(?.PhysicalDrive0?,GENERIC_READORGENERIC_WRITE,FILE_SHARE_READORFILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0)
使用DeviceIOControl函數(shù)對打開的設備進行通信,發(fā)送指定命令,根據(jù)返回的PSENDCMDOUTPARAMS結構,得到物理序列號和模型號,把物理序列號和模型號格式化為一定的格式輸出。
。3)對注冊表的操作
Delphi程序中可利用TRegistry對象來存取注冊表文件中的信息。
、賱(chuàng)建和釋放TRegistry對象
通過Create和Destroy來創(chuàng)建對象和釋放內存。
、谧x取注冊表中寫入信息
對于注冊表數(shù)據(jù)的讀取可采用ReadString、ReadInteger、ReadBinaryData等函數(shù)來讀取字符串、數(shù)值、二進制值。
、巯蜃员碇袑懭胄畔
Write系列方法將信息轉化為指定的類型,并寫入注冊表。
對于注冊表數(shù)據(jù)的寫入可采用WriteString、WriteInteger、WriteBinaryData來寫入字符串、數(shù)值、二進制值。
4結語
本文給出了一種軟件加密的方法,通過該方法產生的注冊碼與計算機的硬件相關,對于讀取的硬盤號、CPU號可以通過MD5加密算法產生一個注冊號,保證軟件加密的可靠性,可有效地防止非法用戶破解注冊碼,保護軟件的知識產權。
參考文獻:
[1]Delphi程序開發(fā)范例寶典[M].人民郵電出版社,2006.7:127-129
[2]Delphi從入門到精通[M].電子工業(yè)出版社,2006.4:373-376
【基于硬盤號和CPU序列號的軟件加密技術】相關文章:
硬盤和固態(tài)硬盤的區(qū)別08-04
串口硬盤和并口硬盤的區(qū)別11-13
固態(tài)硬盤和普通硬盤區(qū)別09-04
CPU的處理技術有哪些10-23
硬盤接口技術10-13
電腦CPU的維護和保養(yǎng)10-21