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。所以,我有两个问题:
您知道如何改编此代码(或其他方法),使其也适用于 XP 和 8 吗?
如何让用户在阻止他们执行一次后终止进程?我想包括一个这样的选项(复选框):"Prevent users from killing application" 可以检查或不检查。
顺便说一下,我不会创建任何类型的病毒、恶意软件、间谍软件等
你不能,有一个很好的理由:即使你没有创建恶意软件,如果你有可能,那么恶意软件作者也有可能。
此外,归根结底,计算机的所有者拥有计算机,并对计算机的运行方式拥有最终决定权。 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 的规范答案:
简短版本:
- Pre-NT RegisterServiceProcess 技巧 - 将您的进程标记为 “关键系统服务”
- 进程命名技巧 - TaskMgr 拒绝终止名为
rpcss.exe
的进程
- 保持活动进程 - 两个进程不断相互重新启动
- 用户模式挂钩 TerminateProcess 通过加载的 DLL - 阻止调用以终止您的进程
- 通过注入线程的用户模式挂钩 TerminateProcess - 阻止调用以终止您的进程
- 内核模式调用挂钩 - 从驱动程序接管内核中对 TerminateProcess 的任何调用
- 直接内核对象操作 (DKOM) - 修改内核进程列表,使您的进程不可见
- 调试器技巧 - 如果你调试自己的进程,它就不会被杀死
- Windows Protected Services - OS 使进程无法终止的特性
- 工具操作 - 直接修改 TaskMgr、Process Explorer、pskill、taskkill 二进制文件
是的,防病毒、反恶意软件和 DRM 软件不应该能够保护自己免受获得管理权限的恶意软件的侵害。但是 Microsoft、McAfee、Cylance、WildVine 和其他公司都在这样做 - 并且 Microsoft 认可并支持受保护的服务。所以我们到了。
下面的代码可以防止应用程序通过 Windows 任务管理器被杀死:
SetSecurityInfo(OpenProcess(PROCESS_ALL_ACCESS, False, GetCurrentProcessID),
SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @ACL, nil);
这个问题只适用于Windows 7。所以,我有两个问题:
您知道如何改编此代码(或其他方法),使其也适用于 XP 和 8 吗?
如何让用户在阻止他们执行一次后终止进程?我想包括一个这样的选项(复选框):"Prevent users from killing application" 可以检查或不检查。
顺便说一下,我不会创建任何类型的病毒、恶意软件、间谍软件等
你不能,有一个很好的理由:即使你没有创建恶意软件,如果你有可能,那么恶意软件作者也有可能。
此外,归根结底,计算机的所有者拥有计算机,并对计算机的运行方式拥有最终决定权。 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 的规范答案:
简短版本:
- Pre-NT RegisterServiceProcess 技巧 - 将您的进程标记为 “关键系统服务”
- 进程命名技巧 - TaskMgr 拒绝终止名为
rpcss.exe
的进程
- 保持活动进程 - 两个进程不断相互重新启动
- 用户模式挂钩 TerminateProcess 通过加载的 DLL - 阻止调用以终止您的进程
- 通过注入线程的用户模式挂钩 TerminateProcess - 阻止调用以终止您的进程
- 内核模式调用挂钩 - 从驱动程序接管内核中对 TerminateProcess 的任何调用
- 直接内核对象操作 (DKOM) - 修改内核进程列表,使您的进程不可见
- 调试器技巧 - 如果你调试自己的进程,它就不会被杀死
- Windows Protected Services - OS 使进程无法终止的特性
- 工具操作 - 直接修改 TaskMgr、Process Explorer、pskill、taskkill 二进制文件
是的,防病毒、反恶意软件和 DRM 软件不应该能够保护自己免受获得管理权限的恶意软件的侵害。但是 Microsoft、McAfee、Cylance、WildVine 和其他公司都在这样做 - 并且 Microsoft 认可并支持受保护的服务。所以我们到了。