通过杀软 avast 及 no-defender 工具分析 Windows 防护机制
字数 2171 2025-08-20 18:18:17
Windows Defender 关闭机制分析与 no-defender 工具实现原理
1. 前言
Windows Defender 已从最初的杀毒软件发展为端点检测和响应软件(EDR),成为 Windows 安全体系的核心部分。微软不建议用户关闭 Defender,且其默认关闭策略无法完全停止软件运行,这给恶意软件调试分析带来困扰。
2. 传统关闭 Defender 方案分析
2.1 常见关闭方法及其局限性
-
关闭实时保护:
- 临时性措施,Defender 会自动恢复
- 仅暂停部分功能,核心服务仍在运行
-
添加排除文件夹:
- 仅绕过指定文件夹的扫描
- 不影响 Defender 整体运行状态
-
组策略关闭:
- 路径:
计算机配置 > 管理模板 > Windows组件 > Microsoft Defender防病毒 - 当前版本已失效
- 路径:
-
注册表关闭:
- 键值:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender - 添加
DisableAntiSpyware=1(DWORD) - 当前版本已失效
- 键值:
-
服务停止:
- 通过 Services 禁用 Defender 进程
- 当前版本会被 Windows Security Center 自动重启
-
安全模式损坏二进制:
- 步骤:
- 关闭 Defender 防篡改
- 进入安全模式
- 修改
C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2211.5-0\MsMpEng.exe所有者 - 重命名为
MsMpEng.exe.bak
- 效果:永久关闭 Defender
- 缺点:侵入性强,破坏系统完整性
- 步骤:
-
第三方杀毒软件接管:
- 安装认证的第三方杀毒软件后,Defender 自动退出
- 需要杀毒软件提供完全关闭功能
2.2 方案失效原因
- Windows 安全体系层层加码
- 微软签名认证要求
- 未公开 API 和安全中心消息同步机制
- 版本差异导致策略变化
3. no-defender 工具原理
3.1 核心思路
利用 Windows 安全防护的第三方杀毒软件接管机制:
- 从 Avast 杀毒软件逆向提取关键组件
- 编写 hook 代码修改关键组件执行逻辑
- 向安全中心注册虚假杀毒软件
- 触发 Defender 自动退出机制
3.2 工具组件
no-defender-loader.exe:服务配置工具powrprof.dll:hook 实现wsc.dll:Avast 的 wsc 通信核心组件wsc_proxy.exe:Avast 的 wsc 通信程序
4. Avast 的 WSC 机制分析
4.1 安全中心通信架构
AvastSvc (客户端) → wsc_proxy.exe → wsc.dll → wscsvc (Windows安全中心服务)
4.2 关键组件
-
AvastWscReporter 服务:
- 路径:
C:\Program Files\AVAST Software\Avast\wsc_proxy.exe - 功能:与安全中心通信的代理服务
- 路径:
-
wsc.dll 核心功能:
- 初始化 ASW* 文件对象
- 启动 RPC 服务器
- 处理安全状态更新队列
4.3 通信流程
-
RPC 服务器初始化:
StartServiceCtrlDispatcherW启动服务CreateThread创建处理线程RpCServerRegisterIfEx注册 RPC 接口
-
消息处理机制:
- 接收端:
s_wscrpc_update()处理 RPC 请求- 解析字符串格式:
/svc /update /av_as /state:[on|off] /signatures:up_to_date - 将任务加入队列
- 解析字符串格式:
- 处理端:
queue_worker()线程循环处理队列- 调用
process_item()更新安全中心状态
- 调用
- 接收端:
5. no-defender 实现细节
5.1 关键技术点
-
关键 Hook 点:
CreateFileW:绕过 ASW* 文件访问检查queue_worker:注入虚假状态更新I_RpcBindingInqLocalClientPID:伪造进程ID
-
Hook 实现代码:
// 绕过 ASW* 文件检查
HANDLE WINAPI HookCreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, ...) {
if (strstr(strlwr(buffer), "asw") != NULL) {
return (HANDLE)1337; // 返回魔数绕过检查
}
return OriginalCreateFileW(...);
}
// 注入状态更新
int64_t Hookqueue_worker() {
wchar_t payload[1024] = {0};
mbstowcs(payload, "/svc /update /av_as /state:on /signatures:up_to_date", 1024);
S_WSCRPC_UPDATE s_wscrpc_update = (S_WSCRPC_UPDATE)(wsc_base + S_WSCRPC_UPDATE_ADDRESS);
s_wscrpc_update(payload, 1);
return Originalqueue_worker();
}
5.2 部署流程
-
服务注册:
sc.exe create test type=own start=demand binpath='\"path\to\wsc_proxy.exe\" /runassvc /rpcserver /wsc_name:\"test\"' -
服务启动:
sc.exe start test -
验证效果:
- 检查 Windows 安全中心是否显示"test"防护软件
- 确认 Defender 进程已退出
5.3 注意事项
-
服务停止问题:
- wsc.dll 未提供正常关闭逻辑
- 解决方案:系统重启或 hook 代码中主动退出
-
未处理的 DeviceIoControl:
- 访问 ASW* 设备可能出错
- 可扩展 hook 修复
6. 防御对策
-
微软可采取的防护措施:
- 加强第三方杀软认证机制
- 验证组件数字签名完整性
- 监控异常的服务注册行为
-
企业防护建议:
- 启用防篡改保护
- 监控 powrprof.dll 等关键组件修改
- 限制服务创建权限
7. 总结
no-defender 工具通过逆向 Avast 的 WSC 通信机制,利用 hook 技术伪造杀毒软件状态,实现了对 Defender 的非破坏性关闭。该技术揭示了 Windows 安全中心与第三方杀毒软件间的信任机制漏洞,对理解 Windows 安全体系有重要研究价值。