书名:super红客

vb实现木马式隐形运行

    在一些系统,为了特定目的,经常要求程序隐藏起来运行,例如dcs(集散控制系统)中的后台监控系统、木马控制程序、源码防拷贝等,以减少被发现、截杀和反汇编的风险。这种功能模块要求程序在运行期间不仅不会在桌面出现,也不允许**作者从任务管理器列表中发现。

    程序隐形的原理

    对于一个隐形程序而言,最基本的要求是:

    1.不在桌面出现界面;

    2.不在任务栏出现图标;

    3.程序名从任务管理器名单中消失。

    对于上述第一点,可以将form的visible属性设为false。

    要将图标从任务栏中屏蔽掉,可以把form的shointaskbar改为false。

    在indos环境下,可以调用i函数中的registerviceprocess来实现第三个要求。

    上述功能,不论用vc、delphi、vb,还是pb等任何一种高级编程语言都是比较容易实现的。

    隐形功能多用于木马程序,但木马程序在许多国家和地区是不合法的,为便于理解,本文用vb结合一个程序防拷贝的实例来讲解。通过获取软件安装路径所在磁盘序列号(磁盘id),用做对合法用户的判断。以下程序的目的是用于讲解隐形程序的编制和应用,对程序防拷贝内容作了一定程度的简化。

    程序隐形的示例

    程序的具体编制操作如下:

    1.在vb6.0编程环境中,新建一个工程project1。

    2.在project1中添加模块modulel,在工程属性中将工程名称改为hiddenmen,应用程序标题也改为hiddenmen(以下程序都经过实际运行测试,可以原样复制使用)。

    在模块module1中加入如下声明:

    publicdeclarefucurrentprocessidlib“kernel32”long

    获得当前进程id函数的声明

    publicdeclarefuerserviceprocesslib“kernel32”(byvalprocessidlong,byvalserviceflagslong)long

    在系统中注册当前进程id函数的声明

    3.在project1中新建一个窗体form1,设置form1的属性:

    =fals=false

    在代码窗口添加如下代码:

    privatedeclarefudrivetypelib“kernel32”alias“getdrivetypea”(byvalndrivestring)long

    获得当前驱动器类型函数的声明

    privatedeclarefuvolumeinformationlib“kernel32”alias“getvolumeinformationa”(byvallprootpathring,byvallpvolumenamebufferstring,byvalnvolumenamesizelong,lpvolumeserialnumberlong,lpmaximumpolengthlong,lpfilesystemflagslong,byvallpfilesystemnamebufferstring,byvalemnamesizelong)long

    获得当前驱动器信息函数的声明

    privatesubform_load

    dimdrive_nolong,drive_flaglong

    dimdrive_chrstring,drive_diskstring

    dimserial_nolong,kkklong

    dimstemp3string,dflagboolean

    dimstrlabelstring,strtypestring,strg

    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

    e

    serial_no=stemp3then

    dflag=true

    exitfor

    end

    end

    drive_no

    drive_no=anddflag=falsethen非法用户

    gotoerr:

    end

    msgbox(“hi,合法用户!”)

    exitsub

    err:

    msgbox(“错误!你的c:盘id号是”&strc)

    endsub

    privatesubform_unload(teger)

    registerserviceprocessgetcurrentprocessid,0从系统中取消当前程序的进程

    endsub

    将上述程序代码编译后运行,在出现类似“错误!你的c盘id号是172498135”对话框时,按下ctrl+alt+del键,看看程序名叫“hiddenmen”是否在任务管理器名单列表里。如果把上述程序稍加改动,可以加到自己特定的程序中去。该程序在隐形运行之中,不知不觉就完成了预定功能。

    以上程序在简体中文indos98和vb6.0环境中调试通过。

    </p>