如何查找对任务管理器隐藏的进程

信息安全 过程
2021-08-23 20:28:09

我读过你可以从任务管理器中隐藏进程,例如here

我看过一些关于使用 rootkit 的隐藏键盘记录器的帖子,但事实就是如此。

是否有工具或方法可以查看正在运行的进程,即使它们已被隐藏?

4个回答

这实际上取决于该过程是如何隐藏的。如果某些 Windows API 函数被挂钩,那么使用这些函数的进程管理器将看不到该进程。所以它取决于试图隐藏的特定软件以及试图找到它的监控软件。无论您使用哪个监控程序,都不能保证找到所有正在运行的进程。话虽如此,那里有几个很好的工具。

SysInternals Suite有多个不同的监控程序。从 GUI 的角度来看,Process Explorer 非常好。它还链接到 VirusTotal,让您知道它看到的任何当前正在运行的进程是否已知是恶意的。Procmon 非常适合用于进程监控。它基于 Windows API 文件/注册表/网络函数调用的输出。缺点是输出量很大,你通常必须知道你在寻找什么。但是,如果隐藏进程正在访问注册表、文件或通过网络进行通信,则会在此处显示。

有一个名为YaProcmon (Yet Another Process Monitor)的开源监视器,它具有专门寻找进程隐藏机制并尝试公开它们的功能。

Sysinternals 进程浏览器是您的朋友这将向您显示比您从任务管理器中习惯的更多信息,包括不可见的任务。

在此处输入图像描述

我知道一个进程,一个真正的游戏,它隐藏了任何不是 x2.exe 的进程,这有点困难,因为任何试图通过图像名称通过 .NET Framework 运行的进程都不起作用,甚至 FindWindow当它需要一两分钟才能真正“拥有”一个窗口时。这使得图像名称检测成为唯一的方法,但问题是绕过隐藏在内核级别或其他东西上。

因此,长话短说,有一些方法可以将您的进程隐藏在诸如 Sysinternals 工具之类的东西中,但不适用于 Windows 任务管理器,诀窍是找到一个在更“内核”级别上绕过它的 API。

答案是通过Volatility

Process Explorer只能查看/查找进程列表中的进程,该列表是位于内存某处的双向链表。Process Explorer 知道第一个节点的位置(或具有指向其中一个节点的指针),并从该节点遍历列表并找到“未隐藏”的进程。

任务调度器不使用这个列表来调度任务,而是使用另一个列表(应该是线程列表)。

然而,当一个进程隐藏自己时,它只是简单地删除它与前一个和下一个节点的链接并保留在内存中hidden由于它只是将自身从进程列表中删除,而不是线程列表,因此它将继续运行而不可见。

每个进程都有一个特定的类结构,就像一个c带有许多参数的简单类。

Volatility 搜索整个内存并找到内存中process class的结构以及双向链表(即进程列表)。

所以输出是内存中的所有进程,包括currect,killedhidden进程。

请注意,我正在为隐藏进程寻找一个更简单的程序,但由于我看不到答案的波动性,我觉得我必须回答。