网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
在Delphi中编制软件版权保护控件
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

一、概述
软件作为一种人类智力劳动成果的一种表现形式,融会了设计者和开发者辛勤的劳动和汗水,然而,由于用户观念上的差异和盗版软件的泛滥,软件开发者的权益往往得不到有效的保护,因此,作为必要的手段-----软件的自身保护也就在特定的环境下被重视起来。
然而,正所谓,“魔高一尺,道高一丈”,保护和破解的矛盾关系在始终持续着,要想找到一种万能的保护方法,却也不是那么简单的事。但是,如果开发者使用的保护手段连一般用户都能破解的话(如:修改系统日期),这样的保护则显然达不到保护软件版权的目的。
基于此,笔者利用Delphi5.0面向对象的特性,设计开发了一个实用的版权保护控件,以为程序开发者提供一种简易的软件保护手段。
二、实现方法
1.在Delphi5.0中新建一个单元文件,书写代码如下,保存:
unit RegObj;

interface

uses
Windows, Messages, SysUtils, Classes, Forms;

type
TRegObj = class
private
FSerial: string; //主板序列号
FKey: string; //密码
FMaxTimes: Integer; //最大运行次数
FCompany: string; //公司名称
FEmail: string; //联系用的电子邮件
protected
procedure SetSerial; //取得主扳的序列号
procedure GetKey; //从用户序列号文件中读取序列号
function GetTimes: Integer; //从文件中读取程序的运行次数
function CheckKey: Boolean; //检查序列号和密码是否匹配的函数
public
constructor Create;
function Execute: Boolean; //运行对象方法
published
property Company: string read FCompany write FCompany;
property MaxTimes: Integer read FMaxTimes write FMaxTimes;
property Email: string read FEmail write FEmail;
end;

implementation

//TRegObj.
constructor TRegObj.Create;
begin
inherited;
end;

function TRegObj.GetTimes: Integer;
Const
//用于存储运行次数的文件,开发人员可自定义或使用注册表存储运行次数
//起此名字用于迷惑破解者,使用前不要和系统的动态链接库同名
Tmp = ''ispnet.dll'';
var
Ch: Char;
Dir: array [0..255] of Char;
Fn: string;
I : Integer;
List: Tstrings;
begin
//取得Windows系统的目录
GetSystemDirectory(@Dir, 255);
For I := 0 to 255 do
begin
if Ord(Dir[I]) = 0 then Break;
Fn := Fn + Dir[I];
end;
Fn := Fn + ''\'' + Tmp;
try
List := TStringList.Create;
if Not FileExists(Fn) then
Ch := Chr(1)
else
begin
List.LoadFromFile(Fn);
Ch := List.Text;
Ch := Chr(Ord(Ch) + 1);
end;
List.Text := Ch;
//存储运行次数
List.SaveToFile(Fn);
Result := Ord(Ch);
finally
List.Free;
end;
end;

procedure TRegObj.SetSerial;
begin
//取得主板的序列号
FSerial := String(Pchar(Ptr($FEC71)));
end;

//取得密码
procedure TRegObj.GetKey;
const
Sn = ''Key.dat'';
var
List: TStrings;
Fn, Path: string;
begin
Path := ExtractFilePath(Application.ExeName);
Fn := Path + Sn;
if Not FileExists(Fn) then
begin
FKey := '''';
Exit;
end;
try
List := TStringList.Create;
List.LoadFromFile(Fn);
FKey := List.Values[''Key''];
finally
List.Free;
end;
end;

function TRegObj.CheckKey: Boolean;
begin
//开发人员根据自己的需要进行修改,在这里是为了简单起见
Result := FKey = FSerial;
end;

function TRegObj.Execute: Boolean;
var
Msg: string;
T: Integer;
begin
T := GetTimes;
GetKey;
SetSerial;
if FKey <> FSerial then
begin
Msg := '' 您这是第'' + IntToStr(T) + ''次运行此程序(最大次数:'' + IntToStr(FMaxTimes) + '')!'';
Application.Mess
  • 上一篇资讯: 监视Pop3信箱
  • 下一篇资讯: delphi运行错误信息
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号