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