阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1213|回复: 0

[讨论] 软件zcj制模块的研究

[复制链接]

该用户从未签到

发表于 2008-8-21 16:46:02 | 显示全部楼层 |阅读模式
一个软件的推广和普及都需要经历试用的阶段 如何将其发布并形成产品 并对自己的产品进行相应的保护 是开发人员必须面临的问题,所以如何在最大限度地满足软件试用需
要的情况下 使软件安全地渡过试用期 是所有软件开发者面临的一个迫切问题软件zcj制模块是解决这个问题的根本手段 即在需要试用的软件加入软件zcj制模块 当软件被试用到一定的次数或一定的时间 软件zcj制模块中的检验匙就会自动停止用户对该软件的使用 直到软件用户通过合法手段向软件设计者获取软件使用的权限后 检验匙才会自动恢复软件用户对该软件的使用权。


工作原理和基本要求
软件zcj制模块的工作原理是通过对软件zcj制模块中检验匙的设置 即设置软件的试用次数或试用的时间等条件 每次在使用软件时 软件系统会自动启动检验匙 当软件
的试用期满时 zcj制模块马上自动停止用户的软件使用权 当用户获得合法的软件使用权限时 软件zcj制模块就自动恢复用户对该软件的使用权。一个合格的软件zcj制模块至少满足以下三个条件:
1 如何隐藏软件zcj制模块中的检验匙;
2 如何设置检验匙 满足用户在软件试用期间的各项需要;
3 如何使用检验匙 不给正常用户和软件设计者造成不便
在以上三个要求中 第一个要求是最关键的。
笔者在实践中发现 Windwos系统中的注册表很庞大 同时它保存这电脑的硬件配置 已安装软件的设置信息 当前用户的环境设置 以及文件相关联程序等重要信息也在其中,查找某一数据并弄清楚该数据的作用不是很容易的事情 而且注册表是关系到整个Windows安全的条件之一 破坏性的查找会导致注册表损坏 它强大功能背后是可靠的操作安全性,所以建议把软件zcj制模块的检验匙存放到注册表的某一目录中会有很高的安全性。

实现过程
1 工作流程file:///C:/Documents%20and%20Settings/Administrator/桌面/image003

软件zcj制模块的工作流程如图1所示
2 检验匙的设计和主要源代码及注释
1 检验匙的设计
Windows的注册表中 取其中的一个目录或自行创建一个目录作存放检验匙文件 例如使用HKEY_CLASSES_ROOT作为存放检验匙目录 检验匙的标志值名称为Micrsofts 使用
此名称的原因是这样能使标志值的隐蔽性更强。
检验匙的标志值设置目前一般有两种 第一种是记录软件被试用的累计次数 第二种是设定软件的试用日期 在本文中重点讨论第二种。
首先设定了软件的三种状态 试用期 禁用期和使用期,再设定好软件注册码rightcade的值 通过变量Values读取检验匙的标志值Micrsofts中的日期记录值 再根据所得到的Values值判断出目前软件的处于三种中的哪一种

1 Values 0 软件用户处于使用期

2 Values< 试用日期 软件用户处于试用期

3 Values= 试用日期 软件用户试用期满
处于禁用期 要求用户输入检验匙

2 主要源代码及注释

1 检测模块主要源代码及注释
......
registertemp := tregistry.create; //准备使用注册表
str:= DateTimeToStr(Now);//读取系统当前日期
with registertemp do

begin

rootkey := HKEY_CLASSES_ROOT; //把检验匙存放此目录下

if openkey('software\microsoft\windows\ HKEY_CLASSES_ROOT
', true) then
//打开所存放检验匙的标志值

Begin
if
valueexists('Micrsofts') then begin //判断Micrsofts标志值是否存在

Values := readinteger('Micrsofts'); //标志值存在 读出标志值
if
Values=0 then

showmessage( 已经注册 请继续使用 ); //若标志值为0 则说明已注册
if
(Values <> 0) and (str < Values) then begin
//若不为0且未到达规定的试用日期,说明虽未注册 但允许继续试用

writeinteger(' Micrsofts ', Values); //将更新后的标志值写入注册表中
end;
if str = Values then

begin

showmessage( 软件试用日期已到 ); //假如已到试用日期 提醒
用户应该注册

Closekey;

Free;

Exit //软件自动退出
End
......




2 输入注册码模块主要源代码及注释
......
showmessage( 您使用的是非注册软件,试用已期满 请输入注册码方可继续试用 );
str1:= edit1.text;//要求用户在edit输入框中输入注册码 并由字符变量str1传递

if edit1.text<>
then //edit输入框不为空

begin

rightcade :=
aaaaaaaa ; //注册码为aaaaaaaa 可加入更杂的算法 如密码算法

if rightcade = str1 then
begin

writeinteger('Micrsofts', 0); //若输入的注册码正确 则将标志值置为0,表示已注册

closekey;

free;
end
else

begin //若输入的注册码错误 应作出提示并拒绝让其继续使用

showmessagebox('注册码错误! ');

closekey;

free;

exit; //中止程序运行 拒绝让其继续使用

end;
end
......
系统改进
笔者认为除了把检验匙放在注册表内之外 还应该在软件中建立检验匙核对机制 即在软件中建立一个与注册表中的检验匙形成实时核对机制 才能使软件更安全地渡过试用期
对机制的算法最好是由软件设计者自己建立的 一旦注册表中检验匙的标志值或软件中核对机制受恶意破坏或修改 这时核对机制就能及时发现 系统马上自动停止软件的使用 这样就
形成了软件注册模块双保险核对机制 其工作原理如下图2所示file:///C:/Documents%20and%20Settings/Administrator/桌面/image001

通过笔者多次实践发现 把软件注册模块中的检验匙隐藏到Windows操作系统的注册表中 能使软件在试用期内具有很高的安全性 即使软件被盗用 只要软件过了试用期 盗用者
也不能正常使用该软件。
本文的创新点在于不仅详细地阐述了软件注册模块的工作原理和实现的主要过程 并且在此基础上进一步提出了软件注册模块双保险核对机制 并设计出其工作原理图 这个双保险核对机制是进一步增加了软件注册模块安全性 即使盗用者知道检验匙的隐藏位置 并摸索出检验匙中标志值的规律软件中的核对机制也能自动中止软件的使用。
楼主热帖
启用邀请码注册,提高发帖质量,建设交流社区
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表