了解进程监视器

今天,在这一期的“极客学校”中,我们将教您进程监视器实用程序如何让您窥探幕后,了解您喜爱的应用程序在幕后到底在做什么-它们正在访问哪些文件,它们使用哪些注册表项,等等。

与我们花了几天时间介绍的Process Explorer实用程序不同,Process Monitor旨在被动地查看计算机上发生的一切,而不是用于终止进程或关闭句柄的主动工具。这就像是查看Windows PC上发生的每个事件的全局日志文件。

想要了解您最喜欢的应用程序实际在哪些注册表项中存储它们的设置吗?想知道服务正在访问哪些文件以及多久一次?想要查看应用程序何时连接到网络或打开新进程?这是一个过程监视器来拯救。

我们现在不再撰写很多注册表黑客文章,但在我们刚开始的时候,我们会使用Process Monitor来找出正在访问的注册表项,然后调整这些注册表项,看看会发生什么情况。如果您曾经想知道某个极客是如何破解出没有人见过的注册表黑客的,那么它很可能是通过Process Monitor实现的。

进程监视器实用程序是通过将两个不同的老式实用程序(filemon和regmon)组合在一起创建的,顾名思义,这两个实用程序用于监视文件和注册表活动。虽然这些实用程序仍然可用,而且它们可能满足您的特定需求,但是使用Process Monitor会更好,因为它可以更好地处理大量事件,因为它的设计目的是这样做的。

还值得注意的是,process Monitor始终需要管理员模式,因为它在幕后加载内核驱动程序来捕获所有这些事件。在Windows Vista和更高版本上,会出现一个UAC对话框提示您,但对于XP或2003,您需要确保您使用的帐户具有管理员权限。

Process Monitor捕获的事件

进程监视器可以捕获大量数据,但它并不能捕获您PC上发生的每一件事。例如,进程监视器不关心您是否移动鼠标,也不知道您的驱动程序是否处于最佳工作状态。它不会跟踪您的计算机上哪些进程正在打开并浪费CPU-毕竟,这是Process Explorer的工作。

它所做的是捕获特定类型的I/O(输入/输出)操作,无论这些操作是通过文件系统、注册表甚至网络进行的。它还将以有限的方式跟踪其他几个事件。此列表涵盖它捕获的事件:

注册表-这可能是创建、读取、删除或查询项。您会惊讶于这种情况发生的频率有多高。 文件系统功能-这可以是文件创建、写入、删除等操作,也可以用于本地硬盘和网络驱动器。 网络流量-这将显示TCP/UDP流量的来源和目的地,但遗憾的是,它没有显示数据,这使得它的用处有点小。 进程资源管理器(Process Explorer)-这些是启动进程、线程启动或退出等进程和线程的事件。在某些情况下,这可能是有用的信息,但通常是您希望在Process Explorer中查看的信息。 分析-这些事件由进程监视器捕获,以检查每个进程使用的处理器时间量和内存使用情况。同样,您可能希望在大多数情况下使用Process Explorer来跟踪这些内容,但是如果需要的话,它在这里很有用。

因此,process Monitor可以捕获任何类型的I/O操作,无论该操作是通过注册表、文件系统甚至网络进行的-尽管没有捕获正在写入的实际数据。我们只是看到一个进程正在向其中一个流写入数据,这样我们以后就可以更多地了解正在发生的事情。

进程监控器界面

当您第一次加载process Monitor界面时,您将看到大量的数据行,更多的数据快速地飞入,这可能会让您不堪重负。关键是至少要对你正在看的东西以及你正在寻找的东西有一些想法。这不是您可以花一天时间轻松浏览的工具,因为在很短的时间内,您将看到数百万行。

您要做的第一件事是将数百万行筛选到您想要查看的更小的数据子集,我们将教您如何创建筛选器,并将重点放在您想要查找的内容上。但首先,您应该了解界面以及实际可用的数据。

查看默认列

缺省列显示了大量有用的信息,但是您肯定需要一些上下文来了解每个列实际包含什么数据,因为其中一些看起来可能像是发生了坏事,而实际上它们是一直在幕后发生的无害事件。下面是每个默认列的用途:

时间-此列非常简单明了,它显示事件发生的确切时间。 进程名称-生成事件的进程的名称。默认情况下,这不会显示文件的完整路径,但如果将鼠标悬停在该字段上,您可以确切地看到它是哪个进程。 PID-生成事件的进程的进程ID。如果您试图了解哪个svchost.exe进程生成了该事件,这将非常有用。这也是隔离单个进程进行监视的好方法,前提是该进程不会重新启动。 操作-这是正在记录的操作的名称,并且有一个图标与其中一种事件类型(注册表、文件、网络、进程)相匹配。它们可能会让人有点困惑,比如RegQueryKey或WriteFile,但我们会尽力帮助您克服困惑。 路径-这不是流程的路径,而是此事件正在处理的内容的路径。例如,如果存在WriteFile事件,此字段将显示正在接触的文件或文件夹的名称。如果这是注册表事件,它将显示正在访问的完整项。 结果-这显示操作的结果,代码如成功或拒绝访问。虽然您可能会自动认为缓冲区太小意味着发生了非常糟糕的事情,但实际上大多数情况并非如此。 细节-通常不会转化为常规极客故障排除领域的附加信息。

您还可以通过转到选项->选择列来向默认显示中添加一些附加列。这不是我们建议您开始测试时的第一站,但是因为我们正在解释专栏,所以它已经值得一提了。

向显示中添加附加列的原因之一是,这样您就可以非常快速地按这些事件进行筛选,而不会被数据淹没。以下是我们使用的一些额外列,但根据情况,您可能会发现列表中的其他一些列也有用处。

命令行-虽然您可以双击任何事件来查看生成每个事件的进程的命令行参数,但快速查看所有选项可能会很有用。 公司名称-此栏有用的主要原因是,您可以简单地快速排除所有Microsoft事件,并将监控范围缩小到Windows以外的所有其他内容。(不过,您需要确保没有使用Process Explorer运行任何奇怪的rundll32.exe进程,因为这些进程可能隐藏着恶意软件)。 父PID-当您对包含许多子进程的进程进行故障排除时,例如Web浏览器或将粗略的东西作为另一个进程不断启动的应用程序,这会非常有用。然后,您可以按父PID进行过滤,以确保捕获所有内容。

值得注意的是,即使列没有显示,您也可以按列数据进行筛选,但是右键单击并筛选要比手动操作容易得多。是的,我们再次提到了过滤器,尽管我们还没有解释它们。

检查单个事件

查看列表中的内容是一次快速查看许多不同数据点的好方法,但这绝对不是检查单个数据的最简单方式,而且列表中只能看到这么多信息。值得庆幸的是,您可以双击任何事件来访问额外信息的宝库。

Default Event选项卡提供的信息与您在列表中看到的基本相似,但会为聚会添加更多信息。如果您正在查看文件系统事件,您将能够看到某些信息,如属性、文件创建时间、写入操作期间尝试的访问、写入的字节数和持续时间。

切换到Process选项卡可以为您提供有关生成事件的流程的大量信息。虽然您通常希望使用Process Explorer来处理进程,但拥有有关生成特定事件的特定进程的大量信息非常有用,特别是如果它发生得非常快,然后从进程列表中消失。这样可以捕获数据。

Stack选项卡有时非常有用,但通常根本没有用。您想要查看堆栈的原因是,这样您就可以通过检查Module列来排除任何看起来不太正确的故障。

例如,假设某个进程不断尝试查询或访问不存在的文件,但您不确定原因。您可以查看Stack选项卡,查看是否有任何模块看起来不正确,然后对其进行研究。您可能会发现一个过期的组件,甚至是恶意软件导致了问题。

或者,您可能会发现这里没有任何对您有用的东西,这也很好。还有很多其他数据需要查看。

关于缓冲区溢出的说明

在我们继续之前,我们想要注意一个结果代码,您将开始在列表中看到很多结果代码,根据您到目前为止对极客的所有了解,您可能会对此感到有点抓狂。因此,如果您开始在列表中看到缓冲区溢出,请不要假设有人试图入侵您的计算机。

缓冲区溢出

是的,许多黑客和恶意软件创建者利用缓冲区溢出漏洞远程或本地侵入组件并获得额外访问权限,但此错误消息实际上内置于Windows API中,其含义完全相反。

Windows API(特别是Process Monitor)中的缓冲区溢出消息实际上意味着客户端应用程序请求了数据,但没有足够大的存储桶来容纳所有数据。因此,服务器做出响应,告诉客户端他们需要更大的存储桶。

在上面屏幕截图的示例中,应用程序查询注册表中的特定值,但告诉Windows API将结果放到内存中的某个位置,该位置太小,无法容纳所有数据。因此,Windows返回消息,让应用程序知道他们需要更大的位置来存放所有数据。仅此而已。

跳转到事件数据路径

所有这些信息真的很棒,但没有人愿意通过手动浏览列表中的每一个位置来进行调查。幸运的是,您可以右键单击项目的路径字段,然后使用跳转到选项快速访问该数据以查看其包含的内容,并尝试找出应用程序首先请求该数据的原因。

注意:您还可以使用联机搜索功能快速搜索进程名称、注册表路径或任何其他字段,这在您不了解某些内容的用途时非常有用。

在上面的示例中,您可以看到我们监视的应用程序正在尝试查看注册表值,因此我们使用了“跳转到”功能,“进程监视器”立即打开了已经聚焦到该注册表项的注册表编辑器。

现在我们知道了,应用程序正在尝试找出我的APPDATA文件夹在哪里,我们知道哪个文件夹是…。这有助于解释正在发生的事情。

在这种情况下,应用程序是管道搜索恶意软件,它通过查询regisry来查找我的用户文件夹,这样它就可以开始处理我Google Chrome配置文件中的文件和文件夹。

筛选Process Monitor捕获的数据

正如我们已经多次提到的,process Monitor提供的筛选器允许您对要捕获的事件进行细粒度控制,这使得您可以更轻松地找出列表中的重要内容。例如,如果您知道您不关心Explorer.exe生成的所有事件,那么明智的做法是将它们过滤掉。

您可以使用上下文菜单和包括或排除功能非常快速地按任何列进行筛选-如果您包括一个项目,则列表将只包含与该特定项目匹配的事件,或您特别包括的任何其他项目,但不会包含任何其他内容。如果排除某个项目,则除与您排除的特定项目匹配的事件外,所有内容都将显示。

在本例中,我们决定包括cltmng.exe进程,现在我们在列表中看到的所有内容都与该进程相关。

您也可以使用菜单中的编辑过滤器选项,或访问菜单的过滤器部分以显示过滤器列表并对其进行编辑。您可以从下拉对话框中选择并按任何可用字段进行匹配,选择是否完全匹配您在框中键入的值,或仅选择“开始于”,或其他一些选项。然后,您可以选择是包括还是排除符合这些条件的事件。

只要别忘了在定义过滤器后单击“添加”按钮,然后再单击“确定”或“应用”,否则您的新过滤器实际上不会被激活。相信我们,这是个常见的错误!

您还可以通过在列表中选择筛选器,然后修改或删除它们来删除或编辑筛选器。

数据太多了吗?尝试删除筛选的事件

如果您确信您拥有正确的过滤器来查看您真正想要查看的内容,则可能需要考虑使用Filter->Drop Filtered Events功能。

这里实际发生的情况是,Process Monitor的实例只显示与筛选器匹配的项目,但其他所有内容仍在后台捕获,这可能是非常短时间后的大量数据-请注意下面示例中的状态栏,我们只运行了几分钟。如果我们打开了Drop Filtered Events选项,它将只捕获我们需要的事件。

不过,使用此功能有一个很大的缺点,那就是如果您意识到对列表进行了过多的过滤,并且希望检查来自另一个进程的事件,则无法取回这些过滤的事件。您将不得不重做您的整个场景,这可能已经太晚了。因此,请确保谨慎使用此选项。

保存转储以供稍后分析

今天的课程还有最后一件事,那就是我们通常不会在任何其他应用程序中突出显示的打开/保存功能,但在这种情况下,它真的很重要。

想象一下,你正在使用某人的一台非常老旧的计算机,你想诊断一个特定的问题,但计算机运行得太慢了,不能一直坐在那里处理它。您只需在他们的计算机上运行Process Monitor扫描,将数据保存到闪存驱动器,然后在速度极快的个人笔记本电脑上加载Process Monitor,然后开始分析可能发生的情况。你甚至可以去咖啡厅从那里进行分析。

当然,您也可以通过运行process Monitor、执行扫描、保存文件,然后将其发送给您进行分析,与他人进行远程对话。那样的话,你甚至不需要亲自去看他们。

下一课

请继续关注明天的课程,在该课程中,我们将整合我们所学到的所有知识,并展示如何在现实世界中使用process Monitor来完成一些有趣的事情。

相关文章