ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

一条命令禁用 Windows Defender:no-defender 使用、验证与撤销全解

一条命令禁用 Windows Defender:no-defender 使用、验证与撤销全解

一条命令禁用 Windows Defender:no-defender 使用、验证与撤销全解

【免费下载链接】no-defenderA slightly more fun way to disable windows defender + firewall. (through the WSC api)项目地址: https://gitcode.com/GitHub_Trending/no/no-defender

部署脚本在隔离测试环境里总被实时保护拦下,最直接的办法是禁用 Windows Defender并连带关掉防火墙,用完再一键还原,需要时还能跨重启保持关闭。开源工具 no-defender 做的就是这件事。本文覆盖它的工作原理、分场景命令、防火墙开关验证与故障定位。

它凭什么能关掉:走 WSC 接口的"已就位"上报

Windows 安全中心(WSC)有一条老规矩:杀毒产品可以向系统上报"本机已有第三方杀毒在场",收到上报后系统会自动停用 Defender,避免双重防护冲突。对应的 WSC API 没有公开文档,官方文档需要与 Microsoft 签 NDA 才能拿到,所以多数土办法只能停服务、改组策略,容易被系统打回去。

no-defender 走的是真实杀毒软件同一条正路:通过 WSC 接口上报一个"虚拟杀毒在场",Defender 随即自行让位;防火墙也随同一条上报链路关闭对应网络配置。命令之所以一条就生效,是因为它撤销的只是"上报"这件事,不需要手工恢复任何注册表项。

获取与前置条件

  • 克隆仓库。上游项目在 2024-08 因 DMCA 下架,仓库现以说明文档为主;本地已有no-defender-loader二进制可直接跳过。
git clone https://gitcode.com/GitHub_Trending/no/no-defender cd no-defender
  • 在管理员权限的 PowerShell 中执行,普通权限下上报会失败。
  • 可执行文件放在固定目录,不要随手挪动——这是后面跨重启持久化的前提。

分场景操作

场景A:临时关掉,用完立刻开回来

原理先行:这条命令并不停止任何服务,只是向系统提交一次"第三方杀毒在场"上报,实时保护由系统侧自动停下。

no-defender-loader --av

执行后马上验证:

Get-MpComputerStatus | Select RealTimeProtectionEnabled

字段为False即已关闭。收尾命令见下文"撤销与清理"一节。

场景B:重启后也要保持关闭

WSC 上报本身不跨重启,工具的对策是把自身写进自启动项,每次开机自动重发一次上报。代价要记牢:

二进制必须一直留在磁盘上。文件被删等于持久化失效,重启后 Defender 会自己回来。

验证方式:重启后重跑场景A的验证命令,RealTimeProtectionEnabled仍为False即持久化成功。启动项可以在任务管理器"启动"页里看到,属于预期行为。

场景C:只关其中一项、或指定上报名称

只关防火墙,不碰 Defender:

no-defender-loader --firewall

验证方法换成看三个网络配置文件:

Get-NetFirewallProfile | Select Name, Enabled

Domain / Private / Public 全部False即关闭生效。

两者一起关,并把安全中心里显示的"虚拟杀毒"名称改成自定义:

no-defender-loader --av --firewall --name "My Test AV"

--name默认是一个仓库风格的占位名,多台机器或多种工具混用时,自定义名称便于区分是谁在做上报。

参数速查

参数作用示例
--av禁用 Defender--av
--firewall禁用 Windows 防火墙--firewall
--av --firewall两项同时禁用组合使用
--disable重新启用并还原--disable
--name VAR自定义杀毒上报名称--name "My Test AV"
-h/-v查看帮助 / 版本--help/--version

完整参数说明见 README 的 Usage 段落。

✅ 状态确认:交叉验证实时保护与防火墙

三条命令完成完整核对:

Get-MpComputerStatus | Select RealTimeProtectionEnabled

含义:Defender 实时保护是否激活,False表示已关闭。

Get-NetFirewallProfile | Select Name, Enabled

含义:三个网络配置文件各自的防火墙开关,全False才是彻底关闭。

Get-Service wscsvc, WinDefend

这里有个高频混淆点:禁用生效后WinDefend宿主服务仍可能是Running,"服务在跑 ≠ 防护在开",实际关闭的是实时保护与防火墙配置。另外wscsvc是上报的执行通道,它异常是"命令跑了没生效"的最常见原因。

🧹 撤销与清理:别漏掉自启动项

no-defender-loader --disable

效果:撤销"第三方杀毒在场"上报,Defender 与防火墙恢复启用。还原后交叉确认:

Get-MpComputerStatus | Select RealTimeProtectionEnabled Get-NetFirewallProfile | Select Name, Enabled

实时保护回到True、三个配置文件回到True才算干净。

容易漏的残留:如果开过跨重启持久化,自启动项仍在注册表里。清理顺序建议为:先跑--disable撤销上报恢复防护 → 再移除对应启动项(任务管理器"启动"页可见)→ 最后才删二进制。反过来操作会留下悬空启动项,开机时静默失败,排查起来更麻烦。

故障定位:从症状到根因

症状最可能原因处理动作
重启后又恢复了二进制被删或自启动项失效确认文件还在、启动项生效
命令执行但状态没变wscsvc服务异常查服务状态,恢复后重试
提示"由组织管理"组策略/注册表被外部改过先跑--disable再查策略
安全中心空白或灰置安全中心组件异常跑sfc /scannow修复

表格没覆盖到时,用下面几条往里挖:

Get-Service wscsvc

定位执行通道:WSC 未处于 Running 时,任何上报命令都会空转,先恢复服务再重试。

Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" -MaxEvents 10

定位拦截点:读出最近 Defender 运行事件,用来区分"被策略拦下"与"组件自身异常"。

sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

定位系统底层:扫描并修复系统文件与系统映像,排除文件损坏导致的开关失灵。

使用守则

  • 用完必须还原:结束后的默认状态应是--disable,别让实时保护长期缺席。
  • 二进制别乱删:持久化依赖自启动项,删文件等于无声解除,重启即回弹。
  • 记录状态基线:操作前后各存一份两条验证命令的输出,出问题才有得比。
  • 别混用多个上报工具:多个"第三方杀毒在场"声明并存容易策略打架。
  • 分清环境:隔离/测试机随便用,生产机动手前先评估风险。

FAQ

Q:为什么重启后 Defender 又自己回来了?A:持久化靠自启动项。可执行文件被删或启动项失效都会导致回弹。先确认文件还在、启动项生效,再重启验证一次。

Q:怎么算"真的关掉了"?A:Get-MpComputerStatus实时保护为False、Get-NetFirewallProfile三个配置文件全False、Defender 运行日志无异常,三处一致才算关闭。

Q:关掉后服务还在跑,正常吗?A:正常。工具关闭的是实时保护与防火墙配置,不是WinDefend宿主服务,判断状态别只看服务。

Q:用完一定要还原吗?A:要。除隔离/测试环境外,建议结束即执行no-defender-loader --disable恢复防护。

写在最后

no-defender 把"禁用 Defender 与防火墙"压缩成几条可控命令:确认现状、按需关闭、交叉验证、用完还原。记住这条纪律:用完一定跑--disable。

【免费下载链接】no-defenderA slightly more fun way to disable windows defender + firewall. (through the WSC api)项目地址: https://gitcode.com/GitHub_Trending/no/no-defender

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进