一种基于注册表实现软件防盗功能的算法

时间:2022-08-11 04:38:11

一种基于注册表实现软件防盗功能的算法

摘要:该文介绍了实现软件防盗功能的一种新方法,该方法是基于注册表进行设计的。首先分析了利用注册表达到软件限期使用从而实现防盗版功能的设计思想,提出了这种算法,然后以一个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

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)

功能:如果剩余天数

2)算法描述

string ls_canusedays

rk.GetValue(“times”);

ii_canusedays=int (ls_canusedays);

if (ag_day>ii_canusedays)

return false;

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 框架程序设计[M].北京:清华大学出版社,2003.

[3] Robbins J,刘立宇.Microsoft .NET和Windows应用程序调试[M].北京:清华大学出版,2004.

上一篇:核聚类人工免疫网络模型的设计 下一篇:AOP在Spring框架中的应用