不是单点故障,而是长期策略漂移
最初症状是 Windows 安全中心空白,防护与防火墙入口无法打开;但命令行防火墙规则仍在。随后又出现 Windows Update 持续失败,报错多次指向 0x800f081f。
这类问题最容易走向“重装系统”,但也最容易忽略策略层被持续改写的事实。整个复盘采用的协作方式是:Agent 负责只读探测与推理链,写入动作由人工在管理员终端执行并回传结果。
真实复盘:Defender 策略关停 + 更新源劫持叠加,如何在长上下文里让 Agent 自主排查、证伪与沉淀脚本
通过邀请链接注册 Cursor,首月 Pro / Pro+ / Ultra 立享 5 折:
👉 立即注册(首月 5 折)最初症状是 Windows 安全中心空白,防护与防火墙入口无法打开;但命令行防火墙规则仍在。随后又出现 Windows Update 持续失败,报错多次指向 0x800f081f。
这类问题最容易走向“重装系统”,但也最容易忽略策略层被持续改写的事实。整个复盘采用的协作方式是:Agent 负责只读探测与推理链,写入动作由人工在管理员终端执行并回传结果。
第一轮探测命令聚焦服务态、策略键、组策略来源和 Defender 历史威胁记录。四条命令就锁定了核心证据。
Get-Service wscsvc, mpssvc, BFE, WinDefend, WdNisSvc, SecurityHealthService reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender" /s gpresult /scope:computer /r | Select-String -Pattern "Windows Defender" Get-MpThreatDetection | Select ThreatName, Resources, InitialDetectionTime
关键结论:DisableAntiSpyware=1 与 VirTool:Win32/DefenderTamperingRestore 同时命中,说明 Defender 不只是“没启动”,而是长期被策略压制并反复篡改。
sc 别名误导早期脚本中的 sc config 在 PowerShell 下会撞到别名,表现为看似无关的参数错误。复查后应改为 sc.exe 或 Set-Service。
Get-Command sc Set-Service -Name WinDefend -StartupType Automatic Set-Service -Name SecurityHealthService -StartupType Manual
这一段体现了 Agent 的价值:不是死扛旧答案,而是先验证再修正。
1058 本质是顺序错误导致在禁用态尝试启动服务;拒绝访问 5 则是 ACL 边界问题,管理员权限不等于可改所有安全服务。
对 SecurityHealthService 这类受保护服务,常规管理员写入会被拒绝,需要改走更稳妥路径。
当 SYSTEM 方案受网络链路影响失败时,可退回注册表服务键处理。服务启动值语义如下:
| Start | 启动类型 |
|---|---|
| 2 | 自动(Automatic) |
| 3 | 手动(Manual) |
| 4 | 禁用(Disabled) |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecurityHealthService
将 Start 从 4 调整回 3 后,启动类型恢复,但运行态手动拉起仍可能失败。
SecurityHealthService 涉及受保护进程机制。实践上,修正策略和启动配置后直接重启,比在运行态反复 Start-Service 更有效。
Get-Service WinDefend, SecurityHealthService | Format-Table Name, Status, StartType -AutoSize
重启后两者同时恢复,安全中心 UI 随之恢复可用。
Trojan:Win32/Wacatac.B!ml Adware:Win32/Tnega HackTool:Win32/AutoKMS HackTool:Win32/AutoKMS!pz VirTool:Win32/DefenderTamperingRestore
面对 0x800f081f,先查策略再查组件。Agent 优先读取 Windows Update 策略键,而不是直接开跑大修复。
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'
命中 WUServer、WUStatusServer、UseWUServer=1 后,说明更新源已偏离默认路径。再结合 DNS 解析结果和本机进程态,补齐“策略改写 + fake-ip 拦截”的双层闭环。
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer /f reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUStatusServer /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f
net stop wuauserv net stop bits net stop cryptsvc net stop dosvc Rename-Item C:\Windows\SoftwareDistribution SoftwareDistribution.old -Force Rename-Item C:\Windows\System32\catroot2 catroot2.old -Force net start cryptsvc net start bits net start wuauserv net start dosvc
DISM /Online /Cleanup-Image /RestoreHealth sfc /scannow
排障结束后,把探测命令固化为脚本比“记住一次答案”更有价值。脚本建议分为 Defender 线和 Update 线,两段输出并附判读提示。
# scripts/Diagnose-WindowsHealth.ps1
Get-Service wscsvc, mpssvc, BFE, WinDefend, WdNisSvc, SecurityHealthService
$policy = Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender' -ErrorAction SilentlyContinue
if ($policy.DisableAntiSpyware -eq 1) { Write-Warning "DisableAntiSpyware=1" }
Get-MpThreatDetection | Where-Object { $_.ThreatName -like '*Tampering*' }
$wu = Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' -ErrorAction SilentlyContinue
if ($wu.WUServer) { Write-Warning "WUServer: $($wu.WUServer)" }
完成 Win10 修复后,可让 Agent 用硬件清单命令快速评估 Win11 条件。若 CPU 不在官方支持序列,建议优先保证现有系统稳定运行。
Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber, BiosFirmwareType, CsTotalPhysicalMemory, CsModel Get-CimInstance Win32_Processor | Select-Object Name, Manufacturer, NumberOfCores Get-Tpm Confirm-SecureBootUEFI
sc 别名坑:PowerShell 下优先用 sc.exe 或 Set-Service。Get-MpThreatDetection 是低成本取证入口。DisableAntiSpyware 与关键服务状态。