0

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

我现在要做的是挂钩进程并阻止 service_A 的启动 -> service_B 将无法启动。

现在我需要一个解决方案来解决我在没有做钩子的情况下启动进程的情况-> service_B 启动并且由 service_A 完成,所以我假设它在某种内核级别上?有没有办法通过 WinAPI 做到这一点?我可以访问的东西:普通应用程序可以访问的所有内容 + 获取我所针对的进程所拥有的 SC 管理器的句柄。

感谢您的任何帮助/建议

4

1 回答 1

1

好的,场景是:

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

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

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

  • 使用禁用 Service_BChangeServiceConfig
  • 将 service_B 可执行文件更改为您控制的可执行文件,它会立即自行停止(使用相同的 API)

所以具体来说:

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

于 2013-07-25T09:06:20.627 回答