终止由另一个服务(内核级别)启动的服务

时间:2013-07-24 13:46:18

标签: c++ winapi

我遇到了问题: 有一个启动服务的过程,我们称之为service_A,然后启动另一个服务service_B。 我需要禁用此service_B,因为它限制了我的系统/程序。

我现在所做的是挂钩流程并阻止service_A的开始 - > service_B将无法启动。

现在我需要一个解决方案,当我开始这个过程而不做一个钩子 - > service_B开始了,这是由service_A完成的,所以我假设它在某种内核级别上? 有没有办法通过WinAPI做到这一点? 我可以访问的内容:普通应用程序可以访问的所有内容+抓取我所定位的进程所拥有的SC Manager的句柄。

感谢您提供任何帮助/建议

1 个答案:

答案 0 :(得分:1)

确定方案是:

  • 您是以管理员身份运行。
  • 启动Process1,您可以控制它的执行环境,注入线程等,并使用调试API。
  • Process1使用SCM启动Service_A
  • Service_A使用SCM启动Service_B

鉴于您可以控制Process1,您是否可以利用它来阻止Service_A启动Service_B?

答案是:你不需要这样做。您是以管理员身份运行的!你控制整个机器!

  • 使用ChangeServiceConfig
  • 停用Service_B
  • 将service_B可执行文件更改为您控制的可执行文件,该文件只会立即停止(使用相同的API)

具体而言:

当Process1尝试启动服务时,您将拦截此调用。您将Service_B的定义更改为无操作服务,只需等待几秒钟,然后将服务定义重置为原来的状态,然后退出。然后,您允许Process1继续。它启动Service_A,然后启动您更改的Service_B。您更改的Service_B将服务定义恢复到原来的状态,然后退出。在此期间,您现在知道哪个进程托管Service_A,以便您可以将代码注入该服务,以防止它再次启动Service_B。