zoukankan      html  css  js  c++  java
  • 文档翻译第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: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”的文件行为,接下来分析注册表行为。关闭文件行为按钮,打开注册表监控,进行分析:


    图7 注册表项监控

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

            至此,“Hacked.exe”已经分析完毕,可以依据上述分析结果来编写专杀工具。专杀工具的编写已在我的文章中论述过了,这里不再叙述。

            以上简单介绍了Process Monitor的使用方法,这款软件更多的功能有待于大家去发掘。希望读者朋友能够将我的文章作为起点,不断学习,从而成为反病毒领域的专家。
  • 相关阅读:
    Sql server之路 (三)添加本地数据库SDF文件
    Ps 之路 更改前景色
    wp7 xml
    安装程序在安装此软件包时遇到一个错误,这可能表示此软件包有错。错误码是29506
    WebService之路
    Wcf for wp8 上传图片到服务器,将图片名字插入数据库字段(五)
    C# 读取本地图片 转存到其他盘符
    如何在程序中执行动态生成的Delphi代码
    用 GetEnvironmentVariable 获取常用系统环境变量
    修改window.external使JS可调用Delphi方法
  • 原文地址:https://www.cnblogs.com/csnd/p/11785792.html
Copyright © 2011-2022 走看看