摘 要:簡易介紹“木馬”的危害性及種類,了解其從病毒中單獨剝離出來的原因,并通過vb程序實現來詳細闡述其工作原理。
關鍵詞:木馬;VB;注冊表;應用程序
中圖分類號:TP39文獻標識碼:A文章編號:1672-3198(2007)12-0259-02
“木馬”原指古希臘士兵藏在木馬內進入敵方城市從而占領敵方城市的故事。許多計算機用戶特別是新手對安全問題了解不多,所以并不知道自己的計算機中了“木馬”之后應該如何清除。關鍵是得知道“木馬”的工作原理,在了解其原理之后,查殺木馬也就變得簡單易行了。
1 木馬分類
(1)遠程控制木馬。
遠程控制木馬是數量最多,危害最大,同時知名度也最高的一種木馬,它可以讓攻擊者完全控制被感染的計算機,攻擊者可以利用它完成一些甚至連計算機主人本身都不能順利進行的操作。
(2)密碼發送木馬。
密碼發送型的木馬是專門為了盜取被感染計算機上的密碼而編寫的,木馬一旦被執行,就會自動搜索內存,Cache,臨時文件夾以及各種敏感密碼文件,一旦搜索到有用的密碼,木馬就會利用免費的電子郵件服務將密碼發送到指定的郵箱。
(3)鍵盤記錄木馬。
這種特洛伊木馬就是記錄受害者的鍵盤敲擊并且在LOG文件里查找密碼,隨著Windows的啟動而啟動。
(4)DoS攻擊木馬。
隨著DoS攻擊越來越廣泛的應用,被用作DoS攻擊的木馬也越來越流行起來。當你入侵了一臺機器,給他種上DoS攻擊木馬,那么日后這臺計算機就成為你DoS攻擊的最得力助手了。
(5)FTP木馬。
這種木馬可能是最簡單的木馬了,其歷史悠久,它的惟一功能就是打開21端口,等待用戶連接。現在新FTP木馬還加上了密碼功能,這樣,只有攻擊者本人才知道正確的密碼,從而進人用戶計算機。
(6)反彈端口型木馬。
反彈端口型木馬的服務端 (被控制端)使用主動端口,客戶端 (控制端)使用被動端口。木馬定時監測控制端的存在,發現控制端上線立即彈出端口主動連結控制端打開的主動端口。
2 木馬的工作原理
(1)木馬的隱藏。
下面是一個用vb編輯的木馬程序,用于隱藏木馬。
程序的具體編制操作如下:
①新建一個工程名命名為Hidden, 在工程hidden中添加模塊Modulel,應用程序標題也改為Hidden。
在模塊Module1中加入如下聲明:
Public Declare Function GetCurrentProcessId Lib “kernel32” () As Long
'獲得當前進程ID函數的聲明。
Public Declare Function RegisterServiceProcess Lib “kernel32” (ByVal ProcessId As Long, ByVal ServiceFlags As Long) As Long
'在系統中注冊當前進程ID函數的聲明。
②在Project1中新建一個窗體Form1,設置Form1的屬性:
form1.Visible=False
form1.ShowInTaskBar=False
在代碼窗口添加如下代碼:
Private Declare Function GetDriveType Lib “kernel32” Alias “GetDriveTypeA” (ByVal nDrive As String) As Long
'獲得當前驅動器類型函數的聲明。
Private Declare Function GetVolumeInformation Lib “kernel32” Alias “GetVolumeInformationA” (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
'獲得當前驅動器信息函數的聲明:
Private Sub Form_Load()
Dim drive_no As Long, drive_flag As Long
Dim drive_chr As String, drive_disk As String
Dim serial_no As Long, kkk As Long
Dim stemp3 As String, dflag As Boolean
Dim strlabel As String, strtype As String,strc As Long
RegisterServiceProcess GetCurrentProcessId, 1 ' 從系統中取消當前進程:
strlabel = String(255, Chr(0))
strtype = String(255, Chr(0))
stemp3 = “用戶c盤序列號” '用戶C盤的序列號(十進制),讀者可根據自己情況給出。
dflag = False
For drive_no = 0 To 25
drive_disk = Chr(drive_no + 67)
drive_chr = drive_disk “:/”
drive_flag = GetDriveType(drive_chr)
If drive_flag = 3 Then
kkk = GetVolumeInformation(drive_chr, strlabel, Len(strlabel), serial_no, 0, 0, strtype,Len(strtype)) '通過GetVolumeInformation獲得磁盤序列號:
Select Case drive_no
Case 0
strc = serial_no
End Select
If serial_no = stemp3 Then
dflag = True
Exit For
End If
End If
Next drive_no
If drive_no = 26 And dflag = False Then '非法用戶
GoTo err:
End If
MsgBox (“HI,合法用戶!”)
Exit Sub
err:
MsgBox (“錯誤!你的C:盤ID號是” strc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
RegisterServiceProcess GetCurrentProcessId, 0 '從系統中取消當前程序的進程:
End Sub
(2)木馬的啟動。
“木馬”的啟動方式有很多種,這里我們介紹幾種主要的:
①在Win.ini的[windows]字段中有啟動命令“load=”和“run=”,在一般情況下 “=”后面是空白的,如果有后跟程序,比方說是這個樣子:
run=c:/windows/file.exeload=c:/windows/file.exe
②在system.ini文件中,在[BOOT]下面有個“shell=文件名”。正確的文件名應該是“explorer.exe”,如果不是“explorer.exe”,而是“shell= explorer.exe 程序名”。
③在注冊表中的情況最復雜,通過regedit命令打開注冊表編輯器,在點擊至:“HKEY-LOCAL-MACHINE/ Software/ Microsoft/ Windows/ CurrentVersion/ Run”目錄下,查看鍵值中有沒有自己不熟悉的自動啟動文件,擴展名為EXE。
參考文獻
[1]孫鋒. 網絡安全與防黑技術[M]. 北京:機械工業出版社,2004.
[2]齊鋒. Visual Basic 6.0程序設計[M]. 北京:中國鐵道出版社,2003.