Process Monitor 是調查刁鑽問題的神兵利器,透過觀察程式存取檔案、Registry 行為,往往能在案情膠著之際找出關鍵線索,在我的茶包射手生涯中立功無數,堪稱茶包一哥。

【延伸閱讀】

如果遇到不定期發生的難纏茶包,想用 Process Monitor 側錄檔案及 Registry 找線索,該如何進行長達數小時甚至數天的監控?

Process Monitor 長期執行最大的問題在於資料量,幾分鐘就可能累積數百 MB,跑個幾小時大小會很驚人,若要鎖定目標很明確,可以設好 Filter,

並指定丟棄不符篩選條件的項目(Drop Filtered Events),大幅降低資料量,如此就能長時間監控而不塞爆記憶體。

Process Monitor 預設會把資料保存在虛擬記憶體,如果預期資料量很大怕超過記憶體上限,可改存成檔案。File 選單有個 Backing Files:

指定檔名路徑,只要磁碟空間夠大,不用擔心資料放不下。

我最近遇到的案例是好幾小時才出現一次,間隔不定的鬼問題,且無法確定跟什麼檔案、目錄或 Registry 有關,必須完整側錄事後再分析,五分鐘資料量近 200MB,就算磁碟機放得下,數 GB 的大檔分析起來也很沒效率。

我想到的解法是以五分鐘為單位拆一個記錄檔,到時再挑事件發生期間的檔案來看。切換不同資料檔期間可能會漏掉一部分活動,但只要賭事件不是發生在切換期,就不致有問題。

ProcMon 支援從批次作業呼叫,並有提供參數協助我們達成目標:/Backingfile <filePath> 指定將錄製結果存至特定路徑、/Minimized 啟動後視窗最小化、/Quiet 跳過起始時篩選器確認(直接沿用上次設定)、/Runtime <secs> 執行多少秒後自動結束、/Terminate 若目前有 ProcMon 在執行中,將其強制結束:

我寫了以下 run-procmon.bat 批次檔,順便練了 PowerShell 產生日期時間字串轉存環境變數的小技巧(參考:如何利用批次檔(Batch)讀取指令執行的結果或文字檔案內容 by 保哥)。

@echo off
FOR /F "USEBACKQ" %%F IN (`powershell -Command "Get-Date -Format 'yyyyMMddHHmm'"`) DO SET DateTime=%%F
C:\Batch\ProcMon.exe /Terminate
C:\Batch\procmon.exe /Backingfile D:\Logs\%DateTime%.pml /Minimized /Quiet /Runtime 300

再來,設定五分鐘一次的排程呼叫 run-procmon.bat:

如此我們就能得到五分鐘一包的 ProcMon 記錄檔,硬碟夠大,甚至記上十天半個月都不成問題。當然實務上應會每幾小時,至少每天查看,茶包沒出現就刪掉沒錄到記錄檔。

祝有類似需求的朋友們,早日在樹下抓到兔子。


Comments

Be the first to post a comment

Post a comment