1. 程式人生 > >文件翻譯第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的簡單演示】

        這裡先來總結一下我所編寫的“惡意程式”的行為,以便與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的使用方法,這款軟體更多的功能有待於大家去發掘。希望讀者朋友能夠將我的文章作為起點,不斷學習,從而成為反病毒領域的專家。