如何为Windows编写一个不可杀死的进程?

1 c++ windows

我正在寻找一种编写应用程序的方法.我使用Visual C++ 6.0.

我需要阻止用户通过任务管理器关闭此过程.

ral*_*nja 34

你不能这样做.

  • +1.那就对了.你不应该尝试.它不是您的机器,它属于用户. (16认同)
  • 实际上"你不能这样做"=="你不能这样做":-) (3认同)
  • 那么防病毒软件是如何做到这一点的呢?就像当我从任务管理器终止 avast 进程时,它给我拒绝访问 (3认同)
  • 而且(正如另一个问题所提到的,显然已被删除)它也会阻止Windows关闭. (2认同)
  • 我们只有一个,这是偶然的,没关系.这篇文章很老了,但请查看Mark Russinovich的博客文章"Unkillable Processes" - http://blogs.technet.com/b/markrussinovich/archive/2005/08/17/unkillable-processes.aspx (2认同)
  • 废话.这是Security StackExchange的一个很好的答案,展示了许多方法.http://security.stackexchange.com/questions/30985/create-a-unterminable-process-in-windows (2认同)

Ken*_*nan 18

雷蒙德陈为什么这是一个坏主意:

http://blogs.msdn.com/oldnewthing/archive/2004/02/16/73780.aspx

  • @ ya23:那好吧 - 你会回答:"我怎么能写一个程序来杀死我的妻子?" 提出一个坏主意没什么不对的...... (10认同)
  • 问题是如何做到这一点(也许知道为什么要防止这种情况),而不是关于它是否是一个好主意. (2认同)
  • @ Shog9,提出一个坏主意并没有错,但这样做也不能解决他的问题. (2认同)

Joh*_*lla 16

你可以制作一个不可杀戮的过程,但是当它不可杀戮时它将无法完成任何有用的东西.例如,使进程不可杀死的一种方法是让它向永远无法完成的驱动程序发出同步I/O请求(例如,故意编写有缺陷的驱动程序).在I/O请求完成之前,内核不允许进程终止.

有些人说,你"不能这样做"是不正确的.但你无论如何都不想要.

  • @Foredecker»是的,但这就是为什么我说"它不可能完成任何有用的东西,而它是不可杀戮的". (4认同)
  • +1不傻,只是说"做不到". (2认同)

Joe*_*oey 7

这完全取决于谁不应该杀死这个过程.您通常有一个交互式登录用户.在该上下文中运行该进程将使用户杀死它.这是她的过程所以她可以杀死它,这并不奇怪.

如果您的用户具有有限的权限,您始终可以以其他用户身份启动该过程.用户不能杀死属于另一个用户的进程(管理员除外),这里也不会感到惊讶.

您还可以尝试使用本地系统权限运行您的进程,我认为即使管理员也可以杀死它(即使他可以获得许可,iirc).

但总的来说,这是一个非常糟糕的主意.用户没有拥有该机器的进程.我所知道的计算机上唯一不可杀死的进程是操作系统,这是正确的.你必须确保你不能占用资源(由于你是不可杀戮而无法释放)和其他恶意副作用.通常这样的东西不是正常应用程序的领域,他们应该远离这个原因.


小智 5

这是几十年来的 Win32 常见问题解答。请参阅 Google 网上论坛和 Und。著名方法的板。(挂钩 cs 和其他...)
回答“你做不到”的菜鸟对 Win32 编程一无所知:你可以使用 Win32 api做所有事情...

  • 一切,除了创建无法杀死的进程。如果您使用特殊帐户拒绝访问,则只需使用更高的帐户启动任务管理器即可。如果您有观察程序进程,请终止该观察程序进程。如果您从任务管理器中隐藏,请使用不同的工具,例如进程资源管理器。如果您将其设置为系统进程或设备驱动程序,从而导致整个系统崩溃(例如 ntlogon 等),只需将其删除即可。就像删除病毒或 Rootkit 一样简单。 (3认同)

Sea*_*ney 5

我从恶意软件中学到的东西:

  • 创建一个产生十几个自身的进程
  • 每次您检测到一个丢失(它被杀死)时,都会产生一打。
  • 每个都应该是唯一的进程名称,以便批处理不能轻易地按名称杀死所有进程
  • 依次关闭并重新启动一些进程以保持 pid 变化,这也将防止批量终止