2007-07-07 12:35:55
Kenny
用Visual Basic學做“駭客”程式
只要掌握了原理,你也能寫出一個所謂的“駭客”程式。下面筆者帶領大家用VB親自編寫一個遠端控制程式。從而揭開它的神秘面紗。
一、所用控件
在程式中將使用Winsock控件。Winsock控件是一個ActiveX控件,使用TCP協議或UDP協議連接到遠端電腦上並與之交換數據。和定時器控件一樣,Winsock控件在運行時是不可見的。Winsock的工作原理是:用戶端向伺服器端發出連接請求,伺服器端則不停地監聽用戶端的請求,當兩者的協議溝通時,用戶端和伺服器端之間就建立了連接,這時用戶端和伺服器端就可以實現雙向數據傳輸。實際程式設計中,必須分別建立一個伺服器端應用程式和一個用戶端應用程式,兩個應用程式中分別有自己的Winsock控件。首先設定Winsock控件使用的協議,這裡我們使用TCP協議。現在,讓我們開始用VB建立兩個程式,一個是用戶端程式myclient,另一個是伺服器端程式myserver。
二、編寫用戶端程式
首先來建用戶端程式myclient。在myclient程式中建立一個窗體,加載Winsock控件,稱為tcpclient,表示使用的是TCP協議,再加入兩個文字方塊(text1和text2),用來輸入伺服器的IP地址和連接埠號,然後建立一個按鈕(cd1),用來建立連接,按下之後就可以對連接進行初始化了,代碼如下:
連接之後就是如何處理所收到的數據的問題了。用戶端和伺服器端建立連接後,如果有任何一端接收到新的數據,就會觸發該端winsock控件的dataarrival事件,在響應這個事件時,可以使用getdata方法穫得發送來的數據。比如可以在tcpclient的dataarrival事件中編寫代碼如下:
後面的省略部分表示對接收到的數據進行的具體處理,讀者可以根據實際情況編寫。
三、編寫伺服器端程式
先建立一個窗體,加載Winsock控件,名稱為tcpserver。另外在窗體上加入一個文字方塊text1用來顯示用戶機的IP地址和用戶機發送過來的數據資訊。
當用戶端程式運行時,在用戶端程式按下連接按鈕後,用戶端向伺服器端程式請求連接,這時伺服器端的connectionrequest事件被觸發,所以伺服器端程式要解決連接問題,可以使用connectionrequest事件完成此功能。代碼如下:
現在我們在伺服器端程式tcpserver的dataarrival事件中添加以下代碼,以便讓伺服器端程式可以接收用戶機端的指令,並運行相應的程式。
四、測試遠端控制程式
現在,你就可以將這兩個程式分別運行於兩台使用TCP/IP協議聯網的機器了。在用戶機端你按下連接按鈕,再輸入“c:mmand.com”,可以看到在伺服器端立刻打開一個DOS窗口,設想一下,如果它運行一些破壞性的命令會發生什麼事情?這就是一個最基本的遠端控制程式。當然,真正的駭客程式要複雜得多,但基本原理是相同的。現在你該恍然大悟了吧?
一、所用控件
在程式中將使用Winsock控件。Winsock控件是一個ActiveX控件,使用TCP協議或UDP協議連接到遠端電腦上並與之交換數據。和定時器控件一樣,Winsock控件在運行時是不可見的。Winsock的工作原理是:用戶端向伺服器端發出連接請求,伺服器端則不停地監聽用戶端的請求,當兩者的協議溝通時,用戶端和伺服器端之間就建立了連接,這時用戶端和伺服器端就可以實現雙向數據傳輸。實際程式設計中,必須分別建立一個伺服器端應用程式和一個用戶端應用程式,兩個應用程式中分別有自己的Winsock控件。首先設定Winsock控件使用的協議,這裡我們使用TCP協議。現在,讓我們開始用VB建立兩個程式,一個是用戶端程式myclient,另一個是伺服器端程式myserver。
二、編寫用戶端程式
首先來建用戶端程式myclient。在myclient程式中建立一個窗體,加載Winsock控件,稱為tcpclient,表示使用的是TCP協議,再加入兩個文字方塊(text1和text2),用來輸入伺服器的IP地址和連接埠號,然後建立一個按鈕(cd1),用來建立連接,按下之後就可以對連接進行初始化了,代碼如下:
| private sub cd1_click() tcpclient.romotehost=text1.text tcpclient.romoteport=val(text2.text)'連接埠號,缺省為1001 tcpclient.connect '調用connect方法,與指定IP地址的電腦進行連接 cd1.enabled=false end sub |
連接之後就是如何處理所收到的數據的問題了。用戶端和伺服器端建立連接後,如果有任何一端接收到新的數據,就會觸發該端winsock控件的dataarrival事件,在響應這個事件時,可以使用getdata方法穫得發送來的數據。比如可以在tcpclient的dataarrival事件中編寫代碼如下:
| private sub tcpclient_dataarrival(byval bytestotal as long) dim x as string tcpclient.getdata x '使用getdata穫得發送來的數據 ....... End sub |
後面的省略部分表示對接收到的數據進行的具體處理,讀者可以根據實際情況編寫。
三、編寫伺服器端程式
先建立一個窗體,加載Winsock控件,名稱為tcpserver。另外在窗體上加入一個文字方塊text1用來顯示用戶機的IP地址和用戶機發送過來的數據資訊。
當用戶端程式運行時,在用戶端程式按下連接按鈕後,用戶端向伺服器端程式請求連接,這時伺服器端的connectionrequest事件被觸發,所以伺服器端程式要解決連接問題,可以使用connectionrequest事件完成此功能。代碼如下:
| '在窗體的load事件中對tcpserver控件進行初始化 private sub form_load() tcpserver.localport=1001 tcpserver.listen '把伺服器置於監聽偵測狀態 end sub '伺服器端接收到用戶端的連接請求,首先檢查目前狀態是否處於連接關閉狀態 Private sub tcpclient_connectionrequest(Byval requestID as long) If tcpserver.state<>sckclosed then '檢查控件的state屬性是否為關閉 Tcpserver.close ' Tcpserver.accept requestID ' End if End sub |
現在我們在伺服器端程式tcpserver的dataarrival事件中添加以下代碼,以便讓伺服器端程式可以接收用戶機端的指令,並運行相應的程式。
四、測試遠端控制程式
現在,你就可以將這兩個程式分別運行於兩台使用TCP/IP協議聯網的機器了。在用戶機端你按下連接按鈕,再輸入“c:mmand.com”,可以看到在伺服器端立刻打開一個DOS窗口,設想一下,如果它運行一些破壞性的命令會發生什麼事情?這就是一個最基本的遠端控制程式。當然,真正的駭客程式要複雜得多,但基本原理是相同的。現在你該恍然大悟了吧?