vb實現木馬式隱形運行
在一些系統,為了特定目的,經常要求程序隱藏起來運行,例如dcs(集散控制系統)中的後台監控系統、木馬控制程序、源碼防拷貝等,以減少被發現、截殺和反彙編的風險。這種功能模塊要求程序在運行期間不僅不會在桌面出現,也不允許**作者從任務管理器列表中發現。
程序隱形的原理
對於一個隱形程序而言,最基本的要求是:
1.不在桌面出現界面;
2.不在任務欄出現圖標;
3.程序名從任務管理器名單中消失。
對於上述第一點,可以將form的visible屬性設為false。
要將圖標從任務欄中屏蔽掉,可以把form的showintaskbar改為false。
在windows環境下,可以調用winapi函數中的registerviceprocess來實現第三個要求。
上述功能,不論用vc、delphi、vb,還是pb等任何一種高級編程語言都是比較容易實現的。
隱形功能多用於木馬程序,但木馬程序在許多國家和地區是不合法的,為便於理解,本文用vb結合一個程序防拷貝的實例來講解。通過獲取軟體安裝路徑所在磁碟序列號(磁碟id),用做對合法用戶的判斷。以下程序的目的是用於講解隱形程序的編製和應用,對程序防拷貝內容作了一定程度的簡化。
程序隱形的示例
程序的具體編製操作如下:
1.在vb6.0編程環境中,新建一個工程project1。
2.在project1中添加模塊modulel,在工程屬性中將工程名稱改為hiddenmen,應用程序標題也改為hiddenmen(以下程序都經過實際運行測試,可以原樣複製使用)。
在模塊module1中加入如下聲明:
publicdeclarefunctiongetcurrentprocessidlib「kernel32」long
'獲得當前進程id函數的聲明
publicdeclarefunctionregisterserviceprocesslib「kernel32」(byvalprocessidlong,byvalserviceflagslong)long
'在系統中註冊當前進程id函數的聲明
3.在project1中新建一個窗體form1,設置form1的屬性:
bxwx.org=falsbxwx.org=false
在代碼窗口添加如下代碼:
privatedeclarefunctiongetdrivetypelib「kernel32」alias「getdrivetypea」(byvalndrivestring)long
'獲得當前驅動器類型函數的聲明
privatedeclarefunctiongetvolumeinformationlib「kernel32」alias「getvolumeinformationa」(byvallprootpathnamestring,byvallpvolumenamebufferstring,byvalnvolumenamesizelong,lpvolumeserialnumberlong,lpmaximumorgponentlengthlong,lpfilesystemflagslong,byvallpfilesystemnamebufferstring,byvalnfilesystemnamesizelong)long
'獲得當前驅動器信息函數的聲明
privatesubform_load
dimdrive_nolong,drive_flaglong
dimdrive_chrstring,drive_diskstring
dimserial_nolong,kkklong
dimstemp3string,dflagboolean
dimstrlabelstring,strtypestring,strclong
registerserviceprocessgetcurrentprocessid,1'從系統中取消當前進程
strlabel=string(255,chr(0))
strtype=string(255,chr(0))
stemp3=「172498135」'這是作者c盤的序列號(十進位),讀者可根據自己情況更改。
dflag=false
fordrive_no=025
drive_disk=chr(drive_no+67)
drive_chr=drive_disk&「:\」
drive_flag=getdrivetype(drive_chr)
drive_flag=3then
kkk=getvolumeinformation(drive_chr,strlabel,len(strlabel),serial_no,0,0,strtype,len(strtype))'通過getvolumeinformation獲得磁碟序列號
selectcasedrive_no
case0
strc=serial_no
endselect
serial_no=stemp3then
dflag=true
exitfor
end
end
nextdrive_no
drive_no=anddflag=falsethen'非法用戶
gotoerr:
end
msgbox(「hi,合法用戶!」)
exitsub
err:
msgbox(「錯誤!你的c:盤id號是」&strc)
endsub
privatesubform_unload(cancelinteger)
registerserviceprocessgetcurrentprocessid,0'從系統中取消當前程序的進程
endsub
將上述程序代碼編譯后運行,在出現類似「錯誤!你的c盤id號是172498135」對話框時,按下ctrl+alt+del鍵,看看程序名叫「hiddenmen」是否在任務管理器名單列表裡。如果把上述程序稍加改動,可以加到自己特定的程序中去。該程序在隱形運行之中,不知不覺就完成了預定功能。
以上程序在簡體中文windows98和vb6.0環境中調試通過。