开机启动和隐藏进程的基本原理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
开机启动和隐藏进程的基本原理

开机启动和隐藏进程的基本原理 摘要 开机启动和隐藏进程作为两种程序设计基本技术为病毒程序广泛使用,本文在开机启动和隐藏进程代码实现的基础上对实现所用到的相关技术原理进行介绍。具体涉及到的相关技术包括服务的创建,进程快照的获取,以及进程的注入。本文采用VC6.0为编译环境,通过代码和说明相结合的方式对三种技术进行阐述。 关键词: 服务 进程快照 进程注入 1 用C语言编写windows服务实现开机启动 开机启动的方法有很多种,包括写注册表,写入启动配置文件,复制到启动目录,写成驱动程序,注册服务等,笔者的程序采用windows服务实现开机启动。服务的编写有多种方式,包括用C语言编写,用atl模板编写,以及用托管C++进行编写。为了更好地理解服务创建的基本原理,笔者采用了C语言编写服务。下面具体阐述C语言编写服务的4个步骤。 1.1 主函数的创建 主函数的创建很简单,具体代码如下: void main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = MemoryStatus; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; StartServiceCtrlDispatcher(ServiceTable); } 由于每个程序可能包含多个服务,因此需要有一个服务列表保存程序所用到得服务信息,SERVICE_TABLE_ENTRY就是这样一个列表,每一个列表项包含了服务名称(lpServiceName)和服务入口函数(lpServiceProc)两个属性。服务列表的最后一项的两个属性必须设置成NULL。在这里我们引入一个新的概念,即服务控制管理器(SCM),作为一个管理系统服务的进程。SCM等待某个进程的主线程调用StartServiceCtrlDispatcher函数,将分派表传递给ServiceCtrlDispatcher。该分派器启动一个新的线程,此线程运行每个服务所注册的服务函数(为lpServiceProc属性所指定),同时还负责监视所有服务的执行情况,将控制请求(外部对服务的启动,关闭等控制信息)传递给服务。当分派表中的所有服务执行完以后,startservicectrldispatcher调用返回,然后主线程终止。 1.2 创建ServiceMain函数 Servicemain函数是main函数中服务列表每项所注册的服务函数,该函数是服务的入口点,在这里完成控制处理器的注册(通过RegisterServiceCtrlHandler函数实现,具体代码在笔者的程序中),RegisterServiceCtrlHandler接收两个参数:服务名和指向控制分派器调用函数的指针。控制分派器是一个函数,在创建服务的第三个步骤中给予说明。在此之后通过调用SetServiceStatus函数项SCM报告服务的状态。SetServiceStatus接收ServiceStatus结构体,此结构体给出服务的当前状态,服务处理的请求类型(如开启和关闭服务等)。 1.3 处理控制请求 在ServiceMain函数中注册了控制处理器函数,此函数类似于Windows消息的窗口回调函数,检查SCM发送了何种请求,并针对每个不同请求采用不同的行为。如SERVICE_STOPPED请求对应于用户停止服务时产生的行为。在响应请求后需要调用SetServiceStatus向SCM报告服务状态。 1.4 安装和配置服务 进入命令行运行sc create 服务名 binpath= 服务路径,即注册服务,运行sc delete 服务名即完成了服务删除,运行 sc config 服务名start= auto/demand 即完成服务类型的选择。 1.5 采用C语言编写的本程序框架说明 本程序在main函数中实现了服务的安装,为了实现程序的开机启动,需要把服务类型设置为自动启动,此命令需要调用dos指令 sc config 服务名start=auto 执行。笔者在程序中通过调用shellexecute方法执行sc.exe进程实现了服务的安装和自动运行。不需要在cmd下对服务进行配置。 2 进程的注入 在上面的篇幅中介绍了服务的创建,创建服务并设置类型为自动启动后可以实现程序的开机启动,但是并不能完成进程功能的隐藏。那么应该如何实现进程功能隐藏呢?笔者在这里采用了进程注入的

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档