Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496341
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:48:10

下载本文示例代码
p>  如何保护自己的软件不被非授权盗用的问题,始终困扰着每一个程序员。当前世界上保护软件的方法有很多,主要是采用加密(如加软件狗)方式或软件注册方式。使用软件狗等加密方法,虽然其保护最有效,但对授权用户的正常使用有一定的影响,而且软件发放比较复杂,在实际运用中比较少被采用。而注册登记方式则是当前最流行、运用最广泛的方法,虽然有许多通用软件其注册码可以很容易地被发烧友们所解,但对于独立程序员为某特定应用设计的应用软件而言,采用注册机制显得最经济、最方便,而且在一定的范围内非常有效。笔者在实际工作中,广泛使用了软件注册方法,有效地维护了软件的权益。   DEPHI软件的功能极为强大,深受程序员喜欢。用DEPHI开发的软件,可以很方便地加入注册机制。下面笔者就如何在DEPHI开发的软件中加入注册机制与朋友们交流心得。   要实现软件注册机制,需解决以下几个问题:1、如何加入注册检测,判断软件是否注册;2、如何隐藏注册码,及是否注册的标志;3、在软件不注册情况下,如何限制软件的使用时间或次数;4、对正常用户而言,不应造成使用不便。对于以上四个问题,如何隐藏注册码及是否注册的标志是关键。在WINDOWS95中,WIN95本身及大多数的应用软件都将其各种参数放入注册表中,因而注册表内的数据显得极为庞大和复杂。如果将注册标志隐藏在注册表的某一角落中,想要找到它并理解它是极其困难的事。因此我们可以利用这一点,在注册表的某个分支上设置一个从名称上看毫无特殊意义的关键字,将自己软件的注册标志数据存放在这里。  整个注册机制主要由两个部分组成:检查和注册。通过检查标志值,得出软件是否已注册;若没有注册,则要看它允许使用的次数是否已达到;若可使用的次数已用完,则应提示用户输入注册码,进行注册;只有用户输入的注册码正确时,才让用户继续使用软件,同时将标志置为已注册,让用户永久性使用;否则允许使用的次数未达到,应将次数加一;若用户注册输入的注册码错误或拒绝注册,则直接关闭软件,拒绝其继续使用。当然,在软件允许使用次数未达到时,也应通过菜单项为用户提供机会进行注册登记。以下是笔者在实际开发中,建立注册机制的程序代码及注释。 假设软件的主程序窗口为FORM1,则将该段代码置放在FORM1.CREATE事件中。代码如下:procedure TForm1.form1create(Sender: TObject); var re_id:integer; registerTemp : TR stry; inputstr,get_id:string; dy,clickedok:boolean; begin  dy:=false; //软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用。  registerTemp := TRegistry.Create; //准备使用注册表  with registerTemp do  begin    RootKey:=HKEY_LOCAL_MACHINE; //存放在此根下    if OpenKey(Software\Microsoft\Windows\CurrentVersion\Mark,True) then     // 建一目录,存放标志值。当然也可以存放在已存在的目录下。怎么样,很难发现吧?     begin      if valueexists(gc_id) then begin //用gc_id的值作为标志,首先判断其存在否?        re_id:=readinteger(gc_id);//读出标志值        if (re_id$#@60;$#@62;0) and (re_id$#@60;$#@62;100) then begin //若标志值为0,则说明已注册。             //若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。         re_id:=re_id 5; //允许标志的最大值为100,每次加5,则最多只可用20次。         Writeinteger(gc_id,re_id);//将更新后的标志值写入注册表中。      end;      if re_id=100 then dy:=true; //假如值已到100,则应注册。     end    else Writeinteger(gc_id,5);//建立标志,并置初始标志值。   end;   if dy then begin //若dy值为TRUE,则应提示用户输入注册码,进行注册。     clickedok:=InputQuery(您使用的是非注册软件,请输入注册码:, ,inputstr);     if clickedok then begin       get_id:=inttostr(27593758*2);//注册码为55187516,当然可加入更杂的算法。       if get_id=inputstr then begin        Writeinteger(gc_id,0);//若输入的注册码正确,则将标志值置为0,即已注册。         CloseKey;         Free;        end       else begin //若输入的注册码错误,应作出提示并拒绝让其继续使用         application.messagebox(注册码错误!请与作者联系!,警告框,mb_ok);         CloseKey;         Free;         application.terminate; //中止程序运行,拒绝让其继续使用        end;       end     else begin //若用户不输入注册码,也应作出提示并拒绝让其继续使用       application.messagebox(请与作者联系,使用注册软件!,警告框,mb_ok);       CloseKey;       Free;       application.terminate;      end;   end;  end; end;(注:通过菜单进行注册的方法同本段提示用户进行注册的内容雷同,这里不提供代码。)  以上程序代码已在DEPHI3.0/WIN95环境中运行通过,并在实际运用中得到验证。对合法用户而言,这样的机制,只要其录入注册码一次就可以,不增加其日常使用的负担;而对非法用户而言,除非他得到注册码或重装WINDOWS95,否则超过使用次数后,将无法继续使用。当然在实际应用中还有许多地方可以进一步加强反破解能力,欢迎朋友们提出批评和指导。 p>  如何保护自己的软件不被非授权盗用的问题,始终困扰着每一个程序员。当前世界上保护软件的方法有很多,主要是采用加密(如加软件狗)方式或软件注册方式。使用软件狗等加密方法,虽然其保护最有效,但对授权用户的正常使用有一定的影响,而且软件发放比较复杂,在实际运用中比较少被采用。而注册登记方式则是当前最流行、运用最广泛的方法,虽然有许多通用软件其注册码可以很容易地被发烧友们所解,但对于独立程序员为某特定应用设计的应用软件而言,采用注册机制显得最经济、最方便,而且在一定的范围内非常有效。笔者在实际工作中,广泛使用了软件注册方法,有效地维护了软件的权益。   DEPHI软件的功能极为强大,深受程序员喜欢。用DEPHI开发的软件,可以很方便地加入注册机制。下面笔者就如何在DEPHI开发的软件中加入注册机制与朋友们交流心得。   要实现软件注册机制,需解决以下几个问题:1、如何加入注册检测,判断软件是否注册;2、如何隐藏注册码,及是否注册的标志;3、在软件不注册情况下,如何限制软件的使用时间或次数;4、对正常用户而言,不应造成使用不便。对于以上四个问题,如何隐藏注册码及是否注册的标志是关键。在WINDOWS95中,WIN95本身及大多数的应用软件都将其各种参数放入注册表中,因而注册表内的数据显得极为庞大和复杂。如果将注册标志隐藏在注册表的某一角落中,想要找到它并理解它是极其困难的事。因此我们可以利用这一点,在注册表的某个分支上设置一个从名称上看毫无特殊意义的关键字,将自己软件的注册标志数据存放在这里。  整个注册机制主要由两个部分组成:检查和注册。通过检查标志值,得出软件是否已注册;若没有注册,则要看它允许使用的次数是否已达到;若可使用的次数已用完,则应提示用户输入注册码,进行注册;只有用户输入的注册码正确时,才让用户继续使用软件,同时将标志置为已注册,让用户永久性使用;否则允许使用的次数未达到,应将次数加一;若用户注册输入的注册码错误或拒绝注册,则直接关闭软件,拒绝其继续使用。当然,在软件允许使用次数未达到时,也应通过菜单项为用户提供机会进行注册登记。以下是笔者在实际开发中,建立注册机制的程序代码及注释。 假设软件的主程序窗口为FORM1,则将该段代码置放在FORM1.CREATE事件中。代码如下:procedure TForm1.form1create(Sender: TObject); var re_id:integer; registerTemp : TR stry; inputstr,get_id:string; dy,clickedok:boolean; begin  dy:=false; //软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用。  registerTemp := TRegistry.Create; //准备使用注册表  with registerTemp do  begin    RootKey:=HKEY_LOCAL_MACHINE; //存放在此根下    if OpenKey(Software\Microsoft\Windows\CurrentVersion\Mark,True) then     // 建一目录,存放标志值。当然也可以存放在已存在的目录下。怎么样,很难发现吧?     begin      if valueexists(gc_id) then begin //用gc_id的值作为标志,首先判断其存在否?        re_id:=readinteger(gc_id);//读出标志值        if (re_id$#@60;$#@62;0) and (re_id$#@60;$#@62;100) then begin //若标志值为0,则说明已注册。             //若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。         re_id:=re_id 5; //允许标志的最大值为100,每次加5,则最多只可用20次。         Writeinteger(gc_id,re_id);//将更新后的标志值写入注册表中。      end;      if re_id=100 then dy:=true; //假如值已到100,则应注册。     end    else Writeinteger(gc_id,5);//建立标志,并置初始标志值。   end;   if dy then begin //若dy值为TRUE,则应提示用户输入注册码,进行注册。     clickedok:=InputQuery(您使用的是非注册软件,请输入注册码:, ,inputstr);     if clickedok then begin       get_id:=inttostr(27593758*2);//注册码为55187516,当然可加入更杂的算法。       if get_id=inputstr then begin        Writeinteger(gc_id,0);//若输入的注册码正确,则将标志值置为0,即已注册。         CloseKey;         Free;        end       else begin //若输入的注册码错误,应作出提示并拒绝让其继续使用         application.messagebox(注册码错误!请与作者联系!,警告框,mb_ok);         CloseKey;         Free;         application.terminate; //中止程序运行,拒绝让其继续使用        end;       end     else begin //若用户不输入注册码,也应作出提示并拒绝让其继续使用       application.messagebox(请与作者联系,使用注册软件!,警告框,mb_ok);       CloseKey;       Free;       application.terminate;      end;   end;  end; end;(注:通过菜单进行注册的方法同本段提示用户进行注册的内容雷同,这里不提供代码。)  以上程序代码已在DEPHI3.0/WIN95环境中运行通过,并在实际运用中得到验证。对合法用户而言,这样的机制,只要其录入注册码一次就可以,不增加其日常使用的负担;而对非法用户而言,除非他得到注册码或重装WINDOWS95,否则超过使用次数后,将无法继续使用。当然在实际应用中还有许多地方可以进一步加强反破解能力,欢迎朋友们提出批评和指导。 下载本文示例代码


用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制用DEPHI为应用软件建立注册机制
阅读(167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~