摘要:該文介紹了實現軟件防盜功能的一種新方法,該方法是基于注冊表進行設計的。首先分析了利用注冊表達到軟件限期使用從而實現防盜版功能的設計思想,提出了這種算法,然后以一個C#應用系統的開發描述了這種算法。
關鍵詞:C#;注冊表;算法分析與設計;防盜版
中圖分類號:TP302文獻標識碼:A文章編號:1009-3044(2009)26-7434-03
An Algorithm of Protecting Software Copyright Based on Registry
YAN Chao-Hua1, ZHENG Ying2
(1.Department of Computer Science and Technology, Nanyang Institute of Technology, Nanyang 473004, China; 2.Finance Department, Nanyang Institute of Technology, Nanyang 473004, China)
Abstract: In this paper the author introduced a new Algorithm of protecting Software Copyright. Firstly the author analysed the design idea of protecting software copyright, which used using limitedly of software by the Registry. Then the author implemented this Algorithm by developing of a application based on C#.
Key words: C#; registry; analysis and design of algorithm; software copyright
隨著IT技術的飛速發展,如何保護知識產權越來越多地受到人們的關注,為了保護自己的勞動成果,人們在軟件開發時往往采取多種途徑,如:設置口令、數據加密、操作系統讀寫權限等,但這些措施還往往不能阻止非法用戶的侵入和盜版。基于保護知識產權,本文提出了一種利用C#與基于.net的安裝和部署對C#開發的應用系統進行限期使用防盜版的一種方法,該方法考慮到不破壞原有數據,通過密碼控制可以使軟件繼續有期限的使用。該方法的基本思路是巧用Windows注冊表,通過制作安裝程序對用戶能使用的時限作限制,以此來達到限制非法用戶盜版,希望為我們的軟件業的發展盡一份力。
1 設計思想
WINDOWS注冊表是一個樹狀分層的數據庫。從物理上講,它是System.dat和User.dat兩個文件;從邏輯上講,它是用戶在注冊表編輯器中看到的配置數據。
該數據庫記錄了用戶安裝在機器上的軟件和每個程序的相互關聯關系,包含了計算機的配置硬件的說明、狀態屬性以及各種狀態信息和數據等(包括自動配置的即插即用設備和已有的各種設備)。它是Windows 操作系統、硬件設備以及客戶應用程序得以正常運行和保存設置的核心“數據庫”(注冊表數據庫)。
因此,注冊表通常是一個最安全的地方,是Windows操作系統的核心,我們利用基于.net的安裝和部署做安裝程序,首先在這里注冊用戶使用的起始日期以及用戶能夠利用的時間,在C#程序中通過讀取系統日期和系統日期進行對比、求差,從而對用戶能使用的時限(例如,我們可以規定用戶可以使用系統的時間為180天,180天即為時限)做對比,判斷用戶是否到達時限,在系統中我們設計兩個密碼,一個為臨時密碼,另一個為永久密碼,如果是合法用戶,他得到的將是永久密碼(無限期的使用),否則,如果是盜版的,只能是臨時密碼(例如3天時限),而且,系統也僅供測試使用。為了防止用戶更改系統時間以達到盜版的目的,我們在設計時對用戶更改系統時間也進行了嚴格的設置,用戶想通過更改系統日期也是無效的。
2 算法描述
在這里我們以一個.net開發的水務信息管理系統為例進行介紹。
2.1 制做安裝程序
基于.net的安裝和部署是一種和.net配合使用的制做安裝程序的工具,它功能非常強大,采用面向對象(OOP)技術。由于它基于.net,從而使程序編寫工作比較簡單,也便于維護,只需要簡單的設置編程就可以制作出精美的安裝程序。
利用基于.net的安裝和部署做安裝程序,我們要用腳本編寫代碼,目的是在安裝系統時對軟件進行日期的注冊和使用天數的注冊。
算法描述如下:
1) 首先定義變量
Stringnow_date;//定義一個字符串變量
RegistryKey rk;//定義一個鍵名
2) 其次進行注冊
now_date=System.DateTime.Now.ToShortDateString();
//得到日期,并把當前日期值賦給now_date,格式為yyyy-mm-dd
rk=Registry.LocalMachine.CreateSubKey(\"SOFTWARE\\\\南陽國稅\");
//在LocalMachine根鍵下的SOFTWARE下創建“南陽國稅”子鍵,并把值傳給rk
rk.SetValue(\"first_date\", now_date);
rk.SetValue(\"last_date\", now_date);
rk.SetValue(\"times\",180);
//創建三個子鍵并分別值賦
這時就可以在注冊表中注冊了一個主鍵名“南陽國稅”,同時添加了“first_date”、“last_date”,“times”三個鍵名。注冊表是一個比較隱蔽的地方,用起來比較好,為了更加隱蔽,所以我們對now_date做異或運算,然后再進行注冊。(有關以上函數的使用方法略)
2.2 利用C#編寫應用程序的算法描述
C#是美國著名的微軟公司推出的,是一個廣泛應用于Client/Server體系結構下的數據庫前端開發工具,它也是一種面向對象的圖形化交互式開發工具,具有靈活、簡捷、高效等特點,是快速開發企業級數據庫應用程序的優秀編程器。著名的數據窗口技術在大型數據庫開發領域一度風光,幾乎成為前端工具使用上事實上的工業標準,被程序員稱為最有“錢”途的開發工具。
設計思路:
首先在C#中定義兩個自定義函數(uf_lastdays:和uf_spare),其中uf_lastdays函數是計算用戶使用軟件的天數,并且可判斷出用戶是否推遲系統日期,從而對注冊表中的last_date鍵進行更新;uf_spare函數用來得到剩余天數,提示用戶剩余的天數,如果到期,要求輸入密碼進行延期,否則關閉系統。
2.2.1 使用uf_lastdays函數
1)函數uf_lastdays
返回值:int
功能:
① 判斷系統日期是否被推后,系統日期被推后,返回-1
② 正常,返回剩余天數
③ 將last_date設為當前日期
2)定義字符串和整型變量
stringls_firstdate ,ls_lastdate,ls_canusedays ;TimeSpanli_ret;
3)通過注冊表得到firt_date、last_date和times 的值
//通過注冊表得到firt_date的值
ls_firstdate=rk.GetValue(“first_date”);
//通過注冊表得到last_date的值
ls_lastdate= rk.GetValue(“last_date”);
//通過注冊表得到times的值
ls_canusedays= rk.GetValue(“time”);
4)求用戶使用的天數和通過判斷用戶是否使用過期,從而重新注冊last_date的值
//求用戶使用的天數
li_ret= System.DateTime.Now-Convert.ToDateTime(last_date);
if (li_ret<0)
return li_ret
else
{
id_lastdate=System.DateTime.Now;
//通過判斷用戶是否使用過期,從而重新注冊last_date的值
rk.SetValue(“last_date”,id_lastdate);
li_ret=Convert.ToDateTime(last_date)-Convert.ToDateTime(first_date);
return li_ret;
}
2.2.2 使用uf_spare函數
1)函數uf_spare:
返回值:bool
參數:ag_day(int)
功能:如果剩余天數<=0,返回1;否則返回true
2)算法描述
string ls_canusedays
rk.GetValue(“times”);
ii_canusedays=int (ls_canusedays);
if (ag_day>ii_canusedays)
return 1;
else
return true;
2.3.3 使用Load事件
在C#中,Application對象的Load事件是程序的一個入口,也是程序加載首先起動的地方。因此我們在這個事件中進行判斷用戶使用的軟件是否到期。
算法描述:
int li_usedays;
li_usedays=this.uf_lastdays()
//判斷用戶是否更改系統日期
if(li_usedays < 0)
MessageBox.Show(\"您推遲了系統日期\"+string(abs(li_usedays))+\"天,系統無法加載!\")
else
if (!this.uf_spare(li_usedays))
MessageBox.Show(\"請原諒,您的軟件已經到期!\");
3 結束語
在我們使用C#進行應用系統開發時,為了防止軟件被盜版,利用注冊表的安全性,給出了一種新的防盜版思路,以利于拋磚引玉,引起大家對知識產權的重視。隨著IT行業的發展,我國的軟件產業必將有一個新的突破,那么,盜版和被盜版必將是一個長期存在的問題。我們只有不斷地利用各種防盜版技術,才能保護我們的勞動成果,實際工作表明,該方法在軟件防盜版的開發過程中是切實可行的。
參考文獻:
[1] Sanna P.Windows 2000注冊表[M].信達工作室,譯.北京:人民郵電出版社,2000.
[2] Richter J.Microsoft.NET框架程序設計[M].北京:清華大學出版社,2003.
[3] Robbins J,劉立宇.Microsoft .NET和Windows應用程序調試[M].北京:清華大學出版,2004.