?只要掌握了原理,你也能寫出一個所謂的“黑客”程序。下面筆者帶領大家用vb親自編寫一個遠程控制程序。從而揭開它的神秘面紗。
一、所用控件
控件是一個activex控件,使用tcp協(xié)議或udp協(xié)議連接到遠程計算機上并與之交換數據。和定時器控件一樣,的工作原理是:客戶端向服務器端發(fā)出連接請求,服務器端則不停地監(jiān)聽客戶端的請求,當兩者的協(xié)議溝通時,客戶端和服務器端之間就建立了連接,這時客戶端和服務器端就可以實現雙向數據傳輸。實際編程中,必須分別建立一個服務器端應用程序和一個客戶端應用程序,兩個應用程序中分別有自己的insock控件。首先設置insock控件使用的協(xié)議,這里我們使用tcp協(xié)議?,F在,讓我們開始用vb建立兩個程序,一個是客戶端程序myt,另一個是服務器端程序myserver。
二、編寫客戶端程序
首先來建客戶端程序myt。在myt程序中建立一個窗體,加載insock控件,稱為tcpt,表示使用的是tcp協(xié)議,再加入兩個文本框(text1和text2),用來輸入服務器的ip地址和端口號,然后建立一個按鈕(cd1),用來建立連接,按下之后就可以對連接進行初始化了,代碼如下:
privatesubcd1_clic=
=val()端口號,缺省為100調用ect方法,與指定ip地址的計算機進行連接
bled=false
endsub
連接之后就是如何處理所收到的數據的問題了??蛻舳撕头掌鞫私⑦B接后,如果有任何一端接收到新的數據,就會觸發(fā)該端insock控件的dataarrival事件,在響應這個事件時,可以使用getdata方法獲得發(fā)送來的數據。比如可以在tcpt的dataarrival事件中編寫代碼如下:
privatesubtcpt_dataarrival(byvalbytestotallong)
dimxstrinx使用getdata獲得發(fā)送來的數據
.......
endsub
后面的省略部分表示對接收到的數據進行的具體處理,讀者可以根據實際情況編寫。
三、編寫服務器端程序
先建立一個窗體,加載insock控件,名稱為tcpserver。另外在窗體上加入一個文本框text1用來顯示客戶機的ip地址和客戶機發(fā)送過來的數據信息。
當客戶端程序運行時,在客戶端程序按下連接按鈕后,客戶端向服務器端程序請求連接,這時服務器端的erequest事件被觸發(fā),所以服務器端程序要解決連接問題,可以使用erequest事件完成此功能。代碼如下:
在窗體的load事件中對tcpserver控件進行初始化
privatesubform_loa=100把服務器置于監(jiān)聽檢測狀態(tài)
endsub
服務器端接收到客戶端的連接請求,首先檢查當前狀態(tài)是否處于連接關閉狀態(tài)
privatesubtcpt_erequest(byvalrequestidlong)
sckclosedthen檢查控件的state屬性是否為關閉
requestid
end
endsub
現在我們在服務器端程序tcpserver的dataarrival事件中添加以下代碼,以便讓服務器端程序可以接收客戶機端的指令,并運行相應的程序。
四、測試遠程控制程序
現在,你就可以將這兩個程序分別運行于兩臺使用tcp/ip協(xié)議聯網的機器了。在客戶機端你按下連接按鈕,再輸入“c:”,可以看到在服務器端立刻打開一個dos窗口,設想一下,如果它運行一些破壞性的命令會發(fā)生什么事情?這就是一個最基本的遠程控制程序。當然,真正的黑客程序要復雜得多,但基本原理是相同的?,F在你該恍然大悟了吧?