资源描述:
《原创木马编程diy第4篇之系统服务》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、[原创]木马编程DIY第4篇之系统服务离开学校了,可以专心写东西的时间相对也就少了今晚又重拾心情把以前的文章做了一个系统的整理以系列的方式发布出来,希望对编程有兴趣的朋友如果你有什么问题的话,我都很高兴与您学习交流QQ:121121606E-main:gotoc@163.com Http://blog.csdn.net/chinafe 冷风于2008-5-9木马编程DIY第4篇之系统服务文/图冷风德州科技职业学院对系统服务的管理几乎是木马必不可少的功能了,比如神气儿,上兴远程控制等要是能我们给自己的木马加上这个功能,看着也不赖取得配置权限在对服务进行管理设置前,需要以相应的
2、权限打开服务,可通过下面两个API实现复制内容到剪贴板代码:SC_HANDLEOpenSCManager(LPCTSTRlpMachineName,//pointertomachinenamestringLPCTSTRlpDatabaseName,//pointertodatabasenamestringDWORDdwDesiredAccess //typeofaccess);SC_HANDLEOpenService(SC_HANDLEhSCManager,//handletoservicecontrolmanager //databaseLPC
3、TSTRlpServiceName,//pointertonameofservicetostartDWORDdwDesiredAccess//typeofaccesstoservice);通常我们以完全权限打开,示例代码如下:复制内容到剪贴板代码: SC_HANDLEscm; SC_HANDLEservice; if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL) { Printf("OpenSCManagerError"); } service=OpenService(scm,S
4、erverName,SERVICE_ALL_ACCESS); if(!service) { Printf("OpenServiceerror!"); }这样就可以通过service句柄对服务进行各种操作了枚举基本服务信息想要对服务进行设置就需要知道服务的当前信息,对我们有用的通常是以下几项服务名称,显示名称,启动状态,启动方式,程序路径等。这些信息我们可以通过API函数EnumServicesStatus来实现,它的原形如下:复制内容到剪贴板代码:BOOLEnumServicesStatus(SC_HANDLEhSCManager,//handletoser
5、vicecontrolmanagerdatabaseDWORDdwServiceType, //typeofservicestoenumerateDWORDdwServiceState, //stateofservicestoenumerateLPENUM_SERVICE_STATUSlpServices, //pointertoservicestatusbufferDWORDcbBufSize, //sizeofservicestatusbufferLPDWORDpcbBytesNeeded,//pointertovaria
6、bleforbytesneededLPDWORDlpServicesReturned, //pointertovariablefornumberreturnedLPDWORDlpResumeHandle //pointertovariablefornextentry);其中LPENUM_SERVICE_STATUSlpServices是一个结构,它的原形如下:复制内容到剪贴板代码:typedefstruct_ENUM_SERVICE_STATUS{//ess LPTSTRlpServiceName; LPTSTRlpDisplayName
7、; SERVICE_STATUSServiceStatus;}ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;结构中包含服务名称,显示名称,启动状态。虽然它所返回的信息是及为有限的,但它是一次枚举所有服务信息在要求不高的情况下,用它还是相当方便的,下面的示例代码可以枚举系统中所有服务的基本信息,代码如下:复制内容到剪贴板代码: LPENUM_SERVICE_STATUSlpServices =NULL; DWORD nSize=0; DWOR