ProcessExplorer和procmon算是一對兄弟,幾年windows客戶端測試,就主要靠兩哥們幫助了。
工具描述
Process Explorer使用個輕量級的進程管理器,是由Sysinternals出品的免費工具,請猛擊這里下載最新版本使用。
以下是官方介紹的翻譯: “想知道是那個程序打開了某個文件或者目錄么?現在可以找出它了。PorcessExplorer將會顯示出進程打開或者加載了哪些的句柄(handles)或者動態鏈接庫(Dlls)。 ProcessExplorer的顯示區包含由兩個子窗口組成。上部的窗口顯示了當前系統的活動進程、以及這些進程的是屬於哪個用戶的。同時,上部的窗口依據ProcessExplorer的顯示“模式”決定着底部窗口顯示的內容:如果選擇的是句柄模式,那么你將會在底部的窗口中顯示的是上部窗口中選中進程所打開的句柄;如果選擇的是Dll模式,那么你將看到進程所加載的動態鏈接庫文件dlls以及內存映射文件。ProcessExplorer還具有強大是搜索功能,幫助你找出特定的某個句柄或者dll正在被哪個進程所加載。 ProcessExplorer的功能使得它在跟蹤Dll版本問題或者句柄泄露方面起到很好的作用,並且向用戶展示了Windows系統以及應用程序內部是如何工作的”。
典型應用場景
使用PE查看文件句柄和Dll加載情況
PE中可以在下方窗口顯示指定進程的打開的句柄加載的DLL等,方法:View-->Lower Pane View-->DLls/Handls,也可以使用查找的方式來定位(Ctrl+F)
- 場景:刪除USB設備的時候提示“無法停止”,如同:

- 可能的原因:USB磁盤中的文件句柄被某個進程占用時,有可能會導致這個問題
1 解決方法:啟動PE,按住Ctrl+F打開查找dll(handle)的對話框,輸入USB設備的分區名稱比如L:\,然后點查找
1 這個時候會顯示出L:\分區上被打開的句柄,這個時候點擊某個句柄,PE會打開上下窗口,並且指出是哪個進程占用了哪個句柄。
1 右鍵點擊下方handle視圖中的這個句柄,選擇Close Handle
1 再次嘗試停止USB設備,應該就ok了

檢查進程和線程(堆棧)的詳細信息
- 場景:有段時間發現MSN在登錄后CPU長時間占用達到50%以上

1 問題定位:打開PE雙擊MSN的進程打開對話框顯示進程詳細信息,找到Thread線程tab頁,發現一個線程占用了大量CPU,且線程切換次數最高。如下面左圖:
1 點擊Stack,看看這個線程在做什么,如右圖:

2 發現Flash.OCX模塊在工作最為可疑。所以懷疑系統的flash控件有問題,推斷原因。MSN主程序下方的Flash顯示有可能造成了這個問題。后來用Shell禁用Flash廣告后沒有再出現CPU占用過高的情況。
上述右圖中如果需要通過配置Symbols來顯示系統模塊使用的函數名稱,而Flash屬於第三方模塊所以顯示不到函數。配置方法如下:在Options菜單選擇Configure Symbols。對話框中第一個選擇windbg安裝目錄下的dbghelp.dll,第二個選擇本地的symbols符號路徑,這里我選擇從微軟的公共符號服務器下載符號到本地的固定文件夾

觀察進程細節的Tips
- 進程可以顯示成為樹狀結構,可以清晰的看到哪個進程的父進程是誰,子進程是誰;
可以顯示進程更為詳細的信息,比如vista下的“強制完整性級別”、是否虛擬化。虛擬內存、工作集等信息。通過菜單View->Select Columns可以定制自己想要顯示的關於進程相關的各種信息
- 有些子進程或父進程退出速度很快,無法查看關系,可以設置Difference Highlight Duration的時間為最長的9秒,這樣進程退出后也還會繼續顯示9秒的;

- 進程的顏色代表了不同的含義:如圖

- Own Process用淡紫色表示,代表和以當前登錄用戶身份啟動的進程
- Services用粉色表示,代表系統服務類的進程
- .Net的進程用黃色表示,比如我的移動飛信的進程是.net進程
- Packed Images指的是捆綁的進程,很多病毒流氓軟件為了避便被殺毒軟件進行特征檢查對自己的進程文件進行Pack.當然,也有很多正常的進行也是Packed類型的,比如我的TC和Foxmail。
- 紅色、綠色分別表示新創建的和銷毀的對象(注意:對象可以是加載的dll打開的句柄也可以是進程對象 本身)當觀察進程啟動的順序或者加載模塊的先后訊息等細節的時候注意觀察紅色和綠色
- 一個進程一閃而過的創建起來,我還沒有來得及看。怎么辦?可以配置上述高亮顏色的“滯留時間”:使用Options--Different Highlight Duration 將這個時長設置為更長的時間就可以了。
- 最后要說的是Jobs作業對象用咖啡色表示,舉例說明,如Google瀏覽器,下面具體分析一下其中部分的安全特性:
場景1:Google瀏覽器安全特性分析
2 步驟使用PE查看進程特性在vista下tab的進程運行在低MIC級別,見Integrity列為Low:這類似於在vista系統下IE7的“IE保護模式”,因為默認情況下高MIC級別的進程不響應低MIC級別進程的窗口消息,從而避免一些核心進程在瀏覽器遭到劫持后,被攻擊,如窗口粉碎工具。同時低MIC級別的進程在vista下不能修改一些vista系統關鍵對象,如敏感注冊表和文件位置。chrome充分利用vista系統的安全性。

3 不過chrome的主進程和插件進程是運行在Medium級別的,chrome將插件做為獨立的進程來維持,有助於提高瀏覽器穩定性,插件或者tab掛掉不會導致整個瀏覽器崩潰。(這是題外話,下面是Chrome自己的進程管理器顯示的信息)

4 打開進程管理器你會發現,chrome的每個tab進程實際上是個作業job(簡單來講就是一個可以容納多個進程的容器),從開發角度來說,對於job可以進行一個更有效的權限限制程序“邊界”的限定。每個tab的作業只容納了一個進程。用PE打開該job查看詳細信息。我們打開一個tab進程,查看權限標簽頁:發現進程沒有特權,而權限列表中很多被設置為Deny。這說明當被訪問資源(注冊表,文件)的ACL中如果明確要求具有管理員或者高權限才可以操作的情況下,tab進程是不能修改這些資源的。

如何做到的呢?我們前面說了,這是通過作業來實現的,windowsAPI在創建作業進程的時候可以使用參數將job這個單位的一些特定權限進行限制(可配置的),同樣,我們打開一個tab進程,切換到job標簽頁(普通進程是沒有的),查看下面limited的列表,發現該job的很多行為被限制了,包括:僅運行一個活躍進程工作;不允許進程創建Desktop對象;不允許修改顯示設置;不允許進程使得windows退出、關機等;用戶對象讀取限制;對於剪貼板的讀寫操作的限制,管理員權限操作限制等,從而實現這個“沙盒”。
場景2:惡意軟件偵查和逆向工程
使用進程屬性中是String標簽頁信息:
- 進程屬性的String標簽也通常能夠顯示這個進程在運行的時候可能會使用到的一些字符串,比如網址、路徑名、注冊表信息等等蛛絲馬跡。如果是病毒或者惡意軟件通過包含着一個遠程的地址用來下載病毒或者將竊取的信息上傳。這里通常還會包含其他信息,對於不同的場合來說,總有一些是有用的。通常有些殺毒軟件也會從這里提取病毒特征碼的。

本文摘自:http://www.cnblogs.com/idbeta/p/4991080.html
