時下,編程愛好者越來越多地開發自己的實用程序。有的軟件也免不了作為光盤版發行,而軟件的注冊也越來越多地受到關注。序列號、注冊碼、手機收費、網站實時注冊等方式各出奇招。軟件設計者對自己軟件作一定的保護措施也是理所當然的。下面將介紹如何用Delphi編寫一個網絡驗證程序。
編程思路:利用Delphi中的Idftp組件訪問遠程ftp文件,判斷用戶的光盤是否為合法光盤,而且這種思路要比用光盤加密大師制作的加密光盤好一些,因為加密大師制作的同一張光盤的密碼是一樣的,也就是說一張光盤可以給許多用戶使用,而本程序驗證後,我們將在遠程FTP上做一個標志,使原來合法的光盤編號在使用以後就不再是合法的了。
本程序主要適合光盤版的軟件,配合Winiso和光盤加密大師,這兩個軟件請到網上找。下面主要講解一下制作過程。
一、加密並刻盤
發行的軟件光盤中至少包含主調程序與一個被光盤大師隱藏的文件夾,而文件夾中就存放著發布的軟件。本例中以 nihg.exe為例,將它放到目錄☆☆☆☆☆中,用Winiso制作光盤鏡像文件。
將所需文件夾與主調程序(驗證程序.exe)拖放到Winiso中,選擇菜單中的 Save As ,另存為iso標准鏡像文件,保存待用(圖1)。
利用光盤加密大師將文件夾隱藏起來。啟動光盤加密大師後,打開剛才制作好的iso文件,看到如圖2所示界面。
選中文件夾後,點擊工具欄上的按鈕,可以看到如圖3所示界面。這表明該文件夾已被隱藏,保存退出。
圖3 用Nero等燒錄軟件制作本光盤。完成後,打開光盤,發現只能看到驗證程序.exe,文件夾已無法看到,所以一般用戶是不會想到你有這樣一個文件夾的,更無法使用到裡面的.exe文件了。用戶只能通過驗證程序來調用裡面的文件,也就是你開發的軟件。
二、編寫驗證程序
下面介紹一下驗證程序的Delphi代碼:
首先設置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等資源修改工具。