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

【导入与导出配置】

        一旦您配置了一个筛选器,您能够使用“工具(Tools)”菜单中的“保存筛选器(SaveFilters)”菜单项将其保存。Process Monitor将您所保存的筛选器加入到“读取筛选器(Load Filter)”菜单,便于您能够方便地訪问。您也能够选择“工具(Tools)”菜单中的“管理筛选器(Organize Filters)”来打开管理筛选器对话框,以改变筛选器的显示顺序。您能够使用管理筛选器对话框来重命名已保存的筛选器,也能非常easy地以一定的格式导出筛选器。这样您以后就能够在其他系统中使用管理筛选器对话框来又一次导入。

        您也能够使用“文件(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:sysintprocmon.exe
start %PM% /quiet /minimized /backingfile C:	emp
otepad.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
" );

                } else {

                        printf( "error 0x%x
", GetLastError() );

                }

                CloseHandle( hDevice );

        } else {

                printf( "error %d opening Process Monitor
", GetLastError() );

        }

        return 0;

}


【附:ProcessMonitor的简单演示】

        为了简单演示一下本软件的功能。我将《反病毒攻防研究第001篇:自我复制与自删除》《反病毒攻防研究第002篇:利用注冊表实现自启动》这两篇文章中的程序相结合,然后用ProcessMonitor对其行为进行监測。

        这里先来总结一下我所编写的“恶意程序”的行为,以便与ProcessMonitor的监測结果相比較:

        (1)将自身拷贝到system32与windows文件夹下。

        (2)将自身加入到注冊表HKCUSoftwareMicrosoftWindowsCurrentVersionRun中。

        (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”的文件行为,接下来分析注冊表行为。关闭文件行为button,打开注冊表监控。进行分析:


图7 注冊表项监控

        ProcessMonitor已经将对应的注冊表项监控到了。在Detail列目中也给出了对应的细节信息,这里不再赘述。

        至此,“Hacked.exe”已经分析完成。能够根据上述分析结果来编写专杀工具。

专杀工具的编写已在我的文章中论述过了。这里不再叙述。

        以上简介了Process Monitor的用法。这款软件很多其它的功能有待于大家去发掘。

希望读者朋友可以将我的文章作为起点。不断学习,从而成为反病毒领域的专家。

原文地址:https://www.cnblogs.com/gcczhongduan/p/5140313.html