倪安勝 湯池 周華
摘要:通過提取硬盤、CPU 序列號(hào)及網(wǎng)卡MAC地址等硬件參數(shù),產(chǎn)生機(jī)器碼,對(duì)機(jī)器碼進(jìn)行加密變換生成注冊(cè)碼,提供給合法用戶注冊(cè)軟件。實(shí)際應(yīng)用結(jié)果表明,該方法簡(jiǎn)潔有效,能防止非法拷貝,可用于小型軟件的保護(hù)。
關(guān)鍵詞:軟件加密;注冊(cè);PC
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)30-7206-02
隨著計(jì)算機(jī)性能的不斷提升,以及互聯(lián)網(wǎng)應(yīng)用的不斷擴(kuò)展,計(jì)算機(jī)軟件業(yè)得到了迅猛發(fā)展。軟件是一種特殊的產(chǎn)品,為了防止軟件的非法復(fù)制、盜版,保護(hù)軟件開發(fā)者的利益,就必須對(duì)軟件進(jìn)行加密保護(hù)[1,2]。理論上,沒有破解不了的軟件,僅靠技術(shù)對(duì)軟件進(jìn)行保護(hù)是不夠的,最終還要靠人們知識(shí)產(chǎn)權(quán)意識(shí)和法制觀念的進(jìn)步。軟件保護(hù)方式的設(shè)計(jì)應(yīng)在一開始就作為軟件開發(fā)的一部分來考慮,列入開發(fā)計(jì)劃和開發(fā)成本中,并在保護(hù)強(qiáng)度、成本和易用性之間進(jìn)行折衷考慮,選擇合適的平衡點(diǎn)[3,4]。
本文提供了一種實(shí)用的軟件加密方法,通過讀取計(jì)算機(jī)硬盤序列號(hào)、CPU序列號(hào)及網(wǎng)卡MAC地址,以這些參數(shù)為基礎(chǔ)產(chǎn)生機(jī)器碼,用戶把機(jī)器碼通過電子郵件(E-mail)、電話或郵寄等方法告知軟件開發(fā)者,由開發(fā)者通過注冊(cè)機(jī)(軟件)生成該軟件的注冊(cè)碼回傳給用戶,供用戶注冊(cè)后使用軟件。注冊(cè)碼與計(jì)算機(jī)的硬件參數(shù)息息相關(guān),并通過特定文件進(jìn)行保存,只能由進(jìn)行注冊(cè)的計(jì)算機(jī)使用,從而可有效防止軟件的非法復(fù)制。
1 基本原理
硬盤序列號(hào)、CPU序列號(hào)及網(wǎng)卡MAC地址是生產(chǎn)廠家為區(qū)別出廠硬盤、CPU及網(wǎng)卡而設(shè)置的生產(chǎn)標(biāo)識(shí),不同的廠家硬盤序列號(hào)、CPU序列號(hào)及網(wǎng)卡MAC地址編碼不同,但其標(biāo)識(shí)是唯一且只讀的,因此可使用這些參數(shù)作為計(jì)算機(jī)標(biāo)識(shí),在軟件開發(fā)時(shí)作為加密標(biāo)志,使軟件運(yùn)行時(shí)必須與計(jì)算機(jī)進(jìn)行一一對(duì)應(yīng)的認(rèn)證,從而保證軟件合法運(yùn)行。
該方法工作原理流程如圖1所示,軟件運(yùn)行時(shí),首先讀取計(jì)算機(jī)的硬盤序列號(hào)、CPU序列號(hào)及網(wǎng)卡MAC地址,根據(jù)這些參數(shù)合成一個(gè)編碼,對(duì)該編碼進(jìn)行相關(guān)變換,生成計(jì)算機(jī)唯一的機(jī)器碼告知用戶,同時(shí)通過加密變換等手段(注冊(cè)碼生成模塊)生成注冊(cè)碼,等待與用戶輸入的注冊(cè)碼進(jìn)行比對(duì)。用戶將機(jī)器碼告知軟件開發(fā)者。開發(fā)者通過加密變換等手段(注冊(cè)機(jī))進(jìn)行處理,生成軟件的注冊(cè)碼返回給用戶,用戶將注冊(cè)碼輸入軟件。軟件將用戶輸入的注冊(cè)碼與自身計(jì)算得到的注冊(cè)碼進(jìn)行比對(duì),一旦結(jié)果正確即完成了軟件注冊(cè),并將注冊(cè)碼保存到指定的注冊(cè)文件中,以便軟件今后運(yùn)行時(shí)直接讀取注冊(cè)碼,不必重復(fù)進(jìn)行注冊(cè)。
2 程序的實(shí)現(xiàn)
2.1計(jì)算機(jī)硬件參數(shù)讀取
2.1.1 硬盤序列號(hào)讀取
讀取硬盤序列號(hào)程序使用了第三方開發(fā)的DiskID32.dll動(dòng)態(tài)鏈接庫(kù),關(guān)鍵代碼如下:
2.1.2 CPU序列號(hào)讀取
CPU的序列號(hào)只能采用對(duì)CPU控制器直接操作的方式進(jìn)行讀取,即只能采用CPU的I/O指令操作控制器, 對(duì)于CPU序列號(hào)的讀取采用了匯編語句讀取,其關(guān)鍵代碼如下:
2.1.3 MAC地址讀取
通過調(diào)用NetBIOS函數(shù)獲得網(wǎng)卡MAC地址,關(guān)鍵代碼如下:
2.2 機(jī)器碼與注冊(cè)碼生成
根據(jù)讀取的硬盤序列號(hào)、CPU序列號(hào)及MAC地址,各抽取一定的字節(jié)組合生成新的計(jì)算機(jī)編碼,對(duì)該編碼進(jìn)行相關(guān)變換,生成機(jī)器碼。若在讀取硬盤序列號(hào)、CPU序列號(hào)及MAC地址時(shí)出現(xiàn)異常,則根據(jù)預(yù)置的硬盤序列號(hào)、CPU序列號(hào)及MAC地址進(jìn)行相應(yīng)的替換,以保證機(jī)器碼的順利生成。
通過對(duì)機(jī)器碼進(jìn)行移位、異或、加密等變換處理,形成與機(jī)器碼唯一對(duì)應(yīng)的注冊(cè)碼,這個(gè)過程中的移位、異或、加密等變換處理由軟件開發(fā)者根據(jù)加密強(qiáng)度的需要進(jìn)行自主設(shè)定。
2.3 注冊(cè)文件讀寫
使用Windows API函數(shù)進(jìn)行注冊(cè)文件的讀寫,關(guān)鍵代碼如下:
3 結(jié)束語
本文提出的方法,借助計(jì)算機(jī)硬件參數(shù)信息進(jìn)行軟件加密注冊(cè),確保了軟件注冊(cè)的唯一性,可有效防止非法拷貝,保護(hù)了軟件的產(chǎn)權(quán)。經(jīng)過在VC++6.0環(huán)境中編程應(yīng)用,結(jié)果表明該方法簡(jiǎn)潔有效,可用于小型軟件的保護(hù)。然而,軟件保護(hù)領(lǐng)域中沒有絕對(duì)安全的保護(hù)技術(shù),開發(fā)者只能在發(fā)現(xiàn)問題并不斷解決問題中積累經(jīng)驗(yàn),以達(dá)到更高級(jí)別的軟件安全[5]。
參考文獻(xiàn):
[1] 孫敬先,李長(zhǎng)星,鄭敏.基于硬盤序列號(hào)和RSA算法的軟件加密方法[J].電腦知識(shí)與技術(shù),2010,26(6):7267-7269.
[2] 段善榮.軟件保護(hù)技術(shù)的分析及實(shí)現(xiàn)[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2009,31(6): 906-908.
[3] 李光輝,李瓊仙.VFP環(huán)境下讀取硬盤序列號(hào)實(shí)現(xiàn)應(yīng)用程序加密的研究[J].昆明冶金高等??茖W(xué)校學(xué)報(bào),2011,27(1): 9-12.
[4] 王春來.基于計(jì)算機(jī)硬件序列號(hào)進(jìn)行軟件加密的技術(shù)[J].遼寧科技學(xué)院學(xué)報(bào),2008,10(2):21-22.
[5] 段鋼.加密與解密[M].北京:電子工業(yè)出版社,2008:168-190.