c++ - 终止已由另一个服务启动的服务(内核级)

标签 c++ winapi

我有一个问题: 有一个启动服务的进程,我们称它为 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/

相关文章:

c++ - 这个移动构造函数是不必要的吗

python - win32api & pyhook - 如何获取用户的打字语言?

windows - 我们如何使用 Win32 程序检查文件是否存在?

c++ - map 迭代器不可取消引用

c++ - 可选错误处理

go - 如何管理使用 Win32 API(记事本、Word、Outlook、Chrome 等)打开的应用程序窗口

c++ - 有没有更好的方法来创建这个游戏循环? (C++/Windows )

vba - 控制ms以连续形式 Access 滚动条

c++ - 请求从 'int' 到非标量类型 'Point"的转换

c++ - 如何打印 '\n' 而不是换行符?