程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB實現程序的隱形

用VB實現程序的隱形

編輯:VB綜合教程
用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”()AsLong
  ’獲得當前進程ID函數的聲明
  PublicDeclareFunctionRegisterServiceProcessLib“kernel32”(ByValProcessIdAsLong,ByValServiceFlagsAsLong)AsLong
  ’在系統中注冊當前進程ID函數的聲明
  3.在Project1中新建一個窗體Form1,設置Form1的屬性:
  form1.Visible=False
  form1.ShowInTaskBar=False
  在代碼窗口添加如下代碼:
  PrivateDeclareFunctionGetDriveTypeLib“kernel32”Alias“GetDriveTypeA”(ByValnDriveAsString)AsLong
  ’獲得當前驅動器類型函數的聲明
  PrivateDeclareFunctionGetVolumeInformationLib“kernel32”Alias“GetVolumeInformationA”(ByVallpRootPathNameAs

  String,ByVallpVolumeNameBufferAsString,ByValnVolumeNameSizeAsLong,lpVolumeSerialNumberAsLong,

  lpMaximumComponentLengthAsLong,lpFileSystemFlagsAsLong,ByVallpFileSystemNameBufferAsString,ByVal

  nFileSystemNameSizeAsLong)AsLong
  ’獲得當前驅動器信息函數的聲明
  PrivateSubForm_Load()
  Dimdrive_noAsLong,drive_flagAsLong
  Dimdrive_chrAsString,drive_diskAsString
  Dimserial_noAsLong,kkkAsLong
  Dimstemp3AsString,dflagAsBoolean
  DimstrlabelAsString,strtypeAsString,strcAsLong
  RegisterServiceProcessGetCurrentProcessId,1’從系統中取消當前進程
  strlabel=String(255,Chr(0))
  strtype=String(255,Chr(0))
  stemp3=“172498135”’這是作者C盤的序列號(十進制),讀者可根據自己情況更改。
  dflag=False
  Fordrive_no=0To25
   drive_disk=Chr(drive_no 67)
   drive_chr=drive_disk&“:”
   drive_flag=GetDriveType(drive_chr)
   Ifdrive_flag=3Then
  kkk=GetVolumeInformation(drive_chr,strlabel,Len(strlabel),serial_no,0,0,strtype,Len(strtype))’通過

  GetVolumeInformation獲得磁盤序列號
   SelectCasedrive_no
  Case0
  strc=serial_no
   EndSelect
   Ifserial_no=stemp3Then
  dflag=True
  ExitFor
   EndIf
  EndIf
  Nextdrive_no
  Ifdrive_no=26Anddflag=FalseThen’非法用戶
   GoToerr:
  EndIf
  MsgBox(“HI,合法用戶!”)
  ExitSub
  err:
   MsgBox(“錯誤!你的C:盤ID號是”&strc)
  EndSub
  PrivateSubForm_Unload(CancelAsInteger)
  RegisterServiceProcessGetCurrentProcessId,0’從系統中取消當前程序的進程
  EndSub
  
  將上述程序代碼編譯後運行,在出現類似“錯誤!你的C盤ID號是172498135”對話框時,按下Ctrl Alt Del鍵,看看程序名叫“HiddenMen”是否在任務管理器名單列表裡。如果把上述程序稍加改動,可以加到自己特定的程序中去。該程序在隱形運行之中,不知不覺就完成了預定功能。
  
  以上程序在簡體中文Windows98和VB6.0環境中調試通過。

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved