-2

我正在制作一个安全软件,它是一个家长控制监控系统,我不希望任何用户/管理员或程序杀死我的进程。

我试过使用SetSecurityInfo(),但没有奏效。然后SetKernelObjectSecurity,但这也没有达到我想要的效果。

我该怎么做?

我也很想对提供的任何代码有一个清晰的解释。

编辑:如果是这样,防病毒程序是如何做到的???你能帮我么。我是 WINAPI 的新手,我想知道一些简单的事情......很抱歉给你们带来麻烦,但至少你可以给我看一些“看门狗”进程或其他东西的代码。. .

4

4 回答 4

6

这不是由进程本身控制的,当然也不是由它调用一个神奇的 API 函数来控制的。如果是这样,所有恶意软件都会将自己设置为“无法杀死”并完全控制您的系统。相反,它是可执行文件的安全属性——特别是“终止”权限。

您可以通过下载Process Explorer 自行探索

  1. 打开进程的属性
  2. 切换到“安全”选项卡
  3. 点击“权限”按钮
  4. 点击“高级”按钮
  5. 选择所需的用户或组
  6. 更改“终止”权限的设置。

系统进程对除 SYSTEM 用户之外的所有用户都有“终止”权限。这就是为什么即使管理员也会收到“拒绝访问”消息的原因,因为他们缺乏系统进程的“终止”权限。

当然,即使正确设置此属性也不会使进程“无法杀死”。它只会让它变得更加困难。网上有很多软件可供免费下载,允许用户终止此类进程,任何具有 Windows 安全模型基本知识的人都可以绕过它,甚至不需要特殊软件。

而这些对于家长控制软件来说都没有多大意义。您应该使用 Windows 安全模型来发挥自己的优势,而不是试图与之对抗。以管理员身份安装软件(即父母的帐户),然后为孩子设置一个受限用户帐户。受限用户帐户将无法终止您的进程,因为它们没有必要的权限。如果管理员想要杀死你的进程,那么你应该让他们,而不是给他们一些虚假的“拒绝访问”头痛。

于 2013-07-05T09:03:22.897 回答
1

首先,让我们明确这是不可能的。但是,你可以让它变得更难。

此外,我正在添加“Code Gray”所写的内容:

  1. 您可以使用另一个进程作为看门狗,并且您的进程也监视看门狗(循环看门狗),因此如果你们中的一个被终止,它会重新运行另一个。您可以通过在其中任何一个有机会启动另一个进程之前杀死您的进程和看门狗来绕过它。

1a。攻击者可以冻结进程而不是终止它,因此(1)不起作用,因此您可以每 N 秒相互“ping”一次,如果 ping 丢失,则出现问题(不知道如何恢复它,取决于产品)。

  1. 如果您是服务,则可以设置窗口以在服务关闭后恢复服务。

  2. 只是一个想法,我不会在产品中这样做。您可以 API-hook 一个重要进程中的一个重要函数(一个被大量调用的函数)。每次调用该函数时,检查您的进程是否启动,如果没有,请重新启动!:-P。

  3. 另一个疯狂的想法(我不会在产品中这样做!!!),编写驱动程序并为您的进程寻找终止事件。如果有人终止了您的进程,则会导致蓝屏!那会告诉他们的!8-P

祝你好运!

于 2013-07-05T11:43:25.870 回答
1

不,这是不可能的。不管你做什么,我总能把机器关掉。

于 2013-07-05T09:01:47.470 回答
0

在内核模式下挂钩 NtTerminateProcess 可能会对您有所帮助。PS: Hook 也是 NtTerminateThread,因为我记得有一个版本的 NOD32 杀毒软件有一个愚蠢的错误,当杀死进程被拒绝时,但可以杀死所有线程。:-)

于 2013-07-07T19:34:22.130 回答