Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛡️ Windows Toast 通知拦截器

Windows 架构 许可证 C++

实时拦截、分析并阻止 Windows Toast 通知 – 通过注入系统服务进程,挂钩 RPC 调用,实现通知的完全控制:提取应用 ID、负载 XML,甚至根据规则静默阻止。


✨ 特性

  • 实时拦截 – 在通知弹出前捕获,支持放行或阻止
  • 内容提取 – 获取发送通知的应用名称、通知类型(Toast)以及完整的 XML 负载(标题、正文、图片等)
  • 低侵入性 – 注入 svchost.exe 中的 Windows Push Notifications User Service,该进程崩溃后由系统自动重启,稳定性高
  • 广泛测试 – 已在 Windows 10 x64 和 Windows 11 x64 上验证通过
  • 极简 Hook – 仅挂钩必要的 RPC 分发函数,对系统性能影响极小
  • 可定制阻断 – 可根据应用名称、通知内容等条件决定是否拦截

🧠 工作原理

Windows Toast 通知通过 RPC 从应用进程传递到 Windows Push Notifications User Service(服务名 WpnUserService,宿主为 svchost.exe)。服务内部最终由 AppEndpoint::PostNotification3 方法处理通知提交。本项目通过注入该服务进程并挂钩 RPC 运行时函数,截获此调用。

关键技术点

  1. 注入目标
    WpnUserService 作为用户态服务运行于 svchost.exe 中,注入和挂钩安全可靠,且服务崩溃后会自动重启,适合长期监控。

  2. RPC 拦截点
    所有 RPC 调用最终进入 RPCRT4!NdrStubCall3。通过挂钩此函数,可以从 RPC_MESSAGE 结构中提取:

    • 接口 GUID
    • 调用编号(ProcNum)
    • 服务器分发表(DispatchTable)
  3. 定位 PostNotification3
    分析发现 PostNotification3 的接口 GUID 为
    {926516E8-D891-45BC-9DE5-6959FB8ECAC5}IID_IWpnAppEndpoint3),调用编号为 0x29
    当检测到匹配的 GUID 和 ProcNum 时,即可从 DispatchTable 中获取该函数的真实地址,进而挂钩。 RPC通知分析

  4. 获取通知内容
    PostNotification3 的第二个参数指向 INotificationHandlerProxy 接口。该接口的虚表布局稳定(偏移经分析确认),可通过它调用:

    • GetAppId – 获取应用名称
    • GetType – 通常为 "Toast"(仅处理此类)
    • GetPayloadType – 通常为 "Xml"
    • GetPayloadData – 返回包含通知 XML 的 IStream,可解析出标题、内容等
  5. 拦截实现
    在挂钩的 PostNotification3 代理函数中,既可以先调用原函数让通知正常显示,也可直接返回 0(模拟成功)来阻止通知弹出。同时可提取所需信息用于日志记录或策略决策。


🚀 使用方法

编译要求

  • Visual Studio 2019 / 2022
  • Windows SDK 10.0.20348.0 或更高
  • C++17

构建步骤

  1. 克隆本仓库
  2. 打开解决方案 WpnServerviceMonitor.sln
  3. 选择 Release / x64 配置
  4. 生成项目 → 得到 WpnMonitor64.dll

注入 DLL

需要管理员权限,测试时使用 tools/SimpleInjectTool_x64.exe pid dllpath注入目标服务进程。 目标服务进程

示例(PowerShell 管理员): Powershell中执行 tools/Toast.ps1 可弹出toast Toast弹出效果

自定义拦截规则 默认情况下,DLL 会将所有通知信息输出到调试端口(可使用 DebugView 查看)。如需修改拦截逻辑,请编辑 PostNotification3_Proxy 函数中的条件判断,并重新编译。 拦截效果日志

🔧 兼容性

操作系统 架构 状态
Windows 10 x64 ✅ 已验证
Windows 11 x64 ✅ 已验证
Windows 10 x86 ❌ 未测试
Windows Server - ❌ 未测试

⚠️ 免责声明 本项目仅供学习研究,请勿用于非法用途。

注入系统服务可能引起系统不稳定,建议在虚拟机或测试环境中使用。

作者不对使用本软件造成的任何损失负责。

About

监控及拦截windows toast通知

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages