內與外的困惑:找出System程序佔用100%CPU的元凶
阿新 • • 發佈:2019-01-30
來源:http://blog.cfan.com.cn/html/64/51964-32697.html
我的系統檔案“內外兼修”
PS:發表於Cfan第17期,這是完整原文,上雜誌時由於版面空間之限刪減了一些文字和圖片,如有錯誤敬請指正。
系統檔案丟失或損壞導致系統無法啟動,恐怕我們十有八九都碰到過……準備好了嗎,一起來整整系統檔案的“核心”(Kernel)帶“外殼”(Shell),讓我們的系統執行更安全高效。
一、簡單脆弱的“外殼”程序:Explorer
Windows 給我們提供了一個親切友好的介面,這要歸功於Explorer.exe——Windows的“外殼”。和DOS的“外殼”COMMAND.COM相比,Explorer.exe讓我們在Windows中自由地單擊、雙擊、拖拽……這些無疑比DOS更加精彩。然而,Explorer.exe亦正亦邪:
1.當“利劍”掌握在正義手中
相信嗎,我們可以輕而易舉地重新命名正在執行的Explorer.exe,因為它只是“外殼”。從Windows載入桌面之前到退出之後,系統登入管理器 Winlogon.exe就把“外殼”的職責交給了Explorer.exe。正常系統的中,登錄檔 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon]下“Shell”的鍵值應是“Explorer.exe”。
我們可以做一個“偷天換日” 的實驗:將前面的“Shell”鍵值改為某個程式的完整路徑,比如“C:/Program Files/Microsoft Office/OFFICE11/WINWORD.EXE”,或者先將Explorer.exe改名為Explorer.bak,再將這個程式(最好是綠色軟體)相關檔案複製到系統目錄,將主程式名改為Explorer.exe。重啟電腦後該程式將充當Windows的“外殼”與使用者“對話”。利用這個原理,我們可以將Windows打造成專門用途的電腦,而不知其中奧妙是找不回Explorer.exe的。Windows中“帶命令列提示的安全模式”也就是讓cmd.exe代勞“外殼”的職責(見圖1)。
2.警惕“披著羊皮的狼”
Windows的Shell呼叫瞭如此多的DLL應用程式擴充套件,以致惡意程式可以輕易侵襲Explorer.exe,輕則在檔案(夾)右鍵新增某些選項選單,重則Explorer.exe被惡意程式利用,甚至導致系統無法正常啟動,成了“披著羊皮的狼”。
這些都是利用“外殼”的弱點,比較容易解決:先清除登錄檔中相關的Shell鍵值,如資料夾右鍵選單就位於 [HKEY_CLASSES_ROOT/Folder/shell]以及[HKEY_CLASSES_ROOT/Directory/shell]下。通過程序、服務檢視可以找出隱藏執行的程序,終止後即可刪除、解除安裝。如果Explorer.exe有問題,可以進入“帶命令列提示的安全模式”,用 replace命令替換為正常的系統檔案(用“help replace”可查詢用法),再搜尋登錄檔修復與“Explorer.exe”相關的鍵值、改正被惡意程式關聯的項,最後刪除惡意程式相關的檔案。
二、並不安全的“核心”程序:System
系統啟動後,“工作管理員”中的幾個系統程序(在“程序”列表中“使用者名稱”顯示為“SYSTEM”的程序)是按什麼順序啟動的?System是位於系統底層的“核心”程序,其他一些系統程序都以它為基礎,所以可以把它稱為其他系統程序的“父程序”。這些系統程序啟動的順序是:System→smss.exe→csrss.exe→Winlogon.exe。
火速連結
關於系統程序的知識請參考本刊2006年第15期《看透程序真面目》一文。
Windows中,作為底層的System程序可以呼叫上千個驅動程式(SYS系統檔案)。而防毒軟體正是以驅動程式模組安裝到系統中,才能在系統登入之前“搶先”執行保護系統安全;同樣“與時俱進”的木馬也“學會”了這一招,在System程序的保護下“暗渡陳倉”。這些有問題的“驅動”可能導致的後果就是System程序的高CPU佔用。
下面我們來揪出System程序佔用100%CPU的“元凶”。
1.
執行“perfmon”開啟效能管理,右擊右窗格選擇“新增計數器”,在“效能物件”下拉選單中選擇“Thread”,“從列表中選擇範例”選中所有
Syetem的執行緒(如System/0、System/1),然後點選“新增→關閉”。檢視CPU佔用最高的執行緒對應的System例項,記下例項號。這裡以25為例(見圖2)。
2. 找一張XP的安裝盤,將光碟目錄SUPPORT/TOOLS/SUPPORT.CAB中的pviewer.exe、pstat.exe兩個檔案解壓到 Windows/System32目錄下。執行“pviewer”,在“Process”列表選擇“System”,點選下面的“Threads”列表中 “25”一項,記住那個“Start Address”,如“0xf98b9f90”(見圖3)。
小提示
無安裝盤可以“KB838079”為關鍵字搜尋,下載微軟SP2支援工具,解壓後也能得到SUPPORT.CAB。
3. 開啟命令提示行,鍵入“pstat”,查詢最後的“ModuleName”(模組名)欄位,對照“Load Addr”,找出與“f98b9f90”相似的記憶體地址,如“F9824000”,逐一排查即可找出有問題的系統檔案(見圖4),根據此檔案建立的時間找出可疑的程式。
我的系統檔案“內外兼修”
PS:發表於Cfan第17期,這是完整原文,上雜誌時由於版面空間之限刪減了一些文字和圖片,如有錯誤敬請指正。
系統檔案丟失或損壞導致系統無法啟動,恐怕我們十有八九都碰到過……準備好了嗎,一起來整整系統檔案的“核心”(Kernel)帶“外殼”(Shell),讓我們的系統執行更安全高效。
一、簡單脆弱的“外殼”程序:Explorer
Windows 給我們提供了一個親切友好的介面,這要歸功於Explorer.exe——Windows的“外殼”。和DOS的“外殼”COMMAND.COM相比,Explorer.exe讓我們在Windows中自由地單擊、雙擊、拖拽……這些無疑比DOS更加精彩。然而,Explorer.exe亦正亦邪:
1.當“利劍”掌握在正義手中
相信嗎,我們可以輕而易舉地重新命名正在執行的Explorer.exe,因為它只是“外殼”。從Windows載入桌面之前到退出之後,系統登入管理器 Winlogon.exe就把“外殼”的職責交給了Explorer.exe。正常系統的中,登錄檔 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon]下“Shell”的鍵值應是“Explorer.exe”。
我們可以做一個“偷天換日” 的實驗:將前面的“Shell”鍵值改為某個程式的完整路徑,比如“C:/Program Files/Microsoft Office/OFFICE11/WINWORD.EXE”,或者先將Explorer.exe改名為Explorer.bak,再將這個程式(最好是綠色軟體)相關檔案複製到系統目錄,將主程式名改為Explorer.exe。重啟電腦後該程式將充當Windows的“外殼”與使用者“對話”。利用這個原理,我們可以將Windows打造成專門用途的電腦,而不知其中奧妙是找不回Explorer.exe的。Windows中“帶命令列提示的安全模式”也就是讓cmd.exe代勞“外殼”的職責(見圖1)。
2.警惕“披著羊皮的狼”
Windows的Shell呼叫瞭如此多的DLL應用程式擴充套件,以致惡意程式可以輕易侵襲Explorer.exe,輕則在檔案(夾)右鍵新增某些選項選單,重則Explorer.exe被惡意程式利用,甚至導致系統無法正常啟動,成了“披著羊皮的狼”。
這些都是利用“外殼”的弱點,比較容易解決:先清除登錄檔中相關的Shell鍵值,如資料夾右鍵選單就位於 [HKEY_CLASSES_ROOT/Folder/shell]以及[HKEY_CLASSES_ROOT/Directory/shell]下。通過程序、服務檢視可以找出隱藏執行的程序,終止後即可刪除、解除安裝。如果Explorer.exe有問題,可以進入“帶命令列提示的安全模式”,用 replace命令替換為正常的系統檔案(用“help replace”可查詢用法),再搜尋登錄檔修復與“Explorer.exe”相關的鍵值、改正被惡意程式關聯的項,最後刪除惡意程式相關的檔案。
二、並不安全的“核心”程序:System
系統啟動後,“工作管理員”中的幾個系統程序(在“程序”列表中“使用者名稱”顯示為“SYSTEM”的程序)是按什麼順序啟動的?System是位於系統底層的“核心”程序,其他一些系統程序都以它為基礎,所以可以把它稱為其他系統程序的“父程序”。這些系統程序啟動的順序是:System→smss.exe→csrss.exe→Winlogon.exe。
火速連結
關於系統程序的知識請參考本刊2006年第15期《看透程序真面目》一文。
Windows中,作為底層的System程序可以呼叫上千個驅動程式(SYS系統檔案)。而防毒軟體正是以驅動程式模組安裝到系統中,才能在系統登入之前“搶先”執行保護系統安全;同樣“與時俱進”的木馬也“學會”了這一招,在System程序的保護下“暗渡陳倉”。這些有問題的“驅動”可能導致的後果就是System程序的高CPU佔用。
下面我們來揪出System程序佔用100%CPU的“元凶”。
2. 找一張XP的安裝盤,將光碟目錄SUPPORT/TOOLS/SUPPORT.CAB中的pviewer.exe、pstat.exe兩個檔案解壓到 Windows/System32目錄下。執行“pviewer”,在“Process”列表選擇“System”,點選下面的“Threads”列表中 “25”一項,記住那個“Start Address”,如“0xf98b9f90”(見圖3)。
小提示
無安裝盤可以“KB838079”為關鍵字搜尋,下載微軟SP2支援工具,解壓後也能得到SUPPORT.CAB。
3. 開啟命令提示行,鍵入“pstat”,查詢最後的“ModuleName”(模組名)欄位,對照“Load Addr”,找出與“f98b9f90”相似的記憶體地址,如“F9824000”,逐一排查即可找出有問題的系統檔案(見圖4),根據此檔案建立的時間找出可疑的程式。