很多人判断电脑有没有中病毒,习惯是 Ctrl 加 Shift 加 Esc 打开任务管理器看一眼。问题是这个默认视图只展示它认为你需要看的部分:没有命令行,没有父进程,驱动级常驻它根本不显示。下面四步把它补成一个能看事的工具。
第一步:先把任务管理器调成能看事的模式
| 想看到什么 | 在哪里开 | 为什么重要 |
|---|---|---|
| 命令行 | 任务管理器 → 详细信息 → 右键列标题 → 选择列 | 同一个名字,启动参数不同就是完全不同的东西 |
| PID 与状态 | 同上 | 后续所有命令都靠 PID 对得上 |
| 所有用户的进程 | 以管理员身份打开任务管理器并点那一行提示 | 不点的话服务类进程根本不显示 |
| 服务列表 | 任务管理器的服务页签,或 services.msc | 很多常驻以服务形式存在,不在进程页面上 |
| 父进程 | 任务管理器里没有这一列 | 必须用命令查,见第二步 |
这一步不伤系统,但能避免八成的误判:比如看到两个同名的浏览器进程就以为中了病毒,其实那只是多标签页的正常结构。
第二步:把进程连同它的来路一起导出
# 进程、PID、父进程号、可执行路径和完整命令行一次列出
Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId, Name, ExecutablePath, CommandLine | Format-Table -Wrap
# 只看从非常规目录启动的进程(没有路径的系统进程会被排除)
Get-CimInstance Win32_Process | Where-Object { $_.ExecutablePath -and $_.ExecutablePath -notlike 'C:\Windows\*' } | Select-Object Name, ProcessId, ExecutablePath
重点看三列。路径在 Temp、AppData 里一个随机命名的子目录里,这是强信号;名字看着人畜无害但路径不对,也是强信号;同名但路径在正常的安装目录里,基本正常。
第三步:顺出父进程,知道它是谁启动的
# 把 4321 换成可疑进程的 PID,先看它自己
$p = Get-CimInstance Win32_Process -Filter 'ProcessId = 4321'
$p | Select-Object Name, ExecutablePath, CommandLine
# 再看是谁把它启动起来的
Get-CimInstance Win32_Process -Filter ('ProcessId = ' + $p.ParentProcessId) | Select-Object Name, ExecutablePath
这一步的价值在于定位入口。如果父进程是浏览器,大概率是下载或扩展带出来的;如果是 Office 相关进程,就是文档带宏;如果是一个正常的更新程序,你可能只是碰上了一个合法的临时进程。同一行命令还能帮你区分“入侵”和“某个软件自己的更新子进程”。
第四步:驱动级与无文件的东西不在进程表里
# 驱动级常驻不会出现在进程列表里,单独看
Get-CimInstance Win32_SystemDriver | Select-Object Name, State, PathName | Where-Object { $_.PathName -notlike 'C:\Windows\*' }
到这里为止,一个普通用户能自己看到的层面基本齐了。再往下(内核隐藏、引导区感染)已经不是任务管理器能解决的,也不是手工删文件能处理的,得靠离线扫描或者重装。
五种“看不见”分别是什么原因
| 看不见的真实原因 | 为什么看不到 | 怎么看到 |
|---|---|---|
| 它以服务或系统账户身份运行 | 没开全部用户进程时不显示 | 管理员打开任务管理器并点提示行 |
| 它没有窗口、也没在任务栏注册 | 只会出现在详细信息页 | 看详细信息页加命令行 |
| 它挂靠在 svchost 或 rundll32 里 | 名字完全正常,看着不像问题 | 看命令行参数与被加载的模块 |
| 它是内核驱动 | 根本不属于进程列表 | 用上面第三条命令查驱动 |
| 它主动隐藏(常规任务管理器刷不过) | 现在很少见,多伴随其他异常 | 用安全模式或离线扫描 |
什么时候不要自己查
三件事。公司配发且有域策略的机器,把现象告诉 IT,自己动服务会破坏他们的判断依据。需要取证的情况(涉钱、涉客户数据),先保留现场和日志再处理,杀一个进程会毁掉溯源的可能。已经出现蓝屏、随机重启、安全软件自己被关掉又退不掉这种情况,不要再手工删驱动,先做一次离线扫描再决定重装。
最后一句
任务管理器是一个默认隐藏了很多东西的查看器。把列名补全、把命令行和父进程拿到手,你就能从“看着吓人”转成“能判断这个东西是谁带进来的”,后者才是处置的前提。