我正在制作一个家长控制监控系统的安全软件,我不希望任何用户/管理员或程序杀死我的进程。
我已尝试使用SetSecurityInfo()
,但这不起作用。然后SetKernelObjectSecurity
,但那也没有做我想要的。
我该怎么做?
我也希望能够清楚地解释所提供的任何代码。
编辑:如果是这样,防病毒程序如何做? 你能帮我么。我是WINAPI的新手我想知道一些简单的事情......很抱歉给你们带来麻烦,但至少你们可以向我展示一些“看门狗”过程的代码。 。 。
答案 0 :(得分:5)
这不是由进程本身控制的,当然也不是由它调用一个神奇的API函数。如果是这样的话,所有恶意软件都会将自己设置为“不可杀戮”并完全打开您的系统。相反,它是可执行文件的安全属性 - 特别是“终止”权限。
您可以通过下载Process Explorer:
自行探索系统进程向SYSTEM用户以外的所有用户拒绝“终止”权限。这就是为什么即使管理员收到“拒绝访问”消息,因为他们缺少系统进程的“终止”权限。
当然,即使正确设置此属性也不会使该过程“不可杀戮”。这只会让它变得更加困难。有许多软件available online for a free download允许用户杀死此类进程,任何具有Windows安全模型基本知识的人都可以在不需要特殊软件的情况下解决它。
对于家长控制软件而言,这一点都没有多大意义。您应该使用Windows安全模型,而不是尝试使用它。以管理员身份(即父母的帐户)安装软件,然后使用受限用户帐户设置子(ren)。受限制的用户帐户将无法终止您的进程,因为他们没有必要的权限。如果管理员想要杀死你的进程,那么你应该让他们,而不是给他们一些虚假的“拒绝访问”的头痛。
答案 1 :(得分:1)
不,不可能。无论你做什么,我都可以随时关闭机器。
答案 2 :(得分:0)
首先,让我们说清楚它是不可能的。 但是,你可以让它变得更难。
此外,“Code Grey”写道我正在补充:
1a上。攻击者可以冻结进程而不是终止它,因此(1)不起作用,所以你可以每N秒“ping”一次,如果缺少ping,就会出错(不知道如何恢复它,取决于产品。)
如果您是服务,可以设置窗口以在服务停止后恢复服务。
只是一个想法,我 不会 在产品中执行此操作。您可以在一个重要的进程(一个被调用很多的函数)中API挂钩一个重要的函数。每次调用该函数时,检查您的进程是否已启动,如果没有,请重新启动! :-P。
另一个疯狂的想法(我不会在产品中做!!!),编写驱动程序并为您的流程寻找终止事件。如果有人终止你的过程,导致蓝屏!那将显示他们! 8-P
祝你好运!
答案 3 :(得分:0)
在内核模式下挂钩NtTerminateProcess可能对您有所帮助。 PS:Hook也是NtTerminateThread,因为我记得有一个版本的NOD32防病毒软件,当杀死进程被拒绝时,杀死所有线程是可能的。 : - )