ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:49KB ,
资源ID:764123      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-764123.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(原创木马编程DIY第4篇之系统服务.DOC)为本站会员(国***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

原创木马编程DIY第4篇之系统服务.DOC

1、原创木马编程 DIY 第 4 篇之系统服务离开学校了,可以专心写东西的时间相对也就少了今晚又重拾心情把以前的文章做了一个系统的整理 以系列的方式发布出来, 希望对编程有兴趣的朋友如果你有什么问题的话,我都很高兴与您学习交流QQ:121121606 E-main: Http:/ 冷风于 2008-5-9木马编程 DIY 第 4 篇之系统服务文/图冷风 德州科技职业学院对系统服务的管理几乎是木马必不可少的功能了,比如神气儿,上兴远程控制等要是能我们给自己的木马加上这个功能,看着也不赖取得配置权限在对服务进行管理设置前,需要以相应的权限打开服务,可通过下面两个 API 实现 复制内容到剪贴板 代码:

2、SC_HANDLE OpenSCManager(LPCTSTR lpMachineName, / pointer to machine name stringLPCTSTR lpDatabaseName, / pointer to database name stringDWORD dwDesiredAccess / type of access);SC_HANDLE OpenService(SC_HANDLE hSCManager, / handle to service control manager/ databaseLPCTSTR lpServiceName, / pointer to

3、 name of service to startDWORD dwDesiredAccess / type of access to service);通常我们以完全权限打开,示例代码如下: 复制内容到剪贴板 代码:SC_HANDLE scm;SC_HANDLE service;if(scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS)=NULL)Printf(“OpenSCManager Errorn“);service=OpenService(scm,ServerName,SERVICE_ALL_ACCESS);if(!service)Pri

4、ntf(“OpenService error!n“);这样就可以通过 service 句柄对服务进行各种操作了枚举基本服务信息想要对服务进行设置就需要知道服务的当前信息,对我们有用的通常是以下几项服务名称,显示名称,启动状态,启动方式,程序路径等。这些信息我们可以通过 API 函数 EnumServicesStatus 来实现,它的原形如下: 复制内容到剪贴板 代码:BOOL EnumServicesStatus(SC_HANDLE hSCManager, / handle to service control manager databaseDWORD dwServiceType, / ty

5、pe of services to enumerateDWORD dwServiceState, / state of services to enumerateLPENUM_SERVICE_STATUS lpServices,/ pointer to service status bufferDWORD cbBufSize, / size of service status bufferLPDWORD pcbBytesNeeded, / pointer to variable for bytes neededLPDWORD lpServicesReturned,/ pointer to va

6、riable for number returnedLPDWORD lpResumeHandle / pointer to variable for next entry);其中 LPENUM_SERVICE_STATUS lpServices 是一个结构,它的原形如下: 复制内容到剪贴板 代码:typedef struct _ENUM_SERVICE_STATUS / essLPTSTR lpServiceName;LPTSTR lpDisplayName;SERVICE_STATUS ServiceStatus; ENUM_SERVICE_STATUS, *LPENUM_SERVICE_S

7、TATUS;结构中包含服务名称,显示名称,启动状态。虽然它所返回的信息是及为有限的,但它是一次枚举所有服务信息在要求不高的情况下,用它还是相当方便的,下面的示例代码可以枚举系统中所有服务的基本信息,代码如下: 复制内容到剪贴板 代码:LPENUM_SERVICE_STATUS lpServices = NULL;DWORD nSize = 0;DWORD n;DWORD nResumeHandle = 0;lpServices = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR, 64 * 1024); /注意分配足够的空间EnumServicesStatus(

8、scm,SERVICE_WIN32,SERVICE_STATE_ALL,(LPENUM_SERVICE_STATUS)lpServices,64 * 1024,for ( i = 0; i lpBinaryPathName);if(2=ServicesInfo-dwStartType) /启动方式Printf(“自动 n“);if(3=ServicesInfo-dwStartType)Printf(“手动 n“);if(4=ServicesInfo-dwStartType)Printf(“禁止 n“);上面的代码稍加修改就可以用到你的程序中,现在对于服务信息的显示就完成了。启动/停止服务启动一

9、个服务可以用 StartService 函数实现,不过在启动前先用 QueryServiceStatus 检查一下服务的运行状态,如下代码 复制内容到剪贴板 代码:SERVICE_STATUS status;BOOL isSuccess=QueryServiceStatus(service,if (!isSuccess)Printf(“QueryServiceStatus error!n“);if ( status.dwCurrentState=SERVICE_STOPPED )isSuccess=StartService(service,NULL,NULL);if (!isSuccess)P

10、rintf(“启动服务失败!“);下面是停止服务的实现代码: 复制内容到剪贴板 代码:if ( status.dwCurrentState!=SERVICE_STOPPED )isSuccess=ControlService(service,SERVICE_CONTROL_STOP,if (!isSuccess )Printf(“停止服务失败!“);创建/删除服务创建服务使用的 API 为 CreateService,它的原形为: 复制内容到剪贴板 代码:SC_HANDLE CreateService(SC_HANDLE hSCManager, / handle to service cont

11、rol manager/ databaseLPCTSTR lpServiceName, / pointer to name of service to startLPCTSTR lpDisplayName, / pointer to display nameDWORD dwDesiredAccess, / type of access to serviceDWORD dwServiceType, / type of serviceDWORD dwStartType, / when to start serviceDWORD dwErrorControl, / severity if servi

12、ce fails to startLPCTSTR lpBinaryPathName, / pointer to name of binary fileLPCTSTR lpLoadOrderGroup, / pointer to name of load ordering/ groupLPDWORD lpdwTagId, / pointer to variable to get tag identifierLPCTSTR lpDependencies, / pointer to array of dependency namesLPCTSTR lpServiceStartName,/ point

13、er to account name of serviceLPCTSTR lpPassword / pointer to password for service account);其中 DWORD dwStartType 是指动方式,有三种方式 复制内容到剪贴板 代码:SERVICE_AUTO_START /自动SERVICE_DEMAND_START /手动SERVICE_DISABLED /禁用此函数的参比较多但我们通常只用其中的一部分,如 复制内容到剪贴板 代码:SC_HANDLE hSCManager, /用 OpenSCManager 打开的句柄LPCTSTR lpServiceN

14、ame, / 服务名称LPCTSTR lpDisplayName, / 显示名称DWORD dwStartType, / 启动方式LPCTSTR lpBinaryPathName, / 程序路径其它直接赋 0 或 NULL 就可以了例如下面的代码可以创建一个名为 LengFeng 路径为 C:LengFeng.EXE 的自启动服务 复制内容到剪贴板 代码:void CreateServer()SC_HANDLE scm=NULL;SC_HANDLE service=NULL;if(scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE)=NU

15、LL)Printf(“OpenSCManager Error“);service=CreateService(scm,“LengFeng“ ,“LengFeng“ ,SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,“C:LengFeng.EXE“, 0, 0, 0, 0, 0 );if(!service)Printf(“服务创建失败 “);CloseServiceHandle(service);CloseServiceHandle(scm);删除服务更容易些,可以用 D

16、eleteService 来实现 复制内容到剪贴板 代码:BOOL DeleteService( SC_HANDLE hService);SC_HANDLE hService 是我们以前用 OpenService 打开的服务句柄,在删除前注意先用,启动/停止服务中介绍的方法停止正在运行的服务。配置启动方式有时候我们需要对服务的启动方式进行更改,比如 TELNET 改为自动运行,对以存在的服务进行配置可以用 ChangeServiceConfig 来实现,它的原形如下: 复制内容到剪贴板 代码:BOOL ChangeServiceConfig(SC_HANDLE hService / handl

17、e to serviceDWORD dwServiceType, / type of serviceDWORD dwStartType, / when to start serviceDWORD dwErrorControl, / severity if service fails to startLPCTSTR lpBinaryPathName, / pointer to service binary file nameLPCTSTR lpLoadOrderGroup, / pointer to load ordering group nameLPDWORD lpdwTagId, / poi

18、nter to variable to get tag identifierLPCTSTR lpDependencies, / pointer to array of dependency namesLPCTSTR lpServiceStartName,/ pointer to account name of serviceLPCTSTR lpPassword, / pointer to password for service accountLPCTSTR lpDisplayName / pointer to display name);揉揉眼睛仔细看一下,是不是有点面熟?嘿它的参数跟创建服

19、务的 CreateService 就是一样的嘛!这样就好办了我们把需要的地方改掉,不需要的就放个 NULL 或 SERVICE_NO_CHANGE 就行了。为了安全更新配置信息,微软要求在执行 ChangeServiceConfig 之前需要用LockServiceDatabase 来锁定服务数据偶测试了一下,有时候会锁定失败,但仍然可以实现对服务配置的更改。下面的示例代码,可以把上面创建的 LengFeng 服务的启动方式改为 禁止其代码如下: 复制内容到剪贴板 代码:SC_LOCK sclLock;sclLock = LockServiceDatabase(scm);if (sclLock = NULL)

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。