首页 > 解决方案 > 如何使 Windows 服务难以停止?

问题描述

我致力于为儿童开发 Windows 生产力和监控工具。我尝试创建一个 C# Windows 服务,尽可能让用户难以停止。如果用户不是管理员,这很容易 - 服务无法停止。问题是当用户具有管理员权限时。不幸的是,情况往往如此,因为孩子们拥有管理员权限,因此他们可以自己安装应用程序和游戏。

目前我的服务在本地系统下运行并在启动后自动启动。理想情况下,该服务应该仅通过软件卸载、重新安装或 Windows 关闭或重新启动等来停止。

现在我使用某种黑客/解决方法。我创建了两个服务,它们定期(每 1-2 秒)互相检查另一个服务是否仍在运行,并在没有时重新启动它。这是一个丑陋的解决方案,绝对不是万无一失的。如果您的速度足够快,则可以停止服务,并且可能会在卸载或计算机重新启动过程中导致问题。这就是为什么我正在寻找更好的解决方案。

最好的情况是我想要类似于防病毒软件服务的行为,即使管理员也无法停止。我知道这是不可能的。我意识到他们可能有一些来自微软行业协作计划的特殊 API 权限。但我不想走这么远。我认为这有点矫枉过正。我不从事防病毒应用程序。

我知道管理员用户总是能够找到停止进程或服务的方法。我只是想实现一些至少可以在大多数常见的“儿童”攻击中幸存下来的东西。或者至少,杀死服务以使用户最终放弃会是很多痛苦或工作。

如何使服务难以停止?

非常感谢您的建议。

标签: c#windowswinformsserviceadmin

解决方案


没有进入关于这个的辩论......

程序可以尝试让自己更难被杀死(拒绝 PROCESS_TERMINATE 访问,拒绝 PROCESS_CREATE_THREAD 访问,这样人们就不能 CreateRemoteThread(EndProcess),拒绝 PROCESS_VM_WRITE 所以人们不能乱写你的堆栈并让你犯双重错误,拒绝 PROCESS_SUSPEND_RESUME,所以他们可以' t 暂停你),但最终你无法阻止他们,比如说,提升到调试权限,调试你的进程,以及将 EIP 移动到“ExitProcess”。

最终,一切都是可以杀死的。

您可能想阅读以下内容:

http://csharptest.net/1043/how-to-prevent-users-from-killing-your-service-process/

https://blogs.msdn.microsoft.com/oldnewthing/20040216-00/?p=40603/


推荐阅读