10個Windows應用程式除錯的小技巧 (Process Explorer篇)
這篇文章主要介紹當Windows 應用程式發生異常時候,
有沒有什麼工具可以即時監控系統運作的狀況並且幫忙釐清問題 ?
我們主要介紹的工具是 “Process Explorer”與相關的問題情境與使用技巧。
何處下載 Process Explorer
https://technet.microsoft.com/en-us/sysinternals/bb896653
Process Explorer 主要是 System Internals 的工具集之一,
可以”即時” 的觀察 Windows 運作的狀況,現在讓我們舉幾種情境說明如何使用 Process Explorer
1.哪些Process 啟動、加密、背景服務執行?
Options > Configure Colors
其實 process Explorer 每一個 process 執行的顏色都是有意義的。看這些顏色要幹嘛呢?
- 紫色 Packed Images: 表示這個 process 有特別的被加密處理過。也就是該 process 不希望讓別人知道內容。通常正常的 process 很少會這樣做。病毒的可能性就很大。
- Process 的啟動與結束:綠色與紅色。看看是不是有經常性的 process 被啟動。或是莫名的被停止。
- Service 粉紅色:Services 因為一開啟就會自動的在背景執行。所以可以知道系統有哪些背景服務與 process 的關係。
2. 檔案無法刪除?
有些情況會遇到檔案無法刪除或是無法 uninstall。通常這是因為該檔案目前正被另外一個 process 讀取或是鎖住。
我們要如何得知檔案是被哪一個 process 鎖住呢?
可以使用 Find 的功能。
例如我們搜尋 “wildlife” 就可以知道該檔案目前正在被 vlc.exe 讀取。
更進一步,檔案鎖定會用一個 file Handle,
可以在Process Explorer (View > Lower Panel View > Handles)下方的 Handles View,按右鍵將該 handle Close 即可。
特定應用程式對應的 process為何?
當我們想知道特定的 Windows 應用程式,背後所對應的 process 時,
我們可以用 Find Window Process 這個圓圈圈,
拖拉的分是將該圓圈圈指到我們要觀察的 Windows Application
3. Process 如何被啟動
為什麼我們想知道該 process 如何被啟動呢?
有些異常的 process ,特別是病毒是透過一些非正常的方式啟動。
另外一個原因是,看看該 process 啟動的路徑、參數等是否正確的被啟動。
Process > 右鍵 > Properties
4. 整體電腦的效能
View > System information (Ctrl + I)
這個資訊可以很快的讓我們知道目前電腦整體的效能。CPU、Memory, I/O ,Network等的用量。
特別是當我們覺得當電腦很慢的時候,可以初步的釐清當時有哪些資源瓶頸。
5.將特定Process 當下的狀態快照事後分析
Process Explorer 的最大缺點就是需要即時監控而且沒有歷史資訊。
所有的資訊都是需要即時觀察。很多情況下我們不可能一直守候在電腦前觀察。
因此,有沒有什麼方法可以將當下的狀況快照下來以便事後的分析呢?
我們可以利用 “Create Dump” 的功能,將特定 process 當下的狀態儲存。
產生的 Dump 可以用 windbg or Diagnosis Tool 事後分析。當作 Log 的依據也比較好說明與釐清問題。
6. Process 裡面有什麼資訊?
當我們想知道特定 process 的行為時,這是一個很好用的方法。
我們可以透過 process 右鍵 > Properties > “Strings”
這個功能會列出所有該 process 內部的 ASCII 。因此我們可以透過這個方式知道:
- Process 的錯誤訊息。我們就可以針對這些錯誤訊息做測試
- 存取哪些檔案路徑或是 registry。看看是否有異常的系統路徑存取
- 網址、IP 或是電子信箱。有些 process 會通通將資料外洩,或是連到外面的主機。如果有出現異常的 IP address 就可以進一步追查。
- 密碼是否為明文在記憶體中。可以用這個方式很快的搜尋到自己的密碼是否有被明文存放在記憶體中。
Image 與Memory有什麼不同呢?
Image 指的是該 process binary 檔案本身的內容。 Memory 指的是載入記憶體後的內容。
多半情況下這兩者會相同,但是如果是經過 Packed Process ,這兩者會就很大的不同。
7.Process 是不是有偷偷往外連?
這是另一個很好用的資訊。可以看出特定 process 是否有與外界連線。如果有是哪些 IP Address。
8. 設定 Symbols
為什麼要設定 Symbols? 什麼時候才要設定 Symbols呢?
用下列兩張圖說明。當我們需要知道更進一步 Process > Threads > Start Address 的資訊時
可以看得出來設定前,我們只知道 Notepad.exe+0x3570,我們不知道 0x3570是什麼?
設定後我們就可以更清楚知道原來是 NotePad.exe!WinMainCRTStartup 這個函數。
設定前 Symbols | 設定後 Symbols |
知道設定 Symbols 的功用之後,要如何設定呢?
9. 是否為已知病毒?
Process Explorer 另一個很好用的功能就是檢查該 process 是否為已知病毒
於該Process 按右鍵 Check Virus Total ,Process Explorer 就會到雲端檢查跟 50多家防毒軟體廠商詢問,請問這個 process 是不是病毒?
回傳的結果像是投票結果。 “0/50” 表示 50家防毒軟體廠商中,有 0 家認為該檔案是病毒。 “25/50” : 表示 50家防毒軟體廠商中,有25家認為該檔案是病毒。
10. 限制
最後要說的反而是 Process Explorer 的限制。
最大的限制就是該工具只有提供”即時”資訊,沒有歷史紀錄。
唯一可以儲存的方式就是 User Dump。
可以用另外一套工具輔助 Process monitor https://technet.microsoft.com/en-us/library/bb896645.aspx
另外,由於 Process Explorer 畢竟為微軟的工具,有些功能(例如process terminator)會受到限制。
可以使用另外一個工具 Process Hacker http://processhacker.sourceforge.net/ process terminator提供終止 Process 的10+種方式…
小結
釐清錯誤問題的原因也是測試工程師一個重要必備的專業技能。
測試工程師的專業就在於對於每一個問題的發現與釐清培養。
測試驗證 => 發現問題 => 縮小問題 => 釐清問題的原因 => 討論提出解決方案。