在一些系統(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)的。
隱形功能多用于木馬程序,但木馬程序在許多國家和地區(qū)是不合法的,為便于理解,本文用VB結(jié)合一個(gè)程序防拷貝的實(shí)例來講解。通過獲取軟件安裝路徑所在磁盤序列號(hào)(磁盤ID),用做對(duì)合法用戶的判斷。以下程序的目的是用于講解隱形程序的編制和應(yīng)用,對(duì)程序防拷貝內(nèi)容作了一定程度的簡化。
程序隱形的示例
程序的具體編制操作如下:
1. 在VB6.0編程環(huán)境中,新建一個(gè)工程Project1。
2. 在Project1中添加模塊Modulel,在工程屬性中將工程名稱改為HiddenMen,應(yīng)用程序標(biāo)題也改為HiddenMen
(以下程序都經(jīng)過實(shí)際運(yùn)行測試,可以原樣復(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
程序隱形的原理對(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)的。
隱形功能多用于木馬程序,但木馬程序在許多國家和地區(qū)是不合法的,為便于理解,本文用VB結(jié)合一個(gè)程序防拷貝的實(shí)例來講解。通過獲取軟件安裝路徑所在磁盤序列號(hào)(磁盤ID),用做對(duì)合法用戶的判斷。以下程序的目的是用于講解隱形程序的編制和應(yīng)用,對(duì)程序防拷貝內(nèi)容作了一定程度的簡化。
程序隱形的示例
程序的具體編制操作如下:
1. 在VB6.0編程環(huán)境中,新建一個(gè)工程Project1。
2. 在Project1中添加模塊Modulel,在工程屬性中將工程名稱改為HiddenMen,應(yīng)用程序標(biāo)題也改為HiddenMen
(以下程序都經(jīng)過實(shí)際運(yùn)行測試,可以原樣復(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