618年中大促 【洞察眼】2024年618优惠活动的相关通知 查看详情

使用ProcMon观察文件系统行为

本文将为你介绍 使用ProcMon观察文件系统行为 的详细方法

分类
其他
版本
3.7.83
阅读时长
5-10min

开始

ProcMon是适用于 Windows 的高级监视工具,可显示实时文件系统、注册表和进程/线程活动。访问 Process Monitor – Sysinternals | Microsoft Learn 下载最新版本的ProcMon。使用管理员权限,在64位操作系统上运行ProcMon64.exe,在32位操作系统上运行ProcMon.exe。此外,初次使用ProcMon时,会监控所有事件(文件系统、注册表、网络、进程\线程等),这里我们只介绍观察文件系统的行为。因此,点击关闭红框中的按钮,只开启绿框中的按钮(文件系统)

使用ProcMon观察文件系统行为(图1)

 

基础操作

菜单栏中,文件菜单(File)里有一些非常有用的基础操作:

Capture Events – 你可以通过这个菜单来启用或停止监控行为;

Save… – 当你完成事件捕获后,你可以通过这个菜单来保存ProcMon日志(.PML),以提供给我们分析;

Open… – 打开一个ProcMon日志文件;

此外,还有几个快捷键也经常用得到:

CTRL+X – 清空当前展示的事件;

CTRL+L – 打开筛选器;

 

筛选器

筛选器是ProcMon的一个强大的特性。你可以通过筛选器从大量的事件中,筛选出你感兴趣的事件。

使用ProcMon观察文件系统行为(图2)

比如,你可以添加以下条件:

ProcessName is winword.exe then include

Path contain desktop then include

那么,就会展示Word操作文件路径中包含 “desktop” 字符串的事件。常用的属性有:PID(进程ID)、Process Name(进程名称)、Path(文件路径)等。当然,你也可以选择排除(exclude)符合特定条件的事件。

 

调整过滤器高度(Altitude)

ProcMon捕获文件系统事件是通过将一个文件过滤驱动插入到操作系统的文件系统过滤栈上实现的。简单来说,你可以理解操作系统中有很多不同作用的文件过滤驱动(比如:杀毒软件、加密软件等),他们是按照一个高度(Altitude)属性进行排序。当一个应用程序执行文件系统的相关操作时,这些驱动被按照高度值从高到低的顺序进行调用。洞察眼文档加密驱动位于FSFilter Encryption(140000-149999)组中,你可以理解是一个高度值适中的位置。详细的分组和高度值,可参考这篇文章Load order groups and altitudes for minifilter drivers – Windows drivers | Microsoft Learn

调整ProcMon的高度,可以决定ProcMon能捕获到什么样的事件。举个例子,如果ProcMon的高度高于洞察眼文档加密驱动的高度,那么ProcMon可以观察到应用程序发送给洞察眼的请求;如果ProcMon的高度低于洞察眼的高度,那么ProcMon可以观察到洞察眼发送给文件系统的行为。通常,ProcMon位于两个不同位置时捕获到的事件,对于我们分析问题都是非常重要的。

ProcMon的默认高度385200,高于洞察眼位于的FSFilter Encryption(140000-149999)组。因此,当你使用ProcMon的默认高度捕获了一些事件后,你还需要将ProcMon的高度调到洞察眼下面,再次捕获一些事件。这就需要你来调整ProcMon的高度。你可以通过下方的注册表位置,修改Altitude,然后重新运行ProcMon.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance

使用ProcMon观察文件系统行为(图3)

 

帮助我们收集ProcMon日志

当我们需要获取ProcMon日志,分析一个特定问题时,请按照以下步骤操作:

  • 在复现特定问题前,启动ProcMon。使用默认高度(385200)来捕获应用程序发送到洞察眼的请求;
  • 打开筛选器窗口,移除ProcMon的默认4个排除(exclude)项

Process Name is System

Operation begins with IRP_MJ_

Operation begins with FASTIO_

Result begins with FAST IO

  • 添加你认为有必要的筛选条件;
  • 保存筛选条件,注意:这些筛选条件当你下次使用时,依然会生效;
  • 停止捕获事件,并CTRL + X清空当前捕获的内容;
  • 重新开始捕获,然后尝试复现你遇到的问题;
  • 当触发现象后,停止捕获,并保存捕获到的日志;
  • 调整ProcMon的高度,让它位于洞察眼下方,然后重新执行一遍上述流程。

最后,将两次捕获到的日志,提供给我们的工作人员。


微信扫一扫联系售前工程师