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