木马编程diy服务启动技术

木马编程diy服务启动技术

ID:1836103

大小:63.00 KB

页数:9页

时间:2017-11-13

木马编程diy服务启动技术_第1页
木马编程diy服务启动技术_第2页
木马编程diy服务启动技术_第3页
木马编程diy服务启动技术_第4页
木马编程diy服务启动技术_第5页
资源描述:

《木马编程diy服务启动技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、木马编程DIY服务启动技术文/图冷风随意打开一个木马的服务生成端,你都能发现里面有一种启动方式叫“服务启动”,也就是说这个技术以经是大众化的了,但是你写过这样的程序吗?如果写过的话,你就可以泡杯茶先休息一下,如果还不是太了解的话,那就一块来学习一下通常编写一个服务需要两个程序,一个是实现功能的Service程序,一个是用于对Service程序进行控制的控制程序。这里需要注意的是实现Service功能的程序与一般的程序是有区别的,其区别并不仅仅在于是不是有GUI窗体,在其格式上也有着不同,下面我们先写一个CmdShell后门的Service程序。对于Servic

2、e程序来说,它一般又由以下四部分组成:main(),ServiceMain()和Handler()当然还有我们的功能实现函数比如MyWork()它们之间的关系,用一个简单的图示就可以了然于胸了如图示1,其服务程序的基本流程就是由main()调用ServiceMain()而由ServiceMain()调用Handler()和执行功能函数MyWork()到现在为止,你以经大体了解了服务程序的流程,按上面的流程一步一步来实现这个后门程序。 1.程序的入口main()函数服务程序的入口与普通程序一样也是从main()开始,但不同的是服务程序的main极为简单,因为它只

3、负责创建分派表并启动控制分派机,其代码如下:voidmain(){   SERVICE_TABLE_ENTRYServiceTable[2];   ServiceTable[0].lpServiceName="Name";//线程名字   ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;//线程入口地址   ServiceTable[1].lpServiceName=NULL;   ServiceTable[1].lpServiceProc=NULL;//最后一个必须为NUL

4、L   StartServiceCtrlDispatcher(ServiceTable);//启动服务的控制分派机线程}main()是Service程序的主线程,当serviecontrolmanager开始一个Service进程时,它总是等待这个Service程序去调用StartServiceCtrlDispatcher()函数。当执行服务时main()时将会调用ServiceMain函数,当ServiceMain执行完毕或者说发生错误时StartServiceCtrlDispatcher函数返回,然后主进程终止。2.服务的真正入口ServiceMain()

5、ServiceMain()是Service程序的真正入口点,它主要完成以下功能,首先注册一个Handler去处理控制程序或控制面板,Service的控制要求,比如启动,停止,暂停重起等,其次就是实现我们的功能操作,其实现代码如下:VOIDWINAPIServiceMain(DWORDdwArgc,LPTSTR*lpszArgv){   DWORD  status=0;   DWORD  specificError=0xfffffff;   ServiceStatus.dwServiceType       =SERVICE_WIN32;   ServiceSt

6、atus.dwCurrentState      =SERVICE_START_PENDING;   ServiceStatus.dwControlsAccepted  =SERVICE_ACCEPT_STOP

7、SERVICE_ACCEPT_SHUTDOWN

8、SERVICE_ACCEPT_PAUSE_CONTINUE;   ServiceStatus.dwWin32ExitCode     =0;   ServiceStatus.dwServiceSpecificExitCode=0;   ServiceStatus.dwCheckPoint        =

9、0;   ServiceStatus.dwWaitHint          =0;   //调用RegisterServiceCtrlHandler()注册一个ServiceHandler函数用来处理程序对Service的控制要求   hStatus=RegisterServiceCtrlHandler("ServiceName",(LPHANDLER_FUNCTION)ServiceHandler);   if(hStatus==0)       return;    //Handleerrorcondition   status=GetLastError

10、();   if(status!=NO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。