一旦您配置了一个筛选器,您可以使用“工具(Tools)”菜单中的“保存筛选器(SaveFilters)”菜单项将其保存。Process Monitor将您所保存的筛选器添加到“读取筛选器(Load Filter)”菜单,便于您能够方便地访问。您也可以选择“工具(Tools)”菜单中的“管理筛选器(Organize Filters)”来打开管理筛选器对话框,以改变筛选器的显示顺序。您可以使用管理筛选器对话框来重命名已保存的筛选器,也能很简单地以一定的格式导出筛选器,这样您以后就可以在其它系统中使用管理筛选器对话框来重新导入。
您也可以使用“文件(File)”菜单中的“导出配置(ExportConfiguration)”菜单项来导出整个Process Monitor的配置信息,包括筛选器、列目选择、列目的顺序和大小,日志文件设置以及调试帮助文件路径配置信息到一个Process Monitor的配置文件中(.PMC)。使用“文件(File)”菜单中的“导入配置(Export Configuration)”菜单项可以读取一个保存的配置文件或者使用“/LoadConfig”命令行选项。
Process Monitor提供了一些命令行选项:
/Openlog<已保存的PML日志文件>
令Process Monitor打开并读取指定的日志文件。
/Backingfile<日志文件名>
令Process Monitor创建并使用指定的文件名作为日志文件。
/Pagingfile
将事件保存在分页文件中。
/Noconnect
当这个标志位出现时,ProcessMonitor就不能自动开始日志活动。
/Nofilter
在启动时清空筛选器。
/AcceptEula
自动绕过许可并绕过EULA对话框。
/Profiling
打开线程分析事件类。
/Minimized
使Process Monitor在启动时将其窗口最小化显示在任务栏上。
/WaitForIdle
等待Process Monitor的一个实例,直至其准备完毕。
/Terminate
终止Process Monitor的所有实例并退出。
/Quiet
在启动时不使用筛选器选项。
/Run32
使用这个开关可以在64位版本的Windows中运行32位版本的ProcessMonitor,以打开在32位系统中生成的日志。
/HookRegistry
这个开关只能够在32位的Vista和Server 2008中使用,ProcessMonitor使用系统调用钩子以取代注册表回调机制来监视注册表的活动,这就能够令其在这些操作系统上查看Softgrig的虚拟注册表操作。这个选项必须在Process Monitor在系统上第一次运行时使用,并且只能用于SoftGrid应用程序的故障排除。
/SaveAs,/SaveAs1,/SaveAs2
配合/OpenLog来使用这些开关,能够使ProcessMonitor以CSV、XML或PML格式导出一个日志文件。/SaveAs1选项包括以XML格式导出的栈信息,而/SaveAs2选项添加了符号信息。
/LoadConfig
读取指定的筛选器和设置文件。
您可以使用Process Monitor的命令行选项来编写批处理文件。这里的例子为您展示了如何编写批处理文件,使其能够捕获“记事本(notepad.exe)”程序的执行:
set PM=C:\sysint\procmon.exe
start %PM% /quiet /minimized /backingfile C:\temp\notepad.pml
%PM% /waitforidle
start /wait notepad.exe
%PM% /terminate
Process Monitor的第一个调用使用的是start命令,来确保进程与控制台窗口相脱离,这能够使其与最新的命令同时运行。第二个调用使用的是/WaitForIdle命令,它能够令批处理文件暂停,直至第一个实例出现、运行并且捕捉事件活动。最后的调用使用的是/Terminate命令,它告诉第一个实例停止捕捉,将重要的数据保存到备份文件再顺利地退出。
如果您是一位应用程序开发人员,那么将您自己的调试输出包含在Process Monitor的事件流中会非常有用,这样您就可以更好地将应用程序的操作与其它的事件相关联。Process Monitor允许未经授权的应用程序注入长达2048个字符长度的宽字符串中。以下示例代码展示了如何打开Process Monitor的调试界面并在事件流中写入信息。您在实际编程中无需以空字符作为结尾,尽管示例中是以空字符结尾的。下面的代码示例描述了如何生成Process Monitor的调试输出。John Robbins也编写了帮助类,您可以在您本地或管理应用中方便地添加这些支持,您可以在此下载。
注意:您必须显示分析事件(它被默认的过滤配置所过滤),以查看这些事件。#include
#include
#include
#define FILE_DEVICE_PROCMON_LOG 0x00009535
#define IOCTL_EXTERNAL_LOG_DEBUGOUT (ULONG) CTL_CODE( FILE_DEVICE_PROCMON_LOG, 0x81, METHOD_BUFFERED, FILE_WRITE_ACCESS )
int main()
{
HANDLE hDevice = CreateFile( L"\\\\.\\Global\\ProcmonDebugLogger", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if ( hDevice != INVALID_HANDLE_VALUE ) {
WCHAR text[] = L"Debug out";
DWORD textlen = (wcslen(text)+1) *sizeof(WCHAR);
DWORD nb = 0;
BOOL ok = DeviceIoControl( hDevice, IOCTL_EXTERNAL_LOG_DEBUGOUT, text, textlen, NULL, 0, &nb, NULL );
if ( ok ) {
printf( "wrote debug output message\n" );
} else {
printf( "error 0x%x\n", GetLastError() );
}
CloseHandle( hDevice );
} else {
printf( "error %d opening Process Monitor\n", GetLastError() );
}
return 0;
}
为了简单演示一下本软件的功能,我将《反病毒攻防研究第001篇:自我复制与自删除》与《反病毒攻防研究第002篇:利用注册表实现自启动》这两篇文章中的程序相结合,然后用ProcessMonitor对其行为进行监测。
这里先来总结一下我所编写的“恶意程序”的行为,以便与ProcessMonitor的监测结果相比较:
(1)将自身复制到system32与windows目录下。
(2)将自身添加到注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run中。
(3)映像劫持cmd.exe程序。
(4)删除自身。
接下来,先在计算机中运行Process Monitor v3.10(注:真实病毒应当在虚拟机下运行并监控),此时会弹出“ProcessMonitor Filter”对话框,让我们对筛选条件进行设置。这里我们要监控的程序名称为“Hacked.exe”,将进程名称包含在筛选器中,然后单击“Add”。此时“Hacked.exe”已包含在筛选器中,我们单击“OK”。 运行“Hacked.exe”程序,此时ProcessMonitor已监控到该程序相应的操作,如下图所示:
图2 查看监控结果
图中完整地监控到了整个程序的执行流程。首先可以打开进程树查看一下相关进程的启动情况:
图3 查看进程树
可见“Hacked.exe”自身还启动了cmd.exe程序,那么如果有必要的话,还应当对其进行监控。
这里我是将所有项目的监控都打开了。为了简单起见,我们可以逐个分析,首先令ProcessMonitor只显示文件监控。然后进行查看:图4 查看“Hacked.exe”的自我复制
由监控结果可见,程序将自身复制到了windows以及system32目录下。继续观察:
图5 “Hacked.exe”创建自删除文件
这里创建了DelSelf.cmd文件,并且对其进行了写入操作。至此,我们并未发现“Hacked.exe”有删除自身的行为,那么有必要对cmd.exe进行监控。结果如下:
图6 查看“Hacked.exe”的自删除行为
可见cmd.exe触发调用了SetDispositionInformationFile,用于删除“Hacked.exe”与“DelSelf.cmd”。到这里为止,我们已经分析清楚了“Hacked.exe”的文件行为,接下来分析注册表行为。关闭文件行为按钮,打开注册表监控,进行分析:
图7 注册表项监控
ProcessMonitor已经将相应的注册表项监控到了。在Detail列目中也给出了相应的细节信息,这里不再赘述。
至此,“Hacked.exe”已经分析完毕,可以依据上述分析结果来编写专杀工具。专杀工具的编写已在我的文章中论述过了,这里不再叙述。
以上简单介绍了Process Monitor的使用方法,这款软件更多的功能有待于大家去发掘。希望读者朋友能够将我的文章作为起点,不断学习,从而成为反病毒领域的专家。