用Delphi编写网络验证程序
编程爱好者
时下,编程爱好者越来越多地开发自己的实用程序。有的软件也免不了作为光盘版发行,而软件的注册也越来越多地受到关注。序列号、注册码、手机收费、网站实时注册等方式各出奇招。软件设计者对自己软件作一定的保护措施也是理所当然的。下面将介绍如何用Delphi编写一个网络验证程序。
编程思路:利用Delphi中的Idftp组件访问远程ftp文件,判断用户的光盘是否为合法光盘,而且这种思路要比用光盘加密大师制作的加密光盘好一些,因为加密大师制作的同一张光盘的密码是一样的,也就是说一张光盘可以给许多用户使用,而本程序验证后,我们将在远程FTP上做一个标志,使原来合法的光盘编号在使用以后就不再是合法的了。
本程序主要适合光盘版的软件,配合Winiso和光盘加密大师,这两个软件请到网上找。下面主要讲解一下制作过程。
一、加密并刻盘
发行的软件光盘中至少包含主调程序与一个被光盘大师隐藏的文件夹,而文件夹中就存放着发布的软件。本例中以 nihg.exe为例,将它放到目录☆☆☆☆☆中,用Winiso制作光盘镜像文件。
将所需文件夹与主调程序(验证程序.exe)拖放到Winiso中,选择菜单中的 Save As ,另存为iso标准镜像文件,保存待用(图1)。

利用光盘加密大师将文件夹隐藏起来。启动光盘加密大师后,打开刚才制作好的iso文件,看到如图2所示界面。

选中文件夹后,点击工具栏上的按钮,可以看到如图3所示界面。这表明该文件夹已被隐藏,保存退出。

用Nero等烧录软件制作本光盘。完成后,打开光盘,发现只能看到验证程序.exe,文件夹已无法看到,所以一般用户是不会想到你有这样一个文件夹的,更无法使用到里面的.exe文件了。用户只能通过验证程序来调用里面的文件,也就是你开发的软件。
二、编写验证程序
下面介绍一下验证程序的Delphi代码:
程序设计界面如图4所示。

首先设置idftp1的属性,主要有三个值(图5):

在button1的onclick事件代码为
procedure TForm1.Button1Click(Sender: TObject);
begin
IdFTP1.Connect;
IdFTP1.List(ListBox1.Items,'',false);//在右边的listbox1中列出文件
end;
它的主要功能是连上远程的FTP服务器,并取得根目录下的所有文件,而文件名就是我们事先放在服务器上的合法的光盘编号,比如HZ2345678、XS456789等。
当程序运行后,我们就能在listbox中看到这两个文件了(如图6所示)。

当然这个listbox是不能让软件用户看到的,所以,你要将它的visible属性改为不可见。
接下去我们就要来判断memo1中输入的光盘编号是不是位于listbox1中,也就是算不算是合法的光盘编号。Button2的主要代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var a,b:integer;
begin
b:=listbox1.Count; //取出远程合法光盘编号的数目
for a:=0 to b-1 do// 用一个循环依次比较memo的编号是否与listbox中的相等
begin
if listbox1.Items.Strings[a]=memo1.Lines[0]
then
begin // 比较正确的一些操作
IdFTP1.Rename(ListBox1.Items.Strings[a],ListBox1.Items.Strings[a]
+'验证于'+datetostr(now())+timetostr(time()) );
// 将文件更名加上验证时间,以防止用户骗人 :)
Shellexecute(handle,nil,pchar('.\☆☆☆☆☆\nihg.exe'),nil,nil,sw_shownormal);
exit; //执行光盘中的隐藏文件,也就是你的软件主程序
end ;
end;
MessageBox(0,'你输入的光盘编号不正确或该编号已经验证过了。请'+#13+'自己购买光盘或联系远程文件管理者 13685761768 ', '网络验证不正确,请保证你的电脑已接入英特网!' ,MB_OK+MB_ICONERROR)
// 这儿是验证不正确的一些提示
end;
至此,程序已基本完成。有一个应注意的地方,memo1的onclick事件最好加一句memo1.Clear ; 以保证用户输入的编号是位于memo1的第一行,程序发布时,最好将其中的错误提示汉化一下,可以用exescope等资源修改工具。