您的位置:程序门 -> vb -> 基础类



如何让自己的dll(vb编写)能被svchost.exe调用


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何让自己的dll(vb编写)能被svchost.exe调用[已结贴,结贴人:dorothyjesse]
发表于:2007-03-17 20:48:20 楼主
vb编写的activex   dll文件,怎样才能让系统文件svchost.exe调用?
发表于:2007-03-17 23:26:161楼 得分:5
不懂你在说什么……
svchost.exe是只windows   nt(含win2k及之后的系统)中一个提供若干系统服务的程序。
发表于:2007-03-18 08:41:032楼 得分:5
不是很明白这个东西,说具体点么?
发表于:2007-03-18 09:23:583楼 得分:0
很明显的一个进程注入。
下几个病毒的代码去看。。。
发表于:2007-03-18 09:39:334楼 得分:0
注入就可以.
前几天api区还有人在公布远线注入和卸载的代码
发表于:2007-03-18 09:40:145楼 得分:10
不过有个问题....vb写的dll要不要msvbvm60.dll支持呢.........直接注进去会怎么样还没试过..
发表于:2007-03-18 09:44:146楼 得分:0
前几天看过几个病毒的代码,用vbs写的,好像不用vb运行时文件的支持
发表于:2007-03-18 09:46:237楼 得分:10
http://support.microsoft.com/kb/170883
发表于:2007-03-18 12:18:538楼 得分:0
楼上兄弟给的是怎样用vb写服务

我要的是用svchost调用dll文件
比如win2000下
在c:\winnt\system32\ntmssvc.dll通过c:\winnt\system32\svchost.exe   -k   netsvcs的方法调用
发表于:2007-03-18 12:29:249楼 得分:0
路过学习
发表于:2007-03-18 12:33:4010楼 得分:5
to:zcsor
前几天api区还有人在公布远线注入和卸载的代码
=============================================
能否提供一下连接,让俺也看看?

to:fankun
前几天看过几个病毒的代码,用vbs写的,好像不用vb运行时文件的支持
能否也给俺瞧瞧?
发表于:2007-03-18 15:09:5411楼 得分:10
'楼上兄弟给的是怎样用vb写服务
'
'我要的是用svchost调用dll文件
'比如win2000下
'在c:\winnt\system32\ntmssvc.dll通过c:\winnt\system32\svchost.exe   -k   netsvcs的方法调用

很好理解,因为ntmssvc.dll本身就是svchost.exe的一个组件,所以可以通过svchost.exe调用。
但是(据我所知)并没有任何资料公布svchost.exe与它的组件之间的接口关系。

发表于:2007-03-20 11:39:5512楼 得分:0
没人有办法了么?
发表于:2007-03-20 11:42:5013楼 得分:0
去--it试验室--下几本电子书看,我就是下的电子书。
http://download.chinaitlab.com/program.html
发表于:2007-03-20 11:46:0114楼 得分:0
http://download.chinaitlab.com/security.html
这个里面有许多关于系统安全的书,里面有很多著名病毒的代码段,大部分蠕虫都是用vb脚本写的
发表于:2007-03-20 13:23:4815楼 得分:10
activex   dll不行,要写成标准的api   dll才行,要导出一个函数servicemain;

以下为一段delphi的代码
{   文件名:   servicedll.dpr
    概述:       替换由svchost.exe启动的某个系统服务,具体服务由全局变量   servicename   决定.

                    经测试,生成的dll文件运行完全正常.
                    测试环境:   windows   2003   server   +   delphi   7.0}

library   servicedll;

uses
    sysutils,
    classes,
    winsvc,
    system,
    windows;

{   定义全局变量   }
var
    svcstatshandle:   service_status_handle;   //   服务控制信息句柄
    dwcurrstate:   dword;   //   存储服务状态
    servicename:   pchar   =   'bits ';   //   服务名称

{   调试函数,用于输出调试文本   }
procedure   outputtext(ch:   pchar);
var
    filehandle:   textfile;
    ff:   integer;
begin
    try
        if   not   fileexists( 'zztestdll.txt ')   then
            ff   :=   filecreate( 'zztestdll.txt ');
    finally
        if   ff   >   0   then   fileclose(ff);
    end;

    assignfile(filehandle,   'zztestdll.txt ');
    append(filehandle);
    writeln(filehandle,   ch);
    flush(filehandle);
    closefile(filehandle);
end;


{   dll入口和出口处理函数   }
procedure   dllentrypoint(dwreason:   dword);
begin
    case   dwreason   of
        dll_process_attach:
            ;
        dll_process_detach:
            ;
        dll_thread_attach:
            ;
        dll_thread_detach:
            ;
    end;
end;

{   与scm管理器通话   }
function   tellscm(dwstate:   dword;   dwexitcode:   dword;   dwprogress:   dword):   longbool;
var   srvstatus:   service_status;
begin
    srvstatus.dwservicetype   :=   service_win32_share_process;
    dwcurrstate   :=   dwstate;
    srvstatus.dwcurrentstate   :=   dwstate;
    srvstatus.dwcontrolsaccepted   :=   service_accept_stop   or   service_accept_pause_continue   or   service_accept_shutdown;
    srvstatus.dwwin32exitcode   :=   dwexitcode;
    srvstatus.dwservicespecificexitcode   :=   0;
    srvstatus.dwcheckpoint   :=   dwprogress;
    srvstatus.dwwaithint   :=   3000;
    result   :=   setservicestatus(svcstatshandle,   srvstatus);
end;

{   service   控制函数   }
procedure   servicehandler(fdwcontrol:   integer);   stdcall;
begin
    case   fdwcontrol   of

        service_control_stop:
            begin
                tellscm(service_stop_pending,   0,   1);
                sleep(10);
                tellscm(service_stopped,   0,   0);
            end;

        service_control_pause:
            begin
                tellscm(service_pause_pending,   0,   1);
                tellscm(service_paused,   0,   0);
            end;

        service_control_continue:
            begin
                tellscm(service_continue_pending,   0,   1);
                tellscm(service_running,   0,   0);
            end;

        service_control_interrogate:
            tellscm(dwcurrstate,   0,   0);

        service_control_shutdown:
            tellscm(service_stopped,   0,   0);

    end;

end;


{   service   main   }
procedure   servicemain(argc:   integer;   var   argv:   pchar);   stdcall;
begin
    //   注册控制函数
    svcstatshandle   :=   registerservicectrlhandler(servicename,   @servicehandler);
    if   (svcstatshandle   =   0)   then
    begin
        outputtext( 'error   in   registerservicectrlhandler ');
        exit;
    end   else   freeconsole();

    //   启动服务
    tellscm(service_start_pending,   0,   1);
    tellscm(service_running,   0,   0);
    outputtext( 'service   is   running ');

    //   这里可以执行我们真正要作的代码
    while   ((dwcurrstate   <>   service_stop_pending)   and   (dwcurrstate   <>   service_stopped))   do
    begin
        sleep(1000);
    end;

    outputtext( 'service   exit ');

end;


//   导出函数列表
exports
    servicemain;

{   dll入口点   }
begin
    dllproc   :=   @dllentrypoint;
end.

发表于:2007-03-23 09:06:1316楼 得分:0
谢谢几位
我先去fankun(虾虾《农夫三拳——哼哼哈嘿》)   提供的网站看看
发表于:2007-03-23 09:26:4917楼 得分:5
我看现在的回答应该能解决问题了
发表于:2007-03-23 10:06:4718楼 得分:0
楼上兄弟的意思是?
发表于:2007-03-23 10:23:4919楼 得分:0
你的问题还没解决?
发表于:2007-03-23 10:26:4320楼 得分:0
还没有
你有好办法?
发表于:2007-03-23 16:41:2421楼 得分:0
楼上的,你又不是提问的,你怎么知道还没有?
发表于:2007-03-23 16:43:1622楼 得分:5
参考小溶的bits得实现     写注册表
发表于:2007-03-24 10:16:4923楼 得分:0
http://bbs.cfan.com.cn/thread-480931-1-1.html
向其他线程注入代码并在这个线程的上下文中执行,c++方法分析与源码实现。
发表于:2007-03-24 11:02:5524楼 得分:30
http://www.yesky.com/softchannel/72342371928637440/20040223/1770523.shtml
vb中钩子的编程实现
发表于:2007-03-25 17:37:1825楼 得分:5
路过学习!!
发表于:2007-03-30 08:23:5926楼 得分:0
谢谢各位
问题虽然还没解决
但贴还是不能不结


快速检索

最新资讯
热门点击