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环境中调试通过。