Windows 進程你需要知道的技巧
問題引入
不知道大家最近工作生活中有沒有碰到這樣的問題:
1、卸載程序,結(jié)果沒卸載干凈
程序的安裝目錄中還剩下一個dll文件。想刪,結(jié)果系統(tǒng)提示說dll文件被某個進程占用了,不讓刪。
2、安裝軟件后需要破解或者修改一些配置,通常會有替換配置文件 dll 文件。但是有些情況當(dāng)安裝軟件時
其服務(wù)默認是自動開啟的,此時也就會用到對應(yīng)的 dll 文件,這個時候在進行更改就會出現(xiàn)異常,
windows 會提示該文件已被某個進程占用。
我最近在安裝一個服務(wù)組件的軟件時,因為其內(nèi)置了一個 sql 數(shù)據(jù)庫程序,當(dāng)時沒留意。再替換配置文件 時才發(fā)現(xiàn) dll 文件被某個進程占用了。重啟程序、重啟電腦都未能解決,問題就指向了一個原因,那就是該服務(wù)是自動開啟的,即 windows 開機就自動開啟,因而也就會一直占用該 dll 文件。
但是通過 windows 的服務(wù)列表界面有很多服務(wù)一眼也看不出是哪個服務(wù)占用。(當(dāng)然對啟動的服務(wù)都很了解的話,就會知道安裝一個軟件會有哪些服務(wù)被啟動。)
被這個問題卡住了,搜索了半天資料找到了下面這個神器:tasklist。(好吧,承認是windows平臺的底層操作不熟,但是解決問題過程中學(xué)習(xí)成長還是很有成就感的不是,相信你也有這體會。)
關(guān)于 dll 文件
DLL ( Dynamic Link Library ) 文件為動態(tài)鏈接庫文件,又稱“應(yīng)用程序拓展”,是軟件文件類型。
在 Windows 中,許多應(yīng)用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當(dāng)我們執(zhí)行某一個程序時,相應(yīng)的 DLL 文件就會被調(diào)用。一個應(yīng)用程序可使用多個DLL文件,一個DLL文件也可能被不同的應(yīng)用程序使用。
1、 作用
- 在 Windows操作系統(tǒng)中,每個程序都可以使用該 DLL中包含的功能來實現(xiàn)“打開”對話框。這有助于促進代碼重用和內(nèi)存的有效使用。
- 通過使用 DLL,程序可以實現(xiàn)模塊化,由相對獨立的組件組成。 因為模塊是彼此獨立的,所以程序的加載速度更快,而且模塊只在相應(yīng)的功能被請求時才加載。
- 此外,可以更為容易地將更新應(yīng)用于各個模塊,而不會影響該程序的其他部分。
2、 特點
- 使用較少的資源
- 推廣模塊式體系結(jié)構(gòu)
三、 簡化部署和安裝
利器登場
一、用法明細
tasklist 這個命令還是很好使的,先看下用法手冊:
- F:\>help tasklist
- TASKLIST [/S system [/U username [/P [password]]]]
- [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
- 描述:
- 該工具顯示在本地或遠程機器上當(dāng)前運行的進程列表。
- 參數(shù)列表:
- /S system 指定連接到的遠程系統(tǒng)。
- /U [domain\]user 指定應(yīng)該在哪個用戶上下文執(zhí)行這個命令。
- /P [password] 為提供的用戶上下文指定密碼。如果省略,則
- 提示輸入。
- /M [module] 列出當(dāng)前使用所給 exe/dll 名稱的所有任務(wù)。
- 如果沒有指定模塊名稱,顯示所有加載的模塊。
- /SVC 顯示每個進程中主持的服務(wù)。
- /APPS 顯示 Microsoft Store 應(yīng)用及其關(guān)聯(lián)的進程。
- /V 顯示詳細任務(wù)信息。
- /FI filter 顯示一系列符合篩選器
- 指定條件的任務(wù)。
- /FO format 指定輸出格式。
- 有效值: "TABLE"、"LIST"、"CSV"。
- /NH 指定列標題不應(yīng)該
- 在輸出中顯示。
- 只對 "TABLE" 和 "CSV" 格式有效。
- /? 顯示此幫助消息。
- 篩選器:
- 篩選器名稱 有效運算符 有效值
- ----------- --------------- --------------------------
- STATUS eq, ne RUNNING | SUSPENDED
- NOT RESPONDING | UNKNOWN
- IMAGENAME eq, ne 映像名稱
- PID eq, ne, gt, lt, ge, le PID 值
- SESSION eq, ne, gt, lt, ge, le 會話編號
- SESSIONNAME eq, ne 會話名稱
- CPUTIME eq, ne, gt, lt, ge, le CPU 時間,格式為
- hh:mm:ss。
- hh - 小時,
- mm - 分鐘,ss - 秒
- MEMUSAGE eq, ne, gt, lt, ge, le 內(nèi)存使用(以 KB 為單位)
- USERNAME eq, ne 用戶名,格式為
- [域\]用戶
- SERVICES eq, ne 服務(wù)名稱
- WINDOWTITLE eq, ne 窗口標題
- 模塊 eq, ne DLL 名稱
- 注意: 當(dāng)查詢遠程計算機時,不支持 "WINDOWTITLE" 和 "STATUS"
- 篩選器。
- Examples:
- TASKLIST
- TASKLIST /M
- TASKLIST /V /FO CSV
- TASKLIST /SVC /FO LIST
- TASKLIST /APPS /FI "STATUS eq RUNNING"
- TASKLIST /M wbem*
- TASKLIST /S system /FO LIST
- TASKLIST /S system /U 域\用戶名 /FO CSV /NH
- TASKLIST /S system /U username /P password /FO TABLE /NH
- TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"
當(dāng)然解決問題只用了 tasklist /m filename.dll 一個命令就解決了,示例如下:
- F:\>tasklist /m msctf.dll
- 映像名稱 PID 模塊
- ========================= ======== ============================================
- svchost.exe 5844 MSCTF.dll
- igfxEM.exe 16560 MSCTF.dll
- igfxHK.exe 11336 MSCTF.dll
- igfxTray.exe 1060 MSCTF.dll
- explorer.exe 9848 MSCTF.dll
- taskhostw.exe 10932 MSCTF.dll
- ShellExperienceHost.exe 1684 msctf.dll
- SearchUI.exe 16576 msctf.dll
- RuntimeBroker.exe 16440 MSCTF.dll
- ApplicationFrameHost.exe 11612 MSCTF.dll
- SynTPEnh.exe 10604 MSCTF.dll
- WindowsInternal.Composabl 14508 msctf.dll
- MSASCuiL.exe 5724 MSCTF.dll
- RAVCpl64.exe 7132 MSCTF.dll
- Video.UI.exe 12716 msctf.dll
- ... //后續(xù)較多,故省略。
二、常用用法
1、查看本機進程
在"命令提示符"中輸入Tasklist命令即可顯示本機的所有進程(見下圖)。本機的顯示結(jié)果由5部分組成:圖像名(進程名)、PID、會話名、會話#和內(nèi)存使用。
- F:\>tasklist
- 映像名稱 PID 會話名 會話# 內(nèi)存使用
- ========================= ======== ================ =========== ============
- System Idle Process 0 Services 0 8 K
- System 4 Services 0 24 K
- Registry 120 Services 0 15,936 K
- smss.exe 416 Services 0 520 K
- csrss.exe 664 Services 0 1,968 K
- wininit.exe 768 Services 0 2,536 K
- services.exe 844 Services 0 5,836 K
- lsass.exe 864 Services 0 12,052 K
- svchost.exe 384 Services 0 568 K
- svchost.exe 596 Services 0 23,896 K
- fontdrvhost.exe 628 Services 0 936 K
- svchost.exe 1048 Services 0 11,536 K
- svchost.exe 1088 Services 0 5,008 K
- svchost.exe 1304 Services 0 5,528 K
- svchost.exe 1312 Services 0 7,152 K
- svchost.exe 1368 Services 0 4,944 K
- ... //進程太多,省略后續(xù)
2.查看遠程系統(tǒng)的進程
在命令提示符下輸入 以下命令:
- F:\>Tasklist /s 220.25.122.21 /u admin /p admin123
- >命令說明
- 220.25.122.21 //遠程系統(tǒng)的進程 ip 地址
- /u admin // admin 為Tasklist命令使用的用戶賬號,它必須是遠程系統(tǒng)上的一個合法賬號
- /p admin123 // Tasklist命令使用的用戶賬號對應(yīng)的密碼
注意:使用Tasklist命令查看遠程系統(tǒng)的進程時,需要遠程機器的RPC服務(wù)的支持,否則,該命令不能正常使用。
3.查看系統(tǒng)進程提供的服務(wù)
Tasklist命令不但可以查看系統(tǒng)進程,而且還可以查看每個進程提供的服務(wù)。如查看本機進程 SVCHOST.EXE 提供的服務(wù),在命令提示符下輸入如下命令。可以看到,有很多個SVCHOST.EXE 進程,對應(yīng)很多項服務(wù)使用這個進程。
- F:\>Tasklist /svchost
- 映像名稱 PID 服務(wù)
- ========================= ======== ============================================
- System Idle Process 0 暫缺
- System 4 暫缺
- Registry 120 暫缺
- smss.exe 416 暫缺
- csrss.exe 664 暫缺
- wininit.exe 768 暫缺
- services.exe 844 暫缺
- lsass.exe 864 KeyIso, SamSs, VaultSvc
- svchost.exe 384 PlugPlay
- svchost.exe 596 BrokerInfrastructure, DcomLaunch, Power, SystemEventsBroker
- fontdrvhost.exe 628 暫缺
- svchost.exe 1048 RpcEptMapper, RpcSs
- svchost.exe 1088 LSM
- svchost.exe 1304 bthserv
- svchost.exe 1312 BthAvctpSvc
- svchost.exe 1368 NcbService
- svchost.exe 1388 TimeBrokerSvc
- svchost.exe 1528 Schedule
- svchost.exe 1568 hidserv
- svchost.exe 1576 BFE, CoreMessagingRegistrar, mpssvc
- svchost.exe 1652 ProfSvc
- svchost.exe 1728 EventLog
- ...... //省略后續(xù)
對于遠程系統(tǒng)來說,查看系統(tǒng)服務(wù)也很簡單,使用 Tasklist /s 220.25.122.21 /u admin /p admin123 /svc 命令,就可以查看IP地址為 220.25.122.21 的遠程系統(tǒng)進程所提供的服務(wù)。
4.查看調(diào)用DLL模塊文件的進程列表
要查看本地系統(tǒng)中哪些進程調(diào)用了 shell32.dll 模塊文件,只需在命令提示符下輸入 Tasklist /m shell32.dll 即可顯示這些進程的列表。
上文已經(jīng)給過演示,參考下即可。
5.使用篩選器查找指定的進程
在命令提示符下輸入 TASKLIST /FI USERNAME ne NT AUTHORITY\SYSTEM /FI STATUS eq running ,就可以列出系統(tǒng)中正在運行的非 SYSTEM 狀態(tài)的所有進程。其中/FI為篩選器參數(shù),ne 和 eq 為關(guān)系運算符 "不相等" 和 "相等" 。
6、結(jié)束進程
1) Tasklist
談到Tasklist命令,我們就不得不提到它的孿生兄弟Taskkill命令,顧名思義,它是用來關(guān)掉進程的。
要關(guān)掉本機的notepad.exe進程,有兩種方法
- 先使用Tasklist查找它的PID,假設(shè)系統(tǒng)顯示本機 notepad.exe ( notepad.exe 是個病毒性程序,很難刪除,一般在C:/windows/system32下)進程的 PID 值為 1132,然后運行Taskkill /pid 1132命令即可。其中 /pid 參數(shù)后面是要終止進程的PID值。
- 直接運行taskkill /IM notepad.exe 命令,其中/IM參數(shù)后面為進程的圖像名。
詳細用法如下:
- F:\>help taskkill
- TASKKILL [/S system [/U username [/P [password]]]]
- { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
- 描述:
- 使用該工具按照進程 ID (PID) 或映像名稱終止任務(wù)。
- 參數(shù)列表:
- /S system 指定要連接的遠程系統(tǒng)。
- /U [domain\]user 指定應(yīng)該在哪個用戶上下文執(zhí)行這個命令。
- /P [password] 為提供的用戶上下文指定密碼。如果忽略,提示
- 輸入。
- /FI filter 應(yīng)用篩選器以選擇一組任務(wù)。
- 允許使用 "*"。例如,映像名稱 eq acme*
- /PID processid 指定要終止的進程的 PID。
- 使用 TaskList 取得 PID。
- /IM imagename 指定要終止的進程的映像名稱。通配符 '*'可用來
- 指定所有任務(wù)或映像名稱。
- /T 終止指定的進程和由它啟用的子進程。
- /F 指定強制終止進程。
- /? 顯示幫助消息。
- 篩選器:
- 篩選器名 有效運算符 有效值
- ----------- --------------- -------------------------
- STATUS eq, ne RUNNING |
- NOT RESPONDING | UNKNOWN
- IMAGENAME eq, ne 映像名稱
- PID eq, ne, gt, lt, ge, le PID 值
- SESSION eq, ne, gt, lt, ge, le 會話編號。
- CPUTIME eq, ne, gt, lt, ge, le CPU 時間,格式為
- hh:mm:ss。
- hh - 時,
- mm - 分,ss - 秒
- MEMUSAGE eq, ne, gt, lt, ge, le 內(nèi)存使用量,單位為 KB
- USERNAME eq, ne 用戶名,格式為 [domain\]user
- MODULES eq, ne DLL 名稱
- SERVICES eq, ne 服務(wù)名稱
- WINDOWTITLE eq, ne 窗口標題
- 說明
- ----
- 1) 只有在應(yīng)用篩選器的情況下,/IM 切換才能使用通配符 '*'。
- 2) 遠程進程總是要強行 (/F) 終止。
- 3) 當(dāng)指定遠程機器時,不支持 "WINDOWTITLE" 和 "STATUS" 篩選器。
- 例如:
- TASKKILL /IM notepad.exe
- TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
- TASKKILL /F /IM cmd.exe /T
- TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
- TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
- TASKKILL /S system /U 域\用戶名 /FI "用戶名 ne NT*" /IM *
- TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
2)、NTSD
系統(tǒng) debug 級的 ntsd,很多進程 Taskkill 是殺不了的,但是用ntsd就可以,基本上除了WINDOWS 系統(tǒng)自己的管理進程, ntsd 都可以殺掉,不過有些 rootkit 級別的超級木馬就無能為力了,不過幸好這類木馬還是很少的。
1、利用進程的PID結(jié)束進程
命令格式:ntsd -c q -p pid
命令范例: ntsd -c q -p 1332 (結(jié)束explorer.exe進程)
2、利用進程名結(jié)束進程
命令格式:ntsd -c q -pn ***.exe (***.exe 為進程名,exe不能省)
以上是對于 windows 平臺進程相關(guān)的一些命令以及相關(guān)問題的整理回顧。
1、文章參考
https://www.cnblogs.com/leipei2352/archive/2013/02/05/2892482.html