Delphi 7 - 防止用户在任务管理器中终止进程

Delphi 7 - Prevent User From Killing Process in Task Manager

下面的代码可以防止应用程序通过 Windows 任务管理器被杀死:

SetSecurityInfo(OpenProcess(PROCESS_ALL_ACCESS, False, GetCurrentProcessID),
  SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @ACL, nil);

这个问题只适用于Windows 7。所以,我有两个问题:

顺便说一下,我不会创建任何类型的病毒、恶意软件、间谍软件等

你不能,有一个很好的理由:即使你没有创建恶意软件,如果你有可能,那么恶意软件作者也有可能。

此外,归根结底,计算机的所有者拥有计算机,并对计算机的运行方式拥有最终决定权。 This is a deliberate design decision in Windows, Windows 团队的主要开发人员之一 Raymond Chen 表示。如果您的软件试图立即采用该基本功能,那么无论您是否有意,计算机的所有者都会将您的软件视为恶意软件。

你真的应该听听发表评论的人的意见。人们不会无缘无故地做事。如果您的用户正在终止进程,问题不在于 "the process can be killed when it shouldn't be";问题是 "your process is doing something that makes people want to kill it." 你遇到的是社会问题,而不是技术问题,经验表明,试图通过技术手段解决社会问题 总是 只会让事情变得更糟。

尝试与您的用户交谈,弄清楚是什么原因让他们非常想终止您的进程,看看您是否可以解决问题并改善他们的体验。但是不要试图让进程无法终止。这是一场你不想参加的军备竞赛,因为最后你总是输家。

你可以的。

查看关于安全性 StackExchange 的规范答案:

简短版本:

  1. Pre-NT RegisterServiceProcess 技巧 - 将您的进程标记为 “关键系统服务”
  2. 进程命名技巧 - TaskMgr 拒绝终止名为 rpcss.exe
  3. 的进程
  4. 保持活动进程 - 两个进程不断相互重新启动
  5. 用户模式挂钩 TerminateProcess 通过加载的 DLL - 阻止调用以终止您的进程
  6. 通过注入线程的用户模式挂钩 TerminateProcess - 阻止调用以终止您的进程
  7. 内核模式调用挂钩 - 从驱动程序接管内核中对 TerminateProcess 的任何调用
  8. 直接内核对象操作 (DKOM) - 修改内核进程列表,使您的进程不可见
  9. 调试器技巧 - 如果你调试自己的进程,它就不会被杀死
  10. Windows Protected Services - OS 使进程无法终止的特性
  11. 工具操作 - 直接修改 TaskMgr、Process Explorer、pskill、taskkill 二进制文件

是的,防病毒、反恶意软件和 DRM 软件不应该能够保护自己免受获得管理权限的恶意软件的侵害。但是 Microsoft、McAfee、Cylance、WildVine 和其他公司都在这样做 - 并且 Microsoft 认可并支持受保护的服务。所以我们到了。