WEB开发网
开发学院WEB开发综合 用VB实现“木马”式隐形运行程序 阅读

用VB实现“木马”式隐形运行程序

 2006-02-27 11:50:02 来源:WEB开发网   
核心提示:在一些系统,为了特定目的,用VB实现“木马”式隐形运行程序,经常要求程序隐藏起来运行,例如DCS(集散控制系统)中的后台监控系统、木马控制程序、源码防拷贝等,该程序在隐形运行之中,不知不觉就完成了预定功能,以减少被发现、截杀和反汇编的风险,这种功能模块要求程序在运行期间不仅不会在桌面出现
在一些系统,为了特定目的,经常要求程序隐藏起来运行,例如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”(ByVallpRootPathNameAsString,ByVallpVolumeNameBufferAsString,ByValnVolumeNameSizeAsLong,lpVolumeSerialNumberAsLong,lpMaximumComponentLengthAsLong,lpFileSystemFlagsAsLong,ByVallpFileSystemNameBufferAsString,ByValnFileSystemNameSizeAsLong)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环境中调试通过。->

Tags:VB 实现 木马

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接