沈園園
概述:依賴硬件采集碼①方式的共享軟件注冊是一個比較復雜的過程,卻相對安全,常規注冊模式比較依賴人工溝通再進行注冊,繁瑣且易出錯。在互聯網與云服務器發達的時代,有效利用互聯網和云服務器解決共享軟件注冊的難題,實現無人值守自動安全注冊是很有必要的。本文主要研究使用DELPHI開發共享軟件自動注冊系統的實現方法。
關鍵字:共享軟件注冊? delphi? 自動化軟件注冊? 硬件信息采集? 注冊碼? 加密
引言
我們在進行DELPHI教學過程中遇到有學生請教共享軟件注冊的問題,展開討論當前主流軟件注冊模式,并總結出了一種自動化且安全的共享軟件注冊機制,用于實際應用于共享軟件注冊。本文主要研究硬件注冊碼模式下如何進行自動化共享軟件注冊。
1.提出問題:
共享軟件注冊是為了保證共享軟件作者合法權益的一種軟件保護機制,通常自動化注冊使用的是軟件注冊碼模式,就是利用算法生成注冊碼,用戶只需要輸入注冊碼就可以注冊,這種模式可以將注冊碼放到共享軟件平臺銷售,但有個很嚴重的問題,軟件注冊碼模式不安全,就是大家常說的COPY副本,只要有人將一個注冊碼共享出來,所有人都可以使用了。
既然軟件注冊碼模式很容易被COPY副本,那么為什么還是有那么多軟件廠商使用軟件注冊碼模式呢?因為軟件注冊碼模式天生就可以的實現無人值守的自動注冊授權,可以廠商自售,可以托管代售,可以渠道分銷。
那么硬件注冊碼模式是相對比較安全的,有沒有可能把硬件注冊碼模式變成一種自動注冊的方法呢?
2.分析問題:
硬件注冊碼模式的原理是采集用戶電腦的硬件信息,根據硬件信息生成注冊碼或授權文件,這樣保證了一個注冊碼只能被一臺電腦使用,相對比較安全。在這樣的過程里,注冊碼是無法預先生成的,而且授權過程需要用戶和授權者相互溝通。
用手機充值卡給手機充值給了我們一個很好的啟示,通過代入,把注冊碼當作充值卡密碼,把硬件注冊碼模式的軟件授權過程當作通信運營商后臺的充值過程,這樣我們就可以利用硬件注冊碼模式的安全性,只需要把軟件的授權過程通過網絡和服務做成自動處理過程,然后批量生產注冊碼就可以實現共享軟件的自動安全注冊了。
下面將詳細論述用delphi實現硬件注冊碼模式的自動注冊過程。
一、硬件注冊碼模式自動注冊原理
傳統的硬件注冊碼是通過客戶電腦的硬件信息生成的,無法預先生成注冊碼,這樣就導致了無法將注冊碼托管到第三方平臺代售。那么要實現自動注冊,就必須把軟件授權的過程自動化,注冊碼只是作為服務器驗證客戶是否購買授權的唯一憑據,注冊碼正確則服務器和客戶端配合完成軟件的實際注冊授權。此過程類似手機充話費,充值密碼正確則進行充值。
原理如下:用戶購買注冊碼->用戶獲得注冊碼->用戶輸入注冊碼->服務器驗證注冊碼->通過進行注冊授權過程并完成軟件注冊授權,否則退出。
注冊過程:客戶端獲得硬件采集碼->發送硬件采集碼到服務器->根據硬件采集碼通過算法生成硬件校驗碼后發回客戶端->客戶端接受硬件校驗碼->客戶端保存并生成KRY文件->完成授權。
二、硬件注冊碼運作流程
1.常規硬件注冊碼模式運作流程
用戶安裝軟件后收集硬件采集碼,聯系開發者進行購買支付,再把硬件采集碼發給作者由作者生成硬件注冊碼,用戶使用硬件注冊碼注冊軟件,然后完成注冊,可以使用軟件。
2.硬件注冊碼自動注冊流程
用戶安裝軟件以后打開購買鏈接,使用共享軟件注冊平臺購買支付,而后獲得自動注冊碼進行軟件注冊。
從以上兩個過程可以看出使用硬件注冊碼自動注冊機制的優勢。
三、自動注冊系統的關系
注冊碼管理程序用于生成注冊碼,它將批量生成的注冊碼發布到自動平臺,由用戶購買自動發送注冊碼,用戶進行注冊客戶端,客戶端注冊完畢以后聯系注冊服務器進行數據庫對比。
了解以上基本原理和流程后我們就可以使用DELPHI進行實現了,我們能得出我們需要實現的三大模塊:
1.注冊碼管理程序:負責生成注冊碼并插入數據庫。
2.注冊服務器:負責驗證客戶端發來的注冊碼是否正確,提供對客戶端進行授權服務,并將使用過的注冊碼刪除。
3.注冊客戶端:每次軟件啟動檢查軟件的是否被注冊授權,已授權則顯示軟件主界面,如果軟件沒有被授權則顯示軟件注冊界面,用戶只需要輸入注冊碼與注冊服務器通信進行軟件注冊授權。
四、注冊碼管理程序的開發
為了方便在網上生成發布注冊碼,我們使用Delphi XE2+Intraweb來開發B/S結構的注冊碼管理程序。該程序的主要功能有:
1.軟件管理--->添加新的軟件,以便新增加軟件也能使用自動授權系統
2.注冊碼生成--->對指定的軟件利用隨機算法生成固定長度的注冊碼,可以批量生產注冊碼,注冊碼生成后保存到數據庫里
3.注冊碼生成歷史--->生成注冊碼時產生的記錄信息
4.注冊碼使用歷史--->注冊服務器生成的注冊碼使用歷史記錄,包含用戶郵件、用戶硬件采集碼、用戶硬件效驗碼、注冊時間、注冊碼等信息
注冊表字段構成:Rid:自動編碼;Rsoft:所屬軟件;Rnum:注冊碼;Rtime:生成時間;由于篇幅的限制,本文僅略去隨機生成注冊碼的算法。
五、注冊服務器程序的開發
注冊服務器和注冊碼管理程序要使用同一個數據庫,注冊服務器使用Delphi XE2+Indy來開發。使用了IdTCPServer來作為服務器通信組件。
注冊信息數據構成:軟件標識:DPS,用于服務器識別屬于哪個軟件;郵件:109693505@QQ.com,用于記錄用戶聯系郵件;注冊碼:ABCDEFG123,用于服務器檢測本次注冊是否授權;硬件采集碼:J20DALLDALSLDL(硬盤序列號),用于服務器生成硬件效驗碼。
確認信息數據構成:確認代碼:OK或ERROR
通信過程:注冊客戶端連接注冊服務器,連接成功發送注冊信息,返回確認信息。
注冊服務器示例接收數據具體運行原理描述如下,由于篇幅的限制代碼略:
接收記錄->返回記錄->生成硬件效驗碼(AES密鑰;AES明文)->接收數據->寫入記錄->從注冊碼表查詢指定軟件的注冊碼是否存在->如果找到,注冊碼可用則:生成硬件效驗碼,判斷硬件采集碼長度是否大于32,如果超過32則截取前32位字符,當作AES256的密鑰->客戶端通過同樣的操作,對比服務器發送的效驗碼,判斷是否授權->用AES加密生成硬件效驗碼->從注冊碼表刪除->返回注冊成功信息及硬件效驗碼->沒找到相關軟件的注冊碼->返回錯誤信息。
六、注冊客戶端程序的開發
此處采用硬盤序列號作為硬件采集碼
注冊客戶端主要有兩個任務:1.與注冊服務器通信完成軟件注冊授權;2.軟件每次啟動時檢查軟件是否被授權使用。
注冊客戶端的運行流程:
客戶端啟動->采集硬盤序列號->通過硬件校驗碼算法生成硬件校驗碼->讀取授權文件比對硬件校驗碼->TURE->校驗通過正常運行此軟件;FALSE->校驗不通過調用顯示注冊窗口->輸入注冊碼服務器檢查注冊碼,如錯誤三次則退出,如正確則將硬件注冊碼寫入授權文件->提示注冊成功并重新運行程序關閉客戶端。檢測授權文件是否存在過程中,如果沒有存在則默認顯示注冊界面,一般讀取授權文件第一行,硬件校驗碼后再獲取硬盤序列號,這里用和服務器同樣的算法把硬件序列號生成硬件校驗碼。
七、示例硬件效驗碼算法描述(硬盤序列號)
通過AES256加密硬盤序列號得到硬件效驗碼
加密算法:AES256;原字符串:硬盤序列號;加密密鑰:硬盤序列號(如果大于32位,截取前32位);硬件效驗碼=加密后的字符串。
授權文件就算只存儲明文硬件效驗碼也沒關系,授權文件被復制到其他電腦無法使用。
結束語
通過網絡和服務器對注冊碼驗證后進行共享軟件自動注冊授權是完全可行的,較簡單的實現了自動安全注冊:注冊碼只能使用一次,能夠保證一臺電腦一個授權,并且在安全得到保證的同時又具備了軟件注冊碼的易用性,可以將注冊碼放到共享軟件注冊平臺托管銷售,或者放到卡類平臺自動銷售。完全實現了即安全又自動化的共享軟件注冊以及共享軟件注冊銷售的無人值守模式。