Windows 進(jìn)程你需要知道的技巧
問(wèn)題引入
不知道大家最近工作生活中有沒有碰到這樣的問(wèn)題:
1、卸載程序,結(jié)果沒卸載干凈
程序的安裝目錄中還剩下一個(gè)dll文件。想刪,結(jié)果系統(tǒng)提示說(shuō)dll文件被某個(gè)進(jìn)程占用了,不讓刪。
2、安裝軟件后需要破解或者修改一些配置,通常會(huì)有替換配置文件 dll 文件。但是有些情況當(dāng)安裝軟件時(shí)
其服務(wù)默認(rèn)是自動(dòng)開啟的,此時(shí)也就會(huì)用到對(duì)應(yīng)的 dll 文件,這個(gè)時(shí)候在進(jìn)行更改就會(huì)出現(xiàn)異常,
windows 會(huì)提示該文件已被某個(gè)進(jìn)程占用。
我最近在安裝一個(gè)服務(wù)組件的軟件時(shí),因?yàn)槠鋬?nèi)置了一個(gè) sql 數(shù)據(jù)庫(kù)程序,當(dāng)時(shí)沒留意。再替換配置文件 時(shí)才發(fā)現(xiàn) dll 文件被某個(gè)進(jìn)程占用了。重啟程序、重啟電腦都未能解決,問(wèn)題就指向了一個(gè)原因,那就是該服務(wù)是自動(dòng)開啟的,即 windows 開機(jī)就自動(dòng)開啟,因而也就會(huì)一直占用該 dll 文件。
但是通過(guò) windows 的服務(wù)列表界面有很多服務(wù)一眼也看不出是哪個(gè)服務(wù)占用。(當(dāng)然對(duì)啟動(dòng)的服務(wù)都很了解的話,就會(huì)知道安裝一個(gè)軟件會(huì)有哪些服務(wù)被啟動(dòng)。)
被這個(gè)問(wèn)題卡住了,搜索了半天資料找到了下面這個(gè)神器:tasklist。(好吧,承認(rèn)是windows平臺(tái)的底層操作不熟,但是解決問(wèn)題過(guò)程中學(xué)習(xí)成長(zhǎng)還是很有成就感的不是,相信你也有這體會(huì)。)
關(guān)于 dll 文件
DLL ( Dynamic Link Library ) 文件為動(dòng)態(tài)鏈接庫(kù)文件,又稱“應(yīng)用程序拓展”,是軟件文件類型。
在 Windows 中,許多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們被分割成一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈接庫(kù),即DLL文件,放置于系統(tǒng)中。當(dāng)我們執(zhí)行某一個(gè)程序時(shí),相應(yīng)的 DLL 文件就會(huì)被調(diào)用。一個(gè)應(yīng)用程序可使用多個(gè)DLL文件,一個(gè)DLL文件也可能被不同的應(yīng)用程序使用。
1、 作用
- 在 Windows操作系統(tǒng)中,每個(gè)程序都可以使用該 DLL中包含的功能來(lái)實(shí)現(xiàn)“打開”對(duì)話框。這有助于促進(jìn)代碼重用和內(nèi)存的有效使用。
- 通過(guò)使用 DLL,程序可以實(shí)現(xiàn)模塊化,由相對(duì)獨(dú)立的組件組成。 因?yàn)槟K是彼此獨(dú)立的,所以程序的加載速度更快,而且模塊只在相應(yīng)的功能被請(qǐng)求時(shí)才加載。
- 此外,可以更為容易地將更新應(yīng)用于各個(gè)模塊,而不會(huì)影響該程序的其他部分。
2、 特點(diǎn)
- 使用較少的資源
- 推廣模塊式體系結(jié)構(gòu)
三、 簡(jiǎn)化部署和安裝
利器登場(chǎng)
一、用法明細(xì)
tasklist 這個(gè)命令還是很好使的,先看下用法手冊(cè):
- F:\>help tasklist
- TASKLIST [/S system [/U username [/P [password]]]]
- [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
- 描述:
- 該工具顯示在本地或遠(yuǎn)程機(jī)器上當(dāng)前運(yùn)行的進(jìn)程列表。
- 參數(shù)列表:
- /S system 指定連接到的遠(yuǎn)程系統(tǒng)。
- /U [domain\]user 指定應(yīng)該在哪個(gè)用戶上下文執(zhí)行這個(gè)命令。
- /P [password] 為提供的用戶上下文指定密碼。如果省略,則
- 提示輸入。
- /M [module] 列出當(dāng)前使用所給 exe/dll 名稱的所有任務(wù)。
- 如果沒有指定模塊名稱,顯示所有加載的模塊。
- /SVC 顯示每個(gè)進(jìn)程中主持的服務(wù)。
- /APPS 顯示 Microsoft Store 應(yīng)用及其關(guān)聯(lián)的進(jìn)程。
- /V 顯示詳細(xì)任務(wù)信息。
- /FI filter 顯示一系列符合篩選器
- 指定條件的任務(wù)。
- /FO format 指定輸出格式。
- 有效值: "TABLE"、"LIST"、"CSV"。
- /NH 指定列標(biāo)題不應(yīng)該
- 在輸出中顯示。
- 只對(duì) "TABLE" 和 "CSV" 格式有效。
- /? 顯示此幫助消息。
- 篩選器:
- 篩選器名稱 有效運(yùn)算符 有效值
- ----------- --------------- --------------------------
- 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 會(huì)話編號(hào)
- SESSIONNAME eq, ne 會(huì)話名稱
- CPUTIME eq, ne, gt, lt, ge, le CPU 時(shí)間,格式為
- hh:mm:ss。
- hh - 小時(shí),
- mm - 分鐘,ss - 秒
- MEMUSAGE eq, ne, gt, lt, ge, le 內(nèi)存使用(以 KB 為單位)
- USERNAME eq, ne 用戶名,格式為
- [域\]用戶
- SERVICES eq, ne 服務(wù)名稱
- WINDOWTITLE eq, ne 窗口標(biāo)題
- 模塊 eq, ne DLL 名稱
- 注意: 當(dāng)查詢遠(yuǎn)程計(jì)算機(jī)時(shí),不支持 "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)然解決問(wèn)題只用了 tasklist /m filename.dll 一個(gè)命令就解決了,示例如下:
- 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、查看本機(jī)進(jìn)程
在"命令提示符"中輸入Tasklist命令即可顯示本機(jī)的所有進(jìn)程(見下圖)。本機(jī)的顯示結(jié)果由5部分組成:圖像名(進(jìn)程名)、PID、會(huì)話名、會(huì)話#和內(nèi)存使用。
- F:\>tasklist
- 映像名稱 PID 會(huì)話名 會(huì)話# 內(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
- ... //進(jìn)程太多,省略后續(xù)
2.查看遠(yuǎn)程系統(tǒng)的進(jìn)程
在命令提示符下輸入 以下命令:
- F:\>Tasklist /s 220.25.122.21 /u admin /p admin123
- >命令說(shuō)明
- 220.25.122.21 //遠(yuǎn)程系統(tǒng)的進(jìn)程 ip 地址
- /u admin // admin 為Tasklist命令使用的用戶賬號(hào),它必須是遠(yuǎn)程系統(tǒng)上的一個(gè)合法賬號(hào)
- /p admin123 // Tasklist命令使用的用戶賬號(hào)對(duì)應(yīng)的密碼
注意:使用Tasklist命令查看遠(yuǎn)程系統(tǒng)的進(jìn)程時(shí),需要遠(yuǎn)程機(jī)器的RPC服務(wù)的支持,否則,該命令不能正常使用。
3.查看系統(tǒng)進(jìn)程提供的服務(wù)
Tasklist命令不但可以查看系統(tǒng)進(jìn)程,而且還可以查看每個(gè)進(jìn)程提供的服務(wù)。如查看本機(jī)進(jìn)程 SVCHOST.EXE 提供的服務(wù),在命令提示符下輸入如下命令??梢钥吹剑泻芏鄠€(gè)SVCHOST.EXE 進(jìn)程,對(duì)應(yīng)很多項(xiàng)服務(wù)使用這個(gè)進(jìn)程。
- 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ù)
對(duì)于遠(yuǎn)程系統(tǒng)來(lái)說(shuō),查看系統(tǒng)服務(wù)也很簡(jiǎn)單,使用 Tasklist /s 220.25.122.21 /u admin /p admin123 /svc 命令,就可以查看IP地址為 220.25.122.21 的遠(yuǎn)程系統(tǒng)進(jìn)程所提供的服務(wù)。
4.查看調(diào)用DLL模塊文件的進(jìn)程列表
要查看本地系統(tǒng)中哪些進(jìn)程調(diào)用了 shell32.dll 模塊文件,只需在命令提示符下輸入 Tasklist /m shell32.dll 即可顯示這些進(jìn)程的列表。
上文已經(jīng)給過(guò)演示,參考下即可。
5.使用篩選器查找指定的進(jìn)程
在命令提示符下輸入 TASKLIST /FI USERNAME ne NT AUTHORITY\SYSTEM /FI STATUS eq running ,就可以列出系統(tǒng)中正在運(yùn)行的非 SYSTEM 狀態(tài)的所有進(jìn)程。其中/FI為篩選器參數(shù),ne 和 eq 為關(guān)系運(yùn)算符 "不相等" 和 "相等" 。
6、結(jié)束進(jìn)程
1) Tasklist
談到Tasklist命令,我們就不得不提到它的孿生兄弟Taskkill命令,顧名思義,它是用來(lái)關(guān)掉進(jìn)程的。
要關(guān)掉本機(jī)的notepad.exe進(jìn)程,有兩種方法
- 先使用Tasklist查找它的PID,假設(shè)系統(tǒng)顯示本機(jī) notepad.exe ( notepad.exe 是個(gè)病毒性程序,很難刪除,一般在C:/windows/system32下)進(jìn)程的 PID 值為 1132,然后運(yùn)行Taskkill /pid 1132命令即可。其中 /pid 參數(shù)后面是要終止進(jìn)程的PID值。
- 直接運(yùn)行taskkill /IM notepad.exe 命令,其中/IM參數(shù)后面為進(jìn)程的圖像名。
詳細(xì)用法如下:
- F:\>help taskkill
- TASKKILL [/S system [/U username [/P [password]]]]
- { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
- 描述:
- 使用該工具按照進(jìn)程 ID (PID) 或映像名稱終止任務(wù)。
- 參數(shù)列表:
- /S system 指定要連接的遠(yuǎn)程系統(tǒng)。
- /U [domain\]user 指定應(yīng)該在哪個(gè)用戶上下文執(zhí)行這個(gè)命令。
- /P [password] 為提供的用戶上下文指定密碼。如果忽略,提示
- 輸入。
- /FI filter 應(yīng)用篩選器以選擇一組任務(wù)。
- 允許使用 "*"。例如,映像名稱 eq acme*
- /PID processid 指定要終止的進(jìn)程的 PID。
- 使用 TaskList 取得 PID。
- /IM imagename 指定要終止的進(jìn)程的映像名稱。通配符 '*'可用來(lái)
- 指定所有任務(wù)或映像名稱。
- /T 終止指定的進(jìn)程和由它啟用的子進(jìn)程。
- /F 指定強(qiáng)制終止進(jìn)程。
- /? 顯示幫助消息。
- 篩選器:
- 篩選器名 有效運(yùn)算符 有效值
- ----------- --------------- -------------------------
- 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 會(huì)話編號(hào)。
- CPUTIME eq, ne, gt, lt, ge, le CPU 時(shí)間,格式為
- hh:mm:ss。
- hh - 時(shí),
- 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 窗口標(biāo)題
- 說(shuō)明
- ----
- 1) 只有在應(yīng)用篩選器的情況下,/IM 切換才能使用通配符 '*'。
- 2) 遠(yuǎn)程進(jìn)程總是要強(qiáng)行 (/F) 終止。
- 3) 當(dāng)指定遠(yuǎn)程機(jī)器時(shí),不支持 "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 級(jí)的 ntsd,很多進(jìn)程 Taskkill 是殺不了的,但是用ntsd就可以,基本上除了WINDOWS 系統(tǒng)自己的管理進(jìn)程, ntsd 都可以殺掉,不過(guò)有些 rootkit 級(jí)別的超級(jí)木馬就無(wú)能為力了,不過(guò)幸好這類木馬還是很少的。
1、利用進(jìn)程的PID結(jié)束進(jìn)程
命令格式:ntsd -c q -p pid
命令范例: ntsd -c q -p 1332 (結(jié)束explorer.exe進(jìn)程)
2、利用進(jìn)程名結(jié)束進(jìn)程
命令格式:ntsd -c q -pn ***.exe (***.exe 為進(jìn)程名,exe不能?。?/p>
以上是對(duì)于 windows 平臺(tái)進(jìn)程相關(guān)的一些命令以及相關(guān)問(wèn)題的整理回顧。
1、文章參考
https://www.cnblogs.com/leipei2352/archive/2013/02/05/2892482.html