VB實(shí)現(xiàn)程序的隱形

字號(hào):

在一些系統(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