如何防止任务管理器杀死我的程序?

问题描述 投票:0回答:6

有什么方法可以保护我的 Delphi 应用程序不被 Windows 任务管理器(或其他类似 Process Explorer)杀死?

我认为 Windows 消息可以做到这一点(通过执行挂钩并拦截 TerminateProcess 消息)。

我想要一个这种保护的例子。卡巴斯基反病毒套件是这样的;我们无法在任务管理器中结束他们的进程。

windows delphi process message taskmanager
6个回答
14
投票

正如 Kornel 所说,对用户隔离的进程有操作系统级别的保护。但一般来说,没有办法阻止您的进程被有权执行此操作的用户终止。并且用户有权终止以该用户身份运行的进程。

即使您想以 SYSTEM 身份运行它,您也无法使用此进程与登录用户进行交互。您需要将其作为服务运行,并且它没有 GUI。您可以尝试其他方法,例如将 DLL 加载到像 Explorer.exe 这样的进程中,用户不会终止,因为他们不想这样做,但这只是滥用行为。

如果开发人员只能编写无法终止的应用程序,这对最终用户来说将是一个非常糟糕的情况。如果这是一个内部应用程序,您可以检查服务器故障,看看是否有某种方法可以通过组策略来实现它。


11
投票

像卡巴斯基这样的 AV 程序可能使用驱动程序并使用钩子来防止终止。 在您的情况下,我建议在进程上设置 ACL,这可以防止任务管理器或命令行工具终止(如果用户没有调试权限)。当然,用户始终可以使用 Process Explorer 等工具,获得进程的所有权,设置新的 ACL 并终止。

如果用户不是管理员,那么在不同的用户上下文中运行该进程就足够了(例如从服务启动它)。

使用 Jedi Windows Security Library 设置进程 ACL 非常简单,如本示例所示。


5
投票

这是一个非常糟糕的主意。如果您的程序在其他人的计算机上运行,那么它是在他们的财产上,而不是您的财产上,并且需要表现得像他们家里的客人一样。这意味着您不会表现得好像您拥有该位置,并且您当然不会告诉计算机的所有者他不能用自己的财产做什么,例如终止他不想运行的任务。如果您这样做,那么您的程序并不比恶意软件好,并且很可能被视为恶意软件。


3
投票

我认为你问错了问题。

您试图以错误的方式解决“如果在与服务器聊天过程中连接被终止怎么办”问题。答案是不是拒绝进程终止”,而是“预见连接问题并编写错误回退代码”!

为什么?显然,连接终止可能是由于网络问题(您不能拒绝用户从网络上拔下计算机)而不是客户端终止!

为什么不能捕获TerminateProcess?

如果您担心应用程序崩溃 - 只需使用应用程序重新启动和恢复 API


0
投票

最简单的方法:你可以启动2个进程,让它们互相“看”。
如果其中一个进程已关闭,请让另一个进程重新启动它。它将防止新手(正如你所说)杀死该进程。

抱歉,但我认为您的“服务器/客户端应用程序”具有特洛伊木马/后门功能。 “客户端应用程序发送一些有用的数据”,“不可杀死的进程”(在您的评论中)对我来说太可疑了。


-1
投票

创建NT-service项目,服务进程不能用Process Manager杀死,而是由内部服务管理器控制。

© www.soinside.com 2019 - 2024. All rights reserved.