明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

完成程序的隱形

[摘要]孔祥軍 蘇悅娟 在一些系統(tǒng),為了特定目的,經(jīng)常要求程序隱藏起來運(yùn)行,例如DCS(集散控制系統(tǒng))中的后臺(tái)監(jiān)控系統(tǒng)、木馬控制程序、源碼防拷貝等,以減少被發(fā)現(xiàn)、截殺和反匯編的風(fēng)險(xiǎn)。這種功能模塊要求程序在...
孔祥軍 蘇悅娟  

在一些系統(tǒng),為了特定目的,經(jīng)常要求程序隱藏起來運(yùn)行,例如DCS(集散控制系統(tǒng))中的后臺(tái)監(jiān)控系統(tǒng)、木馬控制程序、源碼防拷貝等,以減少被發(fā)現(xiàn)、截殺和反匯編的風(fēng)險(xiǎn)。這種功能模塊要求程序在運(yùn)行期間不僅不會(huì)在桌面出現(xiàn),也不允許被操作者從任務(wù)管理器列表中發(fā)現(xiàn)。
程序隱形的原理
對(duì)于一個(gè)隱形程序而言,最基本的要求是:
1. 不在桌面出現(xiàn)界面;
2. 不在任務(wù)欄出現(xiàn)圖標(biāo);
3. 程序名從任務(wù)管理器名單中消失。
對(duì)于上述第一點(diǎn),可以將Form的Visible屬性設(shè)為False。
要將圖標(biāo)從任務(wù)欄中屏蔽掉,可以把Form的ShowInTaskBar改為False。
在Windows環(huán)境下,可以調(diào)用WIN API函數(shù)中的RegisterviceProcess來實(shí)現(xiàn)第三個(gè)要求。
上述功能,不論用VC、Delphi、VB,還是PB等任何一種高級(jí)編程語言都是比較容易實(shí)現(xiàn)的。
隱形功能多用于木馬程序,但木馬程序在許多國(guó)家和地區(qū)是不合法的,為便于理解,本文用VB結(jié)合一個(gè)程序防拷貝的實(shí)例來講解。通過獲取軟件安裝路徑所在磁盤序列號(hào)(磁盤ID),用做對(duì)合法用戶的判斷。以下程序的目的是用于講解隱形程序的編制和應(yīng)用,對(duì)程序防拷貝內(nèi)容作了一定程度的簡(jiǎn)化。
程序隱形的示例
程序的具體編制操作如下:  
1. 在VB6.0編程環(huán)境中,新建一個(gè)工程Project1。  
2. 在Project1中添加模塊Modulel,在工程屬性中將工程名稱改為HiddenMen,應(yīng)用程序標(biāo)題也改為HiddenMen(以下程序都經(jīng)過實(shí)際運(yùn)行測(cè)試,可以原樣復(fù)制使用)。  
在模塊Module1中加入如下聲明:
Public Declare Function GetCurrentProcessId Lib “kernel32” () As Long
’獲得當(dāng)前進(jìn)程ID函數(shù)的聲明
Public Declare Function RegisterServiceProcess Lib “kernel32” (ByVal ProcessId As Long, ByVal ServiceFlags As Long) As Long
’在系統(tǒng)中注冊(cè)當(dāng)前進(jìn)程ID函數(shù)的聲明
3. 在Project1中新建一個(gè)窗體Form1,設(shè)置Form1的屬性:
form1.Visible=False
form1.ShowInTaskBar=False
在代碼窗口添加如下代碼:  
Private Declare Function GetDriveType Lib “kernel32” Alias “GetDriveTypeA” (ByVal nDrive As String) As Long
’獲得當(dāng)前驅(qū)動(dòng)器類型函數(shù)的聲明
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
’獲得當(dāng)前驅(qū)動(dòng)器信息函數(shù)的聲明
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 ’ 從系統(tǒng)中取消當(dāng)前進(jìn)程
strlabel = String(255, Chr(0))
strtype = String(255, Chr(0))
stemp3 = “172498135” ’這是作者C盤的序列號(hào)(十進(jìn)制),讀者可根據(jù)自己情況更改。  
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獲得磁盤序列號(hào)
 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 (“錯(cuò)誤!你的C:盤ID號(hào)是” & strc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
RegisterServiceProcess GetCurrentProcessId, 0 ’從系統(tǒng)中取消當(dāng)前程序的進(jìn)程
End Sub
將上述程序代碼編譯后運(yùn)行,在出現(xiàn)類似“錯(cuò)誤!你的C盤ID號(hào)是172498135”對(duì)話框時(shí),按下Ctrl+Alt+Del鍵,看看程序名叫“HiddenMen”是否在任務(wù)管理器名單列表里。如果把上述程序稍加改動(dòng),可以加到自己特定的程序中去。該程序在隱形運(yùn)行之中,不知不覺就完成了預(yù)定功能。
以上程序在簡(jiǎn)體中文Windows 98和VB 6.0環(huán)境中調(diào)試通過。


標(biāo)簽:完成程序的隱形