前两天一个朋友找我,说电脑最近老是无缘无故卡顿,风扇转得像开飞机。我让他打开任务管理器按CPU占用排序,排在第一的是一个他从没见过的进程,路径指向C盘Temp目录。再翻计划任务,发现一条“用户登录时自动运行”的隐藏任务,会在后台下载可执行文件,已经跑了好几天。这种“电脑在自己不知道的时候干别的事”的状态,其实比想象中常见得多。
所谓监控电脑,核心不是把自己变成网管,而是掌握一套方法:当电脑出现异常时,你能快速定位“什么东西在跑、它连了哪里、它改了什么、系统记了什么”。这篇文章我会按六个方向展开:前三个偏实时监测,分别是系统自带工具、网络连接和进程启动项;中间两个偏事后取证,分别是硬件温度与事件日志;最后一个讲文件层面的防护。每一块都会给到具体的操作步骤和判断标准,照着做就能上手。
1. 系统自带监控组合:任务管理器别只用来看CPU
1.1 任务管理器里的排序技巧
大部分人对任务管理器的使用停留在“看一眼CPU占用”的层面,这其实浪费了它最实用的能力。打开任务管理器最快的方式是Ctrl+Shift+Esc,进入“进程”标签页后,点击CPU、内存、磁盘列的表头进行降序排序,就能立刻看出是谁在吃资源。
但这里有个非常容易误判的点:占用高的进程不一定有问题。我自己排查过一台电脑,svchost.exe长期占CPU 20%以上,朋友以为是中毒,实际是Windows Update正在后台下载补丁,任务管理器里看进程路径也看不出名堂,因为svchost本身就是系统进程。所以你至少要观察两轮,间隔几分钟再排一次序,如果同一个进程持续高位且路径不在C:\Windows\System32等正常目录,才需要进一步处理。
遇到可疑进程后,第一时间右键选择“打开文件所在的位置”,看它到底从哪个目录启动。很多后台下载器就藏在C:\Users\你的用户名\AppData\Local\Temp或C:\ProgramData这类容易被忽略的目录里。如果文件位置打不开、提示没有权限,或者路径指向一个存储了中文名文件夹的奇怪目录,基本可以判定不是正经软件。
1.2 资源监视器:任务管理器看不到的读写细节
任务管理器能看到占用量,但看不到“进程到底在读写哪些文件、连接了哪个IP”。这就需要资源监视器登场。
打开方式:任务管理器 → “性能”标签页 → 底部“打开资源监视器”,或者直接Win+R输入resmon回车。
资源监视器最有价值的是三个模块:“磁盘活动”“网络活动”和“概述”。磁盘活动模块能按进程看读写字节数,比如某个你压根没打开的软件却在持续读写硬盘几百KB/s,说明它在后台干着什么;网络活动模块则能看到每个进程的活动TCP连接数和实时流量,这个在排查网络卡顿时尤其好用。
我遇到过一台办公电脑,无线网络每几分钟掉线一次,换驱动、关省电模式都没用。打开资源监视器,网络活动里看到一个老旧的软件更新组件在反复建立TCP连接,每次都卡在SYN_SENT状态,拖垮了网络栈。卸载那个组件后问题立刻消失。这种问题靠任务管理器根本看不出来,因为CPU和内存占用都很低,只有资源监视器能照出这种“暗流”。
判断网络活动是否异常,可以记住一个粗略经验:正常待机状态下,一个普通办公电脑的活动TCP连接大约在几十条以内;如果某个进程在短时间内不断闪现SYN_SENT或反复重启连接,就要留意了。点进程名展开它的TCP连接列表,把外部地址记下来,后续用netstat继续追。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络连接监控:一条netstat命令揪出偷偷联网的进程
2.1 netstat命令与PID反查
如果说资源监视器是可视化界面,netstat就是命令行版的“网络连接探测器”,也是我日常用得最多的排查手段。它在Windows、Linux、macOS上都有,语法也基本一致。
以Windows为例,在管理员权限的CMD或PowerShell中运行:
bash复制netstat -ano
几个参数各有用处:-a显示所有连接和监听端口,-n直接用IP和端口号显示而不是解析域名(解析域名反而慢且容易误导),-o显示每个连接对应的进程PID。
执行后,你会看到本机所有TCP和UDP连接。最需要盯的是ESTABLISHED状态的记录,这代表当前有程序正在和外部地址保持通信。比如公司内网的一台电脑,明明没开浏览器,却出现了大量指向陌生IP的ESTABLISHED连接,多半有问题。
拿到PID后怎么反查进程?打开任务管理器 → “详细信息”标签页,按PID排序找到对应进程,右键查看路径。也可以用PowerShell直接查:
powershell复制Get-Process -Id 12345 | Select-Object ProcessName, Path
把12345换成实际PID。这样一条命令就能知道“谁在连、连到哪、进程在哪”。
2.2 PowerShell精细筛选连接
netstat全量输出在连接多时刷屏严重,我一般会用筛选条件。比如只看已建立的连接:
powershell复制netstat -ano | findstr ESTABLISHED
或者只看某个端口的连接情况。更进阶的做法是用Get-NetTCPConnection,输出更结构化:
powershell复制Get-NetTCPConnection -State Established | Select-Object LocalPort, RemoteAddress, RemotePort, OwningProcess | Sort-Object RemoteAddress
这条命令会把所有已建立的连接按远程地址排序,一眼扫过去就能发现哪几个IP出镜率异常。查完远程IP后,把它丢到在线IP归属地查询网站,看它属于哪个地区、哪个云服务商。如果发现一个办公电脑频繁连接境外的IP,而你在那里没有业务也没有访问过相关网站,这就是一个很强的风险信号。
我处理过的一个真实案例:某软件的自动更新组件,平时静默无界面,每5分钟向一个俄罗斯IP发送一次短连接确认存活。从netstat里发现后,最直接的处理方式不是卸载软件(业务还用着),而是用防火墙出站规则禁止那个程序联网。操作方法:Win+R输入wf.msc打开高级安全Windows Defender防火墙 → 出站规则 → 新建规则 → 程序 → 粘贴程序路径 → 选择“阻止连接” → 命名保存。这个方案比杀毒软件更精准,专门治各种“软件没问题但行为可疑”的情况。
2.3 Wireshark抓包:需要实锤时的最后一步
netstat只能看到“有连接”,但如果要确认连接里传输了什么内容,就得抓包分析。Wireshark是这一类工具的行业标准,适合在netstat发现异常后进一步取证。
抓包听起来复杂,实际只要抓对关键信息就不难。打开Wireshark、选择正在用的网卡、点开始捕获,然后在显示过滤栏输入dns,就能看到所有域名解析请求——这能直接暴露哪些程序在解析哪些域名,很多恶意软件在启动时会先解析一个C2地址;输入http可以看到明文HTTP请求的URL(HTTPS流量看不到内容,但能看到连接的目标IP和端口)。
打个比方,DNS过滤相当于你站在门口看这个软件要往哪儿寄信,HTTP过滤是拆开信封看里面写了啥。有一次我抓包发现某台机器每隔一段时间就向一个IP发送一条几十字节的HTTP请求,内容是简单的机器信息上报。顺着TCP流追下去,定位到是一个预装软件在收集使用数据。没有抓包这一手,仅凭netstat你很难判断这些短连接到底是正常心跳还是数据外传。
3. 进程与启动项深挖:那些不会摆在明面上的隐患
3.1 Process Explorer:任务管理器的专业升级版
任务管理器在查看“哪些进程正在运行”时够用,但一旦涉及“这个进程的父进程是谁”“它由哪个服务拉起”“它的命令行参数是什么”,就显得力不从心。微软官方出品的Process Explorer(Sysinternals套件之一)就是用来补这些短板的。
它的核心优势有三个:
- 鼠标悬停在进程上,直接显示进程的完整路径和命令行参数
- 双击进程,能看到镜像信息、签名信息、TCP/IP标签页
- 进程列表呈树状结构,能看清父子关系
树状结构这个特性尤其有用。正常的系统进程层级是清晰的:system → smss.exe → csrss.exe/wininit.exe……如果发现explorer.exe(桌面进程)下面挂着一个名字完全陌生的子进程,这个子进程很可能是双击某个程序时被带起来的;如果winlogon.exe下面多了一个奇怪进程,已经是比较严重的信号了。
Process Explorer还自带一个很方便的功能:右键进程 → Check VirusTotal,会调用VirusTotal API对进程的可执行文件进行多引擎扫描。担心上传隐私的可以跳过这步,但对于那些“看起来像系统进程但路径不对劲”的案例,这个检测结果非常直观。
3.2 Autoruns:把所有开机启动项摊在桌面上
任务管理器的“启动”标签页只能看到少量常规启动项,更深层的藏在注册表Run键、计划任务、服务、驱动加载等位置,平时根本不会显示。Autoruns是Sysinternals套件里另一个神器,它会一次性把所有开机启动位置全部列出来。
下载后右键以管理员身份运行,切到“Logon”标签页,能看到登录时加载的所有程序。这里的关键操作是勾选列标题里的“Microsoft”过滤项——把微软签名的条目隐藏掉,剩下的基本就是需要关注的第三方程序。没有公司信息、没有签名的条目尤其要留意。
我习惯的处理流程是:先用Autoruns生成一份列表,找到可疑项后只取消勾选、不直接删除,重启电脑确认问题是否消失。如果没有副作用,再右键删除。直接删的风险在于,某些软件重启后又把自己写回去,或者你把一个看似可疑但实际被系统依赖的项删了导致后续启动报错。先禁用验证,是最稳妥的路径。
3.3 任务计划程序里的“定时炸弹”
很多人不知道,任务计划程序(taskschd.msc)是各类后台程序的藏身重灾区。挖矿程序、下载器、推广插件特别喜欢把自己注册成“登录时运行”或“系统启动时运行”的计划任务,因为这种位置不容易被普通用户注意到,还能设置成以最高权限运行。
排查方法:Win+R输入taskschd.msc打开任务计划程序,在“任务计划程序库”里按状态浏览。重点看两类任务:一是触发器为“登录时”或“启动时”的任务;二是操作是“启动程序”且程序路径不在常规目录的任务。双击任务查看“操作”标签页,如果看到执行的是powershell.exe配合一大段下载命令,或者指向C:\Users\...\AppData\...目录的exe,基本可以确定有问题。
我之前排查过一台每隔半小时闪一下cmd窗口的电脑,翻任务计划发现一条名称叫“system update”的任务,操作是执行PowerShell脚本从远程地址下载文件。这类任务往往伪装成看起来人畜无害的名字,但查看具体操作就露馅了。处理方式:右键禁用,重启后再删除任务本体和对应的脚本文件。
4. 硬件温度与资源负载:判断电脑是否被“借走”算力
4.1 温度、功耗和风扇转速都是监控信号
监控电脑时,大家往往只盯着软件层面,忽略了硬件状态。实际上硬件指标是判断电脑是否被后台程序“借走算力”的重要抓手。
如果你没在运行大软件,电脑却出现以下组合特征——待机温度比平时高十几度、风扇持续高速运转、笔记本续航明显下降——那大概率有进程在后台满负荷运行。典型的就是挖矿木马或网页挖矿脚本,它们会直接把CPU或GPU推向100%,而这些负载不会体现在你正在使用的软件上。
以我经手的一个案例为例,一台台式机平时待机CPU温度50度左右,有天突然干到80度,风扇声音比游戏还大。打开任务管理器发现CPU占用只有20%多,但看HWiNFO里的单个核心温度,有几个核心已经撞了温度墙。反复排查后锁定是某个后台服务在持续唤醒GPU做计算,虽然CPU显示不算高,但实际整机功耗一直维持在比较高的水平。只看任务管理器可能被表面的20%骗过去,但硬件传感器不会说谎。
4.2 HWiNFO的实用读数方式
HWiNFO64是我常用的硬件监控工具,免费且传感器信息完整。建议下载便携版,首次启动时勾选Sensors-only模式,只显示传感器数据,不做性能测试和配置界面。
打开后重点看这几项:
CPU Package温度:CPU整体温度,决定是否过热的直接指标CPU Core #1~#8:单核心温度,能看出是否存在单核异常占用GPU Temperature:显卡核心温度CPU风扇/机箱风扇转速:转速异常偏高说明散热在满载CPU Package Power:整颗CPU的实际功耗,能侧面反映负载情况
参考阈值方面,不同处理器差异很大,不能一概而论。比较粗糙的经验是:台式机CPU待机40~60度,满载80~95度;笔记本因为散热空间小,满载90度以上也常见。重点是建立一个“这台机器自己的基线”——你可以让电脑空置10分钟记下温度值,再运行一个普通的日常软件记下温度值,一旦某天在同样状态下明显超出基线,就要警惕后台进程了。
HWiNFO还支持记录日志,在设置里打开Logging并设置刷新间隔,就能导出一段时间内的温度变化曲线。排查那种“偶尔抽风”的异常非常有帮助——下次异常发生时翻日志,看那个时间段CPU功耗是不是突然拉高,再对上系统日志里当时的进程记录,基本就能锁定目标。
4.3 高温不一定是中毒,别把正常故障误判成风险
温度高这个指标只能说明“有高负载”,不能直接说明“有毒”。积灰导致散热变差、硅脂老化、风扇故障,同样会让温度异常。我见过有人误把老化硅脂导致的CPU降频当成中毒,折腾半天杀毒软件,最后清灰换硅脂就好了。
所以硬件监控的定位应该是“配合使用”:温度异常帮你确认“这台机器处于非正常的高负载状态”,之后再结合任务管理器和netstat查“是什么进程造成的高负载”。两者配合,才能避免把硬件故障误判为安全问题,也不会把真正的后台挖矿程序当成散热不行。
除了HWiNFO,Open Hardware Monitor也是不错的备选,界面稍老旧但胜在便携轻量,适合留在U盘里应急。两者选其一即可,没必要同时装。
5. 事件日志监控:用系统自己的记录还原“案发经过”
5.1 事件ID就是系统自带的事故记录
Windows每时每刻都在往事件日志里写入各种记录,只是绝大多数人不知道怎么读。如果电脑出现了异常关机、登录失败、权限变更等问题,事件查看器能提供比任何第三方软件都权威的“第一手证据”。
打开方式:Win+R输入eventvwr.msc,进入“Windows日志”下的“安全”“系统”“应用程序”三个子项。系统日志记录硬件、驱动、系统服务层面的事件;安全日志记录登录、权限变更等与安全相关的事件;应用程序日志记录软件运行层面的错误和警告。
要读懂安全日志,关键看几类事件ID:
| 事件ID | 含义 |
|---|---|
| 4624 | 登录成功 |
| 4625 | 登录失败 |
| 4634 / 4647 | 注销 / 用户主动注销 |
| 4672 | 授予特权限登录 |
| 4720 | 创建用户账户 |
| 4740 | 账户被锁定 |
5.2 开启登录审核:让系统开始记录登录行为
默认情况下,部分Windows版本的登录成功事件并不完整记录,尤其是不需要加入域的家庭版和单机环境。如果想用安全日志做监控,需要先把审核策略打开。
操作步骤:Win+R输入gpedit.msc打开本地组策略编辑器(家庭版没有这个命令,可以用secpol.msc本地安全策略替代)→ 计算机配置 → Windows设置 → 安全设置 → 本地策略 → 审核策略 → 双击“审核登录事件” → 勾选“成功”和“失败” → 确定。
设置完成后,每次登录、注销、尝试登录(包括失败登录)都会被记录到安全日志里。这时候再回来看4624事件,注意其中的“登录类型”字段:2表示本地键盘输入(有人坐在电脑前)、3表示从网络共享访问、10表示远程交互登录(比如远程桌面)。如果某天半夜出现了一条登录类型为3的4624事件,来源IP是局域网内的另一台设备,而你并没有开放共享访问,这就很值得深挖了。
另外一个实用的监控点是4625登录失败事件。如果安全日志里某个账户在很短时间内出现几十上百条4625,说明有人在对这个账户尝试爆破。这类情况不需要惊慌,但至少说明这台机器已经暴露在某种网络扫描或暴力破解攻击之下,需要检查账户密码强度、关闭不必要的共享端口。
5.3 从系统日志反查异常关机与蓝屏
除了安全日志,系统日志里也有大量排查线索。比如:
- 事件ID 41(Kernel-Power):系统未正常关机就断电或蓝屏
- 事件ID 6008:记录了上次异常关机的时间
- 事件ID 6005 / 6006:日志服务启动 / 停止,也就是开机 / 关机时间点
- 事件ID 1001:蓝屏记录(BugCheck)
这些事件组合在一起,可以还原一台电脑最近一段时间的“作息表”。我之前帮人排查过一台每天的凌晨两点左右自动重启的电脑,安全日志里没有登录记录,系统日志里却固定出现6008日志服务意外停止,说明是系统层面被强制重启。最后定位到是电源管理的高级设置里设置了固定时间重启,属于策略问题,不是安全问题。
如果想快速筛查特定事件,使用“筛选当前日志”功能,输入事件ID,用英文逗号分隔(例如4624, 4625, 4634),就能把关心的几类事件单独过滤出来,避免在一大堆日志里翻找。
6. 文件与目录监控:防住悄悄落盘的改动
6.1 Windows审核策略:目录级别的事后记录
桌面端电脑可以把监控粒度细化到具体文件夹——一旦有人(或某个进程)在这个目录下创建、修改、删除文件,系统都会写入安全日志。这个功能叫“文件系统审核策略”。
配置方法:右键要监控的文件夹 → 属性 → 安全 → 高级 → 审核 → 添加 → 在“选择主体”里输入Everyone → 选择“读取属性”“列出文件夹/读取数据”“创建文件/写入数据”“删除”等权限类型 → 确定。之后在安全日志中筛选事件ID 4663,就能看到对该目录的访问尝试记录,包括访问进程的完整路径。
需要注意,这种方式依赖本地安全策略的“审核对象访问”开关,且开启后会产生大量审计日志,因此不推荐对整个磁盘开启审核。我只对真正重要的目录设置,比如代码仓库、配置文件备份目录、对外发布的网站根目录。设置好后,系统会记录每一次对关键文件的操作,这在排查“网站文件被篡改”“源码被恶意修改”时是很硬的证据。
6.2 不折腾策略的PowerShell轻量轮询
如果你用的是家庭版Windows,或者不想开启审计策略导致日志泛滥,可以用一个简单的PowerShell脚本做轮询监控。原理很朴素:每隔一分钟记录一下目标目录下所有文件的最后修改时间,如果发生变化就输出提示。
powershell复制$path = "D:\important"
$last = @{}
Get-ChildItem -Path $path -Recurse -File | ForEach-Object {
$last[$_.FullName] = $_.LastWriteTime
}
while ($true) {
Start-Sleep -Seconds 60
Get-ChildItem -Path $path -Recurse -File | ForEach-Object {
if ($_.LastWriteTime -ne $last[$_.FullName]) {
Write-Host "$(Get-Date) 文件发生变化: $($_.FullName) | 上次修改: $($last[$_.FullName])"
$last[$_.FullName] = $_.LastWriteTime
}
}
}
运行方式:把脚本保存为.ps1文件,在PowerShell中执行。注意首次运行时需要可能调整执行策略:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass。
这段脚本的局限在于只记录文件是否变化,不记录是谁改的、怎么改的。作为轻量方案够用,比如用来监控某个配置目录是否被程序擅自修改。优点是零依赖,任何装了Windows的电脑都能跑,也不需要额外安装软件。缺点是没有图形界面,输出只能靠控制台,长期运行建议把输出重定向到一个日志文件。
6.3 工具快照辅助:不动系统配置的快速体检
如果不想写脚本也不想开审计策略,还有一种更轻量的方式:用目录快照工具给文件系统“拍快照”,然后对比前后差异。FolderChangesView是这类工具里比较实用的一款,打开后选择要监控的目录,点“开始扫描”,几秒钟后就能列出该目录下所有最近被创建、删除、修改的文件,按照时间排序,非常直观。
设想一个场景:你怀疑某个软件在每次开机时往系统目录里写入文件,正常浏览文件管理器很难发现,快照工具跑一下,立刻就能看到新增了几个dll、改了哪个配置文件。这个工具适合做“定点体检”,不长期运行,想查的时候跑一下就行,也没有常驻内存和日志膨胀的问题。
写在最后
整套方法用下来,我自己习惯的顺序是:先系统自带工具,任务管理器和资源监视器锁定大致方向;再用netstat确认网络连接是否有可疑目标;然后用Process Explorer和Autoruns顺着进程树和启动项深挖;硬件温度作为辅助信号;事件日志负责事后还原证据;最后用文件监控兜底保护关键目录。
这里有个容易被忽略的原则:监控本身不是目的,判断“有没有问题”才是目的。暴力断网、重装系统把问题清掉并不难,难的是搞明白到底发生了什么、下次怎么防。上面这6个方法,本质上是把“发生了什么”的信息从不同层面收集起来,让你在异常出现时不用靠猜,而是靠数据。
如果你刚接触这块,不需要一上来就把全套工具装齐。建议先从任务管理器加资源监视器开始,再掌握netstat命令,这两个工具不装任何软件就能用,也足够应付绝大多数“电脑卡顿/占用异常/偷偷联网”的情况。跑熟之后再逐步引入Process Explorer、Autoruns和事件查看器,慢慢就能建立起自己的排查感觉。
