首页 运维 网络学院 查看内容

替换服务但原服务不失效的方法

2009-3-31 11:19 550 0

摘要:   云舒   替换系统服务是做后门的一个好办法,ring3实现,稳定可靠,也具有一定的隐蔽性。这里简单说说怎么样使用自己的服务替换系统服务,并且保证原来真实的系统服务不失效。   替换服务,主要有...
关键词: 服务 ServiceMain 一个 里面 一下 函数 系统 svchost 办法 线程

  云舒   替换系统服务是做后门的一个好办法,ring3实现,稳定可靠,也具有一定的隐蔽性。这里简单说说怎么样使用自己的服务替换系统服务,并且保证原来真实的系统服务不失效。   替换服务,主要有两种常见的办法,第一是修改注册表中对应服务的可执行文件路径,第二个是直接替换服务文件。第一个办法的缺陷是修改注册表,第二个是需要关闭SFC。而他们共有的缺点是替换了服务之后原来的老服务就失效了,以至没法替换系统关键服务。服务的执行是从ServiceMain函数开始的(当然也可以自己定义一个别的名字), 因此如果在我们的服务执行的时候,在我们的ServiceMain里面,顺便执行一下真实服务的ServiceMain函数,老服务就不会失效了。最方便 这么做的,莫过于老服务是依附于svchost启动的dll了。LoadLibrary一下,再GetProcAddress一下,再执行一下就好了。   具体的代码实现很简单,我就不贴了。需要注意的是RegisterServiceCtrlHandler函数的调用,一个服务只能调用 一次,原服务的ServiceMain里面一定会调用的,因此我们自己的ServiceMain里面就不用写了,反而代码变得更少,更干净。另外一个注意 点,服务一般都是要做成死循环的,所以要在调用老服务的ServiceMain之前,创建线程来执行自己的服务主功能。   有意思的是,这样替换了依附svchost的服务之后,如果线程里面拒绝退出,服务还是可以停掉,但是即使停掉了,我们自己的dll却还是在svchost的空间中执行。   关于服务的基础知识,可以参见http://www.vckbase.com/document/viewdoc/?id=1474和bingle的http://www.xfocus.net/articles/200308/601.html。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部