我有一个问题: 有一个启动服务的进程,我们称它为 service_A,然后启动另一个服务 service_B。 我需要禁用此 service_B,因为它限制了我的系统/程序。
我现在做的是 Hook 进程并阻止 service_A 的启动 -> service_B 不会启动。
现在我需要一个解决方案来解决我启动进程而不做 Hook 的情况 -> service_B 启动并且由 service_A 完成所以我假设它在某种内核级别? 有没有办法通过 WinAPI 做到这一点? 我可以访问的内容:普通应用程序可以访问的所有内容 + 获取我的目标进程所拥有的 SC 管理器的句柄。
感谢任何帮助/建议
最佳答案
好的场景是:
- 您正在以管理员身份运行。
- 您启动 Process1,您可以控制它的执行环境、注入(inject)线程等,并使用调试 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,因此您可以将代码注入(inject)该服务以防止它再次启动 Service_B。
关于c++ - 终止已由另一个服务启动的服务(内核级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835888/