一条命令禁用 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, EnabledDomain / 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),仅供参考