原文:http://www.jiamisoft.com/blog/index.php/3469-yingpanhaocpuruanjianjiami.htmlphp
計算機軟件是一種特殊的產品,爲了防止軟件的非法複製、盜版,保護軟件開發商的利益,就必須對軟件進行加密保護。下面我就給你們介紹一個利用硬盤號和CPU序列號爲軟件加密的方法。html
1、基於硬盤號和CPU序列號的軟件加密技術的原理算法
軟件會根據微機硬件參數給出該軟件的序列號;用戶須要把這一序列號用E-mail、電話或郵寄等方法寄給軟件提供商或開發商,軟件開發商利用註冊機(軟件)產生該軟件的註冊號寄給用戶便可。它的註冊信息與機器的硬件信息有關,不一樣於之前的序列號的註冊方法,提升了軟件的安全性。安全
2、硬盤號與CPU序列號函數
一、硬盤序列號加密
硬盤想序列號是出廠時生產廠家爲區別產品而設置的,是惟一的,是隻讀的,利用硬盤序列號的加密每每是利用其惟一和只讀的特性。在有的加密軟件中採用的是硬盤卷的序列號:以指硬盤的邏輯盤,如:「C:」、「D:」等,是高級格式化時隨機產生的,是能夠修改的,因爲其可修改,因此利用其進行加密,對於安全而言就大打折扣了。硬盤的卷號經過WINAPI函數,GetVolmeIn-formation便可得到。就IDEHDD而言,對於沒有序列號或SCSIHDD硬盤則無能爲力,這也是利用它進行加密的侷限性。spa
二、CPU序列號orm
CPU序列號是一個創建在處理器內部的、惟一的、不能被修改的編號。它由96位數字組成。高32位是CPUID,用來識別CPU類型。低64位每一個處理器都不一樣,惟一地表明瞭該處理器。CPU號能夠用來識別每個處理器。爲了適應這一新特徵,Intel在處理中增長了兩條指令(「讀取」和「禁止」)和一個寄存器位。讀取指令擴展了CPUID讀取指令。當執行讀取指令時能夠獲得96位的處理器序列號。禁止指令能夠禁止對處理器序列號的讀取。爲了配合CPU序列號的讀取和禁止,設置了MSR位。當MSR位爲「0」時能夠讀取CPU序列號;當MSR爲「1」時只能讀取高32位(即CPUID)而低64位全爲零。htm
3、如何利用硬盤號和CPU序列號爲軟件加密對象
一、加密方法
經過應用程序取得機器硬盤號和CPU號經過加密程序造成一個註冊序列號,用戶將這個註冊序列號發送到軟件註冊者,軟件註冊者按照預約的算法生成註冊碼,而後將其發給用戶,經過註冊造成合法用戶。軟件每次啓動時都到註冊表或註冊文件的相應位置讀取註冊碼並與軟件生成的註冊碼比較,一致則是合法用戶,不然是非法用戶。因爲註冊碼與用戶計算機的硬盤號和CPU號相關聯,故其是惟一的,非法用戶即便知道註冊序列號與註冊碼也沒法使用。
二、實現過程
(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(」\\\\.\\PHYSICALDRIVEI」,…)打開硬盤,其中的I爲0-255,其爲須要讀取的硬盤。命令以下:
hDevice:=CreateFile(」\\.\PhysicalDrive0″,GENERIC_READorGENER-IC_WRITE,FILE_SHARE_READorFILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0)
使用DeviceIoContro函數對打開的設備進行通訊,發送指定命令,根據返回的PSENDCMDOUTPARAMS結構,獲得物理序列號和模型號,把物理序列號和模型號格式化爲必定的格式輸出。
(3)對註冊表的操做
Delphi程序中可利用TRegisty對象來存取註冊表文件中的信息。
①建立和釋放TRegisty對象經過Create和Destroy來建立對象和釋放內存。
②讀取註冊表中寫入信息對於註冊表數據的讀取可採用Read-String、ReadInteger、ReadBinaryData等函數來讀取字符串、數值、二進制值。
③向註冊表中寫入信息Write系列方法將信息轉化爲指定的類型,並寫入註冊表。對於註冊表數據的寫入可採用Read-String、ReadInteger、ReadBinaryData來寫入字符串、整數值、二進制值。
基於硬盤號和CPU序列號的軟件加密技術對於讀取的硬盤號、CPU號能夠經過MD5加密算法產生一個註冊號,保證軟件加密的可靠性,可有效地防止非法用戶破解軟註冊碼,保護軟件的知識產權。
小知識之MD5加密算法:
MD5就是採用單向加密的加密算法,對於MD5而言,有兩個特性是很重要的,第一是任意兩段明文數據,加密之後的密文不能是相同的;第二是任意一段明文數據,通過加密之後,其結果必須永遠是不變的。前者的意思是不可能有任意兩段明文加密之後獲得相同的密文,後者的意思是若是咱們加密特定的數據,獲得的密文必定是相同的。