馬拉松式射茶包 - Process Monitor 長期監控小技巧
0 |
Process Monitor 是調查刁鑽問題的神兵利器,透過觀察程式存取檔案、Registry 行為,往往能在案情膠著之際找出關鍵線索,在我的茶包射手生涯中立功無數,堪稱茶包一哥。
【延伸閱讀】
- Process Monitor基本操作教學
- Process Monitor 2.0
- ProcMon五分鐘內破案的經典案例
- ProcMon經典案例2: RegSvr32失敗
- 無法開啟的ASP.NET 1.1專案
- SharePoint 文件庫無法「在檔案總管中開啟」
- 無疾而終的ChromeSetup
- ... 以下省略數十篇 ...
如果遇到不定期發生的難纏茶包,想用 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