Windows Sysinternals 及實用工具

作者: 賴榮樞
http://www.goodman-lai.idv.tw

微軟公司在今年七月 18 日併購了專營系統復原及資料保護的 Winternals 公司,也將這家公司的 Sysinternals 網站裡廣受好評的免費工具納入了 TechNet 網站的 Windows Sysinternals,並且繼續維持免費下載。本文除了將介紹若干實用工具,也會簡介 Winternals 公司的創辦人,以及 Windows Sysinternals 網站。

本頁內容

併購 Winternals:延攬人才、獲得技術
Sysinternals 併入 TechNet 網站
Process Monitor
基本操作
過濾及標註事件
Process Explorer
TCPView
結語

微軟公司在今年七月 18 日加入了兩位新成員,他們是 Winternals Software LP 公司的創辦人 Mark Russinovich 以及 Bryce Cogswell。成立於 1996 年德州奧斯汀的 Winternals,除了提供 Windows 系統復原及資料保護解決方案,也將這家公司所開發的諸多系統工具及相關資訊,放在名為 Sysinternals 的網站供人免費下載。七月 18 日,微軟發佈了併購 Winternals 的新聞,這家公司成為微軟的子公司,而這兩位技術高超的創辦人也加入微軟。

併購 Winternals:延攬人才、獲得技術

Russinovich 成為微軟平台及服務部門(Platforms & Services Division)的 technical fellow,而 Cogswell 則擔任 Windows Component Platform Team in 的軟體架構師。我在之前的《Sony DRM Rootkit 的威脅與發現》也曾介紹過 Russinovich,他以自己所開發的 RootkitRevealer 發現了 Sony DRM Rootkit。擁有卡內基美濃大學博士學位的 Russinovich 是公認的 Windows 專家,並且也是微軟最有價值專家(MVP),而他除了是技術卓越的軟體工程專家,也是專欄作家、微軟 PDC 講師,以及數本技術書籍的作家,包括 Inside Windows 2000 第三版和 Microsoft Windows Internals 第四版(這兩本書的出版商都是微軟出版社,同樣由微軟出版的套書 Windows Server 2003 Resource Kit,也收錄 Windows Internals 一起銷售)。過去 Russinovich 最著名的一件事,就是在 1996 年發現了 Windows NT Server 版和 Workstation 版的核心程式其實是相同的,差異只在登錄機碼的不同。微軟併購 Winternals 之後,除了會整合 Winternals 與微軟的產品,原本 Winternals 旗下網站 Sysinternals 的免費工具和技術文章,也大多併入 TechNet 網站之下,並更名為 Windows Sysinternals,而電子報改以部落格的形式呈現,Russinovich 原本的部落格也移到 TechNet。Sysinternals 原本甚至還提供若干免費工具的原始程式讓使用者下載,但是這部份並未併入 Windows Sysinternals 網站,目前仍可從 Sysinternals 網站取得。

Sysinternals 併入 TechNet 網站

Sysinternals 的免費工具向來有口皆碑。我第一次使用到 Sysinternals 的系列工具,是能讓 DOS 讀取 NTFS 磁碟內容的 NTFSDOS,並且也發現 Sysinternals 免費工具的實用與威力。不過 Sysinternals 的免費工具並未全部併入 Windows Sysinternals,根據 Windows Sysinternals 部落格的說法,只能在 Win9x 或 DOS 執行、會與 Windows XP/Vista 不相容,以及若干僅作為 Russinovich 文章範例工具的免費工具,並不會併到 Windows Sysinternals 網站(例如在 Windows Sysinternals 網站就找不到前述的 NTFSDOS,但用網路搜尋還是能在別處找到)。

雖然刪除了若干的免費工具,但是目前 Windows Sysinternals 提供的免費工具還是很多,Sysinternals Utilities Index 詳列了這些免費工具,這些工具程式分成 File and Disk、Networking、Processes and Threads、Security、System Information、Miscellaneous 等六類,使用者除了可以從中分別下載各個工具程式,也可以下載列於首位的 Sysinternals Suite,這是所有 Windows Sysinternals 免費工具的 ZIP 壓縮檔。這些工具程式最方便的特性,就是不需要安裝,直接執行即可。此外,有些工具程式是圖形介面模式,有些則是文字模式,而有些程式也另有線上說明檔、DLL 或 SYS 等檔案。

Windows Sysinternals 所提供的免費工具都是IT人員的好幫手(日後也應該會收錄到 Windows Resource Kits),以下將介紹若干實用的工具程式。

Process Monitor

Process Monitor 是 Windows 系統的即時監控程式,可以即時顯示系統目前的檔案系統、登錄機碼、行程及緒程的細節,並且可以在 Windows 2000 SP4 with Update Rollup 1、Windows XP SP2、Windows Server 2003 SP1、Windows Vista,以及 x64 版本的 Windows XP、Windows Server 2003 SP1、Windows Vista 等作業系統執行。

Process Monitor(如圖 1)是 Filemon、Regmon、Pslist、Process Explorer 等 Windows Sysinternals 工具程式的綜合體,只是行程監控的功能比 Process Explorer 少。任何行程對檔案或登錄機碼的讀寫事件,都會被 Process Monitor 即時呈現出來,包括順序、讀寫的時間、行程的 ID、讀寫的類型、路徑、結果,以及相關細節等等,而使用者可以自行選擇要顯示哪些資訊。

圖 1:Process Monitor

圖 1:Process Monitor

執行 Process Monitor 需要本機管理者權限,執行之後,Process Monitor 隨即開始監控並依照設定顯示檔案系統、登錄機碼、行程及緒程的細節,您也會發現 Process Monitor 視窗左下角狀態列有兩個數字一直在增加,這兩個數字代表系統發生的事件數量(後),以及 Process Monitor 顯示的事件數量(前)。Process Monitor 從行程或緒程起始之後,就會顯示其活動的情況,包括載入 DLL 或核心模式的驅動程式、對檔案或登錄機碼的讀或寫,以及活動的結果(成功與否);而當行程結束,Process Monitor 也會顯示結束的狀態碼。

基本操作

Process Monitor 預設是執行之後就依照設定不斷的擷取系統發生的事件,如果想暫停事件的擷取,可以按下 Ctrl-E、Capture 工具鈕或『File/Capture Events』;再執行一次就可以讓 Process Monitor 繼續擷取。而 Ctrl-X、Clear 工具鈕或『Edit/Clear Display』可以清除視窗裡的資訊;清除之前,您或許會想將視窗裡的資訊另存成檔案,Ctrl-S、Save 工具鈕或『File/Save』可以將視窗裡的資訊存成檔案,除了可以選擇檔案儲存的資料夾,還可以選擇儲存的格式(Native Process Monitor Format 或 Comma-Separated Values)和儲存的事件(所有事件、過濾後的事件、標註的事件)。

事件的顯示順序,是新的在 Process Monitor 視窗下緣、舊的在上,因此您必須捲動視窗的捲動軸,才能看到新的事件;或者,也可以利用 Ctrl-A、Autoscroll 工具鈕或『Edit/Auto Scroll』,讓 Process Monitor 自動捲動,而只要再執行一次就可以停止自動捲動。

圖 2:可自訂欄位的『Process Monitor Column Selection』交談窗

圖 2:可自訂欄位的『Process Monitor Column Selection』交談窗

Process Monitor 預設只有顯示九個欄位的資料,其他欄位可由『Options/Select Columns』的『Process Monitor Column Selection』交談窗自行勾選(如圖 2)。以滑鼠雙按顯示在 Process Monitor 視窗的事件(或以滑鼠右鈕按下事件,再執行快顯功能表的『Properties』),會顯示包含了三個標籤頁的『Properties』交談窗,這個交談窗還顯示了與此事件相關的詳細資料。

過濾及標註事件

Process Monitor 會即時顯示行程/緒程以及存取檔案、登錄機碼的事件,對一部正常運作中的 Windows 電腦來說,您會看到 Process Monitor 飛快的顯示著如排山倒海而來的事件,但要在這些數量龐大的事件裡找到想要的事件,就得費一番手腳了。首先,您可以利用工具列左邊的『Show Registry Activity』、『Show File System Activity』、或『Show Process and Thread Activity』等三個工具鈕,來顯示行程/緒程或存取檔案、登錄機碼的事件;例如只按下『Show Process and Thread Activity』工具鈕,Process Monitor 視窗就只會顯示行程或緒程起始、結束、或載入 DLL 等事件,存取檔案、登錄機碼的事件都不會顯示。

再者,Process Monitor 提供了過濾功能,按下Ctrl-L、『Filter』工具鈕或執行『Filter/Filter』,會開啟能讓使用者設定過濾條件的『Process Monitor Filter』交談窗(如圖 3)。例如您可以利用這個交談窗只顯示(或不顯示)Process Name 等於(或不是、或包含)某個字串的事件,設定了過濾條件之後,請記得按下交談窗裡的『Add』按鈕,並再按下『Apply』或『OK』按鈕。如果要移除過濾條件,請先從『Process Monitor Filter』交談窗選取要移除的條件,再按下『Remove』按鈕,並再按下『Apply』或『OK』按鈕。從『Process Monitor Filter』交談窗也可發現,Process Monitor 預設就過濾掉自己以及諸多系統事件了。

圖 3:設定過濾條件的『Process Monitor Filter』交談窗

圖 3:設定過濾條件的『Process Monitor Filter』交談窗

除了過濾事件,Process Monitor 還可以特別標註某些事件,按下 Ctrl-H、『Highlight』工具鈕或執行『Filter/Highlight』,會開啟能讓使用者設定標註條件的『Process Monitor Highlighting』交談窗,只要符合標註條件的事件,就會另外標註顏色。使用者也可以自訂標註的顏色。雖然過濾和標註事件都能同時設定數個條件式,但是所有符合標註條件的事件,只能以同一種顏色標註。此外,Process Monitor 也提供了字串搜尋的功能,按下 Ctrl-F、『Find』工具鈕或執行『Edit/Find』,會開啟與 Notepad 相同的尋找交談窗,要注意的是,這項功能只能搜尋已顯示的欄位資料,如果資料是在隱藏的欄位裡,要先以『Options/Select Columns』的『Process Monitor Column Selection』交談窗顯示欄位。

Process Monitor 的功能還不少,而且能夠鉅細靡遺的呈現系統裡的行程/緒程以及檔案、登錄機碼讀寫狀態,但也因為系統事件通常相當繁複,因此使用者若能善用過濾或標註功能,就能更快找到需要的資訊。Process Monitor 還附有線上說明檔,說明檔裡包含了完整的使用說明。

Process Explorer

如果想要觀察 Windows 執行中的行程及其相關資訊(例如緒程或載入的 DLL),Process Explorer 便是功能強大的實用工具;這個工具程式可以在 Windows 9x/Me、Windows NT 4.0、Windows 2000、Windows XP SP2、Windows Server 2003、Windows Vista,以及 x64 版本的 Windows XP、Windows Server 2003、Windows Vista 等作業系統執行。Process Explorer(如圖 4)是超級進階版的『工作管理員』,因此許多資訊、甚至操作方式都與 Windows 內建的『工作管理員』相似。本文便僅扼要說明,完整的使用說明可參考 Process Explorer 的線上說明檔。

圖 4:顯示代碼資訊的 Process Explorer

圖 4:顯示代碼資訊的 Process Explorer

Process Explorer 預設會以階層結構顯示行程之間的關係,顯示在下層的是被上層叫用而建立的行程,但是使用者也可以按下 Process 欄位,就能以行程名稱的字母順序排列這些行程。Process Explorer 可以顯示的行程資訊非常多,預設只顯示了五個,但只要執行『View/Select Columns』,就能從『Select Columns』交談窗自訂顯示欄位;其中甚至包含了 .NET 程式才有的資訊。

Process Explorer 可以設定資訊更新時間,預設是每秒更新(『View/Update Speed』)。雖然預設並沒有顯示,但實際上 Process Explorer 另有下窗格能顯示行程的 DLL 及代碼(handle)。只要按下『View DLLs』工具鈕或執行『View/Lower Pane View/DLL』,下窗格就會出現顯示行程所有的 DLL,在上窗格選取不同的行程,下窗格的內容也會隨之更動。View DLL 在下窗格所顯示的資訊,包含了對映到該行程位址空間的 DLL 及資料檔;例如若選取的行程為 WINWORD,下窗格的 DLL View 還會顯示 DOC 檔案的所有暫存檔。

『View DLLs』和『View Handles』是相互切換的工具鈕,而執行『View/Lower Pane View/Handles』亦可顯示行程的代碼。DLL或代碼等下窗格的欄位也能以如同上窗格的方式,也就是執行『View/Select Columns』,以『Select Columns』交談窗自訂顯示欄位,但是交談窗裡的『DLL』和『Handle』才是能顯示在『View DLLs』和『View Handles』的欄位。

圖 5:能顯示 CPU、記憶體等使用率的『System Information』視窗

圖 5:能顯示 CPU、記憶體等使用率的『System Information』視窗

如果仔細觀察,就會發現 Process Explorer 甚至連狀態列和工具列都還顯示了若干系統資訊,而狀態列的資訊也能自訂,方法是利用『Select Columns』交談窗的『Status Bar』標籤頁。如果覺得工具列上的三個小圖太小了,可以按下『System Information』工具鈕,或執行『View/System Information』,就會出現顯示 CPU、記憶體等使用率的『System Information』視窗(如圖 5)。

Process Explorer 也提供結束行程以及關閉代碼的功能,但結束或關閉之前請務必先確認對系統會有什麼影響。如果想要知道執行中的某個視窗,到底是 Process Explorer 裡的那個行程,只要按著『Find Window's Process』工具鈕不放,並拖曳到視窗再放開滑鼠按鈕,Process Explorer 就會以灰底顯示該視窗的行程(非常酷的功能)。

TCPView

TCPView(如圖 6)能顯示所有進出系統的 TCP 和 UDP 連線資訊,包括連線的行程、協定(TCP 或 UDP)、本機位址、遠端位址、連線狀態;利用『Resolve Addresses』工具鈕或『Options/ Resolve Addresses』,可以切換 IP 位址或 URL 顯示本機位址和遠端位址。TCPView 和 Process Explorer 都可以設定資訊更新時間,預設是每秒更新。

圖 6:能顯示所有進出系統 TCP 和 UDP 連線資訊的 TCPView

圖 6:能顯示所有進出系統 TCP 和 UDP 連線資訊的 TCPView

TCPView 亦提供了結束行程或關閉連線的功能,只要滑鼠右鈕按下視窗裡欲結束或關閉連線的行程,再從快顯功能表選取『End Process』或『Close Connection』即可。

結語

本文介紹的雖然只是簡單的小工具,但若能善加利用,卻都對找出系統的疑難雜症很有用。系統裡所有的動作或行為都是由行程發起,不論是正常的程式抑或惡意程式,都是以行程在系統運作,因此善用 Process Monitor 和 Process Explorer,就可以瞭解系統裡行程運作的情況,進而找出可疑或有問題的行程;當然也能再以 TCPView 觀察行程是否對外通訊、與誰通訊。

隨著微軟併購 Winternals,除了延攬了 Mark Russinovich 和 Bryce Cogswell 等兩位技術高手加入產品開發,也將原本就廣受好評的 Sysinternals 免費工具都納入了 TechNet 網站的 Windows Sysinternals,並且也將繼續維護這些工具程式(例如 Process Explorer 和 Process Monitor 都是 11 月初才更新的版本)。這些雖然都只是免費的小工具,但其功能與實用都相當高,都是 IT 人員的得力助手。此外,Mark Russinovich 原本就是一位喜歡分享技術心得,而且執筆不倦的技術高手,因此不論是 Russinovich 本人的部落格,或者是 TechNet 網站 Windows Sysinternals 的 Sysinternals Information 單元,一定都還會陸續刊出傳道、授業、解惑的佳作。