首页 > 代码库 > 文档翻译第003篇:Process Monitor帮助文档(Part 3,附Process Monitor的简单演示)

文档翻译第003篇:Process Monitor帮助文档(Part 3,附Process Monitor的简单演示)

【导入与导出配置】

        一旦您配置了一个筛选器,您可以使用“工具(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

        读取指定的筛选器和设置文件。

 

【ProcessMonitor脚本编写】

        您可以使用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 <windows.h>
#include <tchar.h>
#include <stdio.h>

#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;

}


【附:ProcessMonitor的简单演示】

        为了简单演示一下本软件的功能,我将《反病毒攻防研究第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”。

图1 筛选器设置

        运行“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的使用方法,这款软件更多的功能有待于大家去发掘。希望读者朋友能够将我的文章作为起点,不断学习,从而成为反病毒领域的专家。

文档翻译第003篇:Process Monitor帮助文档(Part 3,附Process Monitor的简单演示)