陳金玉,黃楚齊
(重慶大學自動化學院,重慶 400044)
互聯(lián)網(wǎng)的快速發(fā)展使各種軟件產(chǎn)品在網(wǎng)上交易和傳播越來越頻繁。與實體商品不同,軟件復制成本低、復制效率高,因此在網(wǎng)絡上傳播的軟件存在大量盜版和侵權問題。任意下載,尤其是二次傳播[1]會以冪級數(shù)的速度消耗潛在用戶資源。目前,我國非授權軟件使用率高達70%以上,給企業(yè)造成巨大經(jīng)濟損失,嚴重打擊了軟件開發(fā)者以及企業(yè)借助互聯(lián)網(wǎng)拓展業(yè)務的積極性[2],因此軟件保護技術研究變得非常迫切和重要[3-4]。軟件保護技術涉及底層硬件、驅(qū)動程序、操作系統(tǒng)、網(wǎng)絡協(xié)議、數(shù)據(jù)庫和軟件編程等技術,是一種專業(yè)性極強的綜合性技術。目前存在的問題在于:軟件開發(fā)者一般僅使用軟件保護的默認方案,而未對使用軟件及其保護方法進行二次開發(fā),導致軟件極易被破解;其次,軟件保護技術開發(fā)應貫徹始終,而不僅限于在軟件開發(fā)尾聲才實施臨時保護。針對上述存在問題,提出一種基于機器特征注冊碼的軟件版權保護方法。
軟件保護的目的在于:防止對軟件產(chǎn)品的非法復制和使用,以及對軟件產(chǎn)品進行非法修改。軟件安全包括對象安全、入口安全和安全源安全[5]。其中,對象安全是指要保護的軟件體本身,其安全基于授權對象的唯一性和授權標志的不可偽造性,安全性依賴于現(xiàn)代密碼學中有牢固理論基礎的加密算法;入口安全是指軟件體本身可分為保護體和被保護的軟件主體,其入口就是它們之間的結合點,因此入口是破解者最常攻擊的環(huán)節(jié),保證入口安全就能防止繞過保護體而直接進入被保護的軟件主體;安全源是指系統(tǒng)安全所依賴的數(shù)據(jù)或介質(zhì)自身,如加密算法的密鑰、加密硬件等。
常采用的保護方法有序列號、光盤、軟件狗、注冊文件和基于網(wǎng)卡注冊碼等加密方式[6]。其中,序列號加密應用最為廣泛。該方法在注冊過程中,軟件公司會根據(jù)用戶提供的信息計算出一個序列碼,在用戶得到這個序列碼后,按照注冊需要輸入注冊信息和注冊碼,通過合法性驗證后,軟件就會取消自身的各種限制,目前互聯(lián)網(wǎng)上的軟件80%以上都采用這種方式保護。光盤加密是最簡單也最常見的光盤保護方法,就是程序在啟動時判斷光驅(qū)中的光盤上是否存在特定的文件,如果不存在則拒絕運行,但該方法比較容易被破解,解密者只要找到程序啟動時檢查光驅(qū)的地方,修改判斷指令就可以跳過光盤檢查[7]。軟件狗是一把安裝在計算機并行口上的硬件鑰匙,在被保護的軟件中存在許多鎖,當且僅當鑰匙與鎖匹配時,軟件才能正常運行[8]。注冊文件(Key File)保護是一種利用文件注冊軟件的保護方式[9]。Key File是一些加密過或未加密的數(shù)據(jù),其中可能有用戶名、注冊碼等信息,文件格式由軟件作者自己定義,用戶只要將該文件放入指定的目錄,就可讓軟件成為正式版軟件。軟件每次啟動時,從該文件中讀取數(shù)據(jù),根據(jù)處理的結果判斷是否為正確的注冊文件,如果正確則以注冊版模式運行。基于網(wǎng)卡的注冊碼加密主要在行業(yè)軟件中使用,由于每一網(wǎng)卡擁有惟一的物理地址(MAC)[10],該地址由48位二進制數(shù)組成,因此當網(wǎng)卡的物理地址與注冊的物理地址不一致時,軟件會停止運行并自動退出。但因為網(wǎng)卡的物理地址是可以修改的,沒有實現(xiàn)一機一碼,其理論基礎實際上是不可靠的。
計算機體系中的關鍵部件如CPU、網(wǎng)卡等在全球范圍內(nèi)都有其獨一無二的產(chǎn)品序列號,利用這些硬件的物理唯一性和內(nèi)部信息的不可復制性,可按照給定的方式生成客戶端軟件各自的注冊碼,實現(xiàn)一機一碼的要求,從而借助注冊碼達到軟件版權保護的目的。通用注冊碼由開發(fā)商提供,只要用戶輸入正確注冊碼軟件即可成為正版軟件,永久有效。本文提出的是一種基于機器特征注冊碼的軟件版權保護實現(xiàn)方案,其軟件實現(xiàn)流程如圖1所示。

圖1 軟件流程
圖1 中采用的的關鍵技術包括:
1)基于WMI技術的用戶機器硬件信息獲取。WMI是一種基于標準的系統(tǒng)管理接口,借助它可方便地獲取硬件信息,如硬盤、MAC、顯卡、聲卡、BIOS、內(nèi)存、CPU、主板、CDROM、鍵盤等的相關信息,只要采用組包的方式就可以生成客戶端唯一特征碼。以下為使用C#獲取用戶計算機CPU序列號的代碼:
public static string getCpu() //獲得 CPU的序列號
{
string strCpu=null;
ManagementClass myCpu=new Management-Class("win32_Processor");
ManagementObjectCollection myCpuCon=my-Cpu.GetInstances();
foreach(ManagementObject myOb in myCpu-Con)
{
strCpu=myOb.Properties["Processorid"].Value.ToString();
break;
}
return strCpu;}
需要注意的是:使用以上代碼時要先引用一個.NET的控件 System.Management.dll,并引用System.Management命名空間。
2)基于SHA算法的注冊申請碼加密處理。本文采用SHA[11]算法,其加密過程為:軟件提供商對用戶提供的機器特征碼信息進行加密,然后將加密結果作為注冊碼返回用戶。加密注冊碼的C#代碼在此從略。
3)基于注冊表的軟件試用時間限制。軟件注冊過程的主要步驟:客戶端軟件根據(jù)用戶或系統(tǒng)輸入的注冊碼進行認證,如果認證正確,則軟件將取消使用限制,否則保持限制。通過注冊表的對比檢查即可實現(xiàn)試用軟件的時間限制。加密注冊碼的C#代碼在此從略。
4)基于軟件加殼的保護。殼是計算機軟件中一段專門負責保護軟件不被非法修改或反編譯的程序,它先于軟件源程序運行并獲得控制權,進行一定處理后再將控制權還給軟件源程序?qū)崿F(xiàn)保護軟件的任務。加密注冊碼的C#代碼在此從略。
5)基于Json格式的用戶與開發(fā)商信息交換。用戶與開發(fā)商信息的交換,是指用戶機器信息如何上傳到注冊服務器,以及注冊碼如何發(fā)放回軟件用戶。文中采用Json格式進行Winform與Webform頁面的數(shù)據(jù)交互。加密注冊碼的C#代碼在此從略。
保護軟件最終以界面形式展現(xiàn)給用戶,在安裝過程中,自動連接注冊機進行注冊。注冊服務器業(yè)務包括接收客戶端注冊申請、加密處理及返回注冊碼。用戶端軟件在啟動之后,先檢查是否存在注冊碼,如果存在則判斷是否為正確的注冊碼,否則向注冊服務器發(fā)送注冊請求,然后接收并存儲收到的注冊碼。客戶端實現(xiàn)流程如圖2所示。

圖2 注冊流程
本文提出的基于機器特征注冊碼的軟件版權保護方法已在多個工程項目中獲得應用,并取得了良好的保護效果。
1)電腦管家
信息安全發(fā)生問題多由內(nèi)部人員所為,而非外來黑客和病毒引起。內(nèi)部人員往往具有合法的身份,易于接觸內(nèi)網(wǎng)計算機終端,竊取或破壞信息很難被察覺,事后也難以被發(fā)現(xiàn),因此有可能造成比黑客攻擊和病毒感染更大的破壞。因此,如何防范內(nèi)部人員對關鍵信息的泄露、竊取、篡改和破壞是軟件版權保護的關鍵。作者基于VS2008+C#+Sql Server 2005開發(fā)平臺于2012年開發(fā)完成了一個基于機器特征注冊碼的軟件版權保護軟件,其核心思想是為用戶提供一種友好的操作界面和全面的磁盤數(shù)據(jù)保護體系,通過授權系統(tǒng)用戶對磁盤的隱藏、接入或讀寫,規(guī)范用戶對硬盤/移動介質(zhì)的操作,并對用戶的讀寫行為進行監(jiān)控,關閉或限制部分服務/端口/應用程序以達到有效避免數(shù)據(jù)泄露等問題。其功能包括USB接口、串/并口以及網(wǎng)絡端口的輸入輸出管理控制;網(wǎng)絡流量控制;文件夾及文件增刪改使用監(jiān)控;打印監(jiān)控;運行狀態(tài)監(jiān)控(包括CPU/顯卡/硬盤/主板/內(nèi)存/電源溫度)以及異常狀況提出報警等,現(xiàn)已廣泛應用于有關公司服務器的數(shù)據(jù)監(jiān)控管理。
2)招商物業(yè)數(shù)字化管理平臺
招商局物業(yè)管理有限公司是國內(nèi)最早以產(chǎn)權為紐帶、以資產(chǎn)管理為核心的規(guī)模化、品牌化和集團化物業(yè)管理企業(yè)。作者基于VS2008+C#+Sql Server 2005+Android+iphone開發(fā)平臺,采用.NET架構,應用MSSQL Server數(shù)據(jù)庫服務集成,使用B/S3層結構體系,于2012年開發(fā)完成了一個軟件版權保護軟件,其核心思想為:在業(yè)務范圍上,基本覆蓋招商局物業(yè)管理的所有業(yè)主、租戶以及商戶。提供投訴、報修、費用查詢、房屋委托服務,將生活公告、商城活動以及其他增值服務推送給業(yè)主,為其提供“到家”服務。通過各類的服務,促使游客注冊,收集用戶的手機、生活地址以及愛好等信息,以方便集團作進一步的商業(yè)推廣。
3)重慶保稅港區(qū)開發(fā)管理有限公司監(jiān)事會監(jiān)督管理信息系統(tǒng)
基于VS2012+C#+Sql Server 2008+IIS開發(fā)平臺,于2016年開發(fā)完成了一個軟件版權保護軟件。其核心思想是:根據(jù)風險控制的管理理念,采用IT審計的原理和方法,結合兩江新區(qū)有關規(guī)定及公司“三重一大”決策和實施運行的特點以及監(jiān)事會履行出資人監(jiān)督職責的要求,通過建立公司工程建設、土地經(jīng)營、招商引資、大額資金運作等方面“三重一大”事項的動態(tài)數(shù)據(jù)庫和自動分析模型,進行跟蹤監(jiān)督和階段評估,及時提出預警建議,提供決策支持。
4)多節(jié)點嵌入式智能終端遠程數(shù)據(jù)同步
基于WinCE 6.0+VS2012+C#+Sql Server 2008開發(fā)平臺,于2017年開發(fā)完成了一個軟件版權保護軟件。從管理的角度,可充分利用嵌入式系統(tǒng)集成度高、可靠性好、免維護的特點,將各節(jié)點的嵌入式系統(tǒng)接入網(wǎng)絡,實現(xiàn)遠程數(shù)據(jù)的采集與同步,實現(xiàn)對遠程設備的故障診斷和控制,提高終端設備的工業(yè)適應性,滿足野外設站、無人值守的應用要求。其核心思想是:以基于WinCE的嵌入式設備為核心,采用TCP/IP通信機制搭建的遠程數(shù)據(jù)采集系統(tǒng),利用嵌入式數(shù)據(jù)庫(SQL Server CE)保存采集數(shù)據(jù)和服務器傳送的遠程配置,利用SQL Server CE提供的RDA和Replication(合并復制)特性,當服務器網(wǎng)絡斷開后完成數(shù)據(jù)和配置文件的轉(zhuǎn)儲和備份,保證數(shù)據(jù)的完整性,特別適用于遠程、多參數(shù)的數(shù)據(jù)采集,具有重要的使用價值和應用前景。
提出了一種基于機器特征注冊碼與軟件加殼的軟件保護方法。該方法已在多個軟件系統(tǒng)保護中得到應用。工程實踐應用效果表明:該方法能有效防止非授權用戶破解注冊碼從而達到實時盜版的企圖,在保護用戶個人隱私的前提下,保護了軟件開發(fā)者的知識產(chǎn)權,并取得了良好的保護效果。但是也應該看到,軟件版權保護不僅是一個技術問題,其最終的解決要靠人們版權意識的不斷加強和法律的不斷完善來實現(xiàn)。