Skip to content

微信后台通知转发间歇失效:ipc_token 读取失败导致 nms_hook 丢单 #146

@magisk317

Description

@magisk317

背景

用户反馈:微信通知在前台可转发,但在后台经常不转发。同一套 Webhook 配置下,存在明显间歇性。

相关日志包:

  • play/XposedSmsCode/log/logs_2026-03-01_21-16-06.zip

复现现象

  1. 微信收到通知后,LSPosed Hook 已触发(可见 NotificationManagerHook 日志)。
  2. 但在一段时间内,Hook 侧多次出现:
    • query pref unavailable ... key=ipc_token
    • ipc token empty, skip forwarding for pkg=com.tencent.mm
  3. 随后某时刻 token 恢复(ipc token refreshed from provider),微信通知立即恢复正常转发,Webhook 返回 200。

关键证据(同一份日志内)

失败窗口(大量重复)

  • NotificationManagerHook: query pref unavailable ... key=ipc_token ... caller=com.tencent.mm
  • NotificationManagerHook: ipc token empty, skip forwarding for pkg=com.tencent.mm

恢复点

  • NotificationManagerHook: ipc token refreshed from provider(约 21:15:47)
  • 随后 app runtime 出现:
    • App notify gate pkg=com.tencent.mm ... final_decision=forward
    • Webhook request prepared ...
    • Webhook POST Success: 200

根因分析

当前链路强依赖 ipc_token

  • 当 Hook 侧通过 provider 读取 ipc_token 失败(返回 null cursor)时,广播会被直接跳过。
  • 该失败具有间歇性(同一会话内先失败后恢复),导致“后台不稳定”。

这不是“微信永远不可转发”,而是“Hook 侧 token 获取不稳定导致的时间窗丢单”。

影响范围

  • 主要影响 app_notify + nms_hook 通道(微信最明显)。
  • 同时可见部分类似日志出现在 com.tencent.mobileqq 等应用。

已落地的修复(待验证)

ForwardReceiver 增加受限兜底

  • 当 token 校验失败时,仅在以下条件放行:
    • msgType=app_notify
    • forward_source=nms_hook
    • sentFromUid=1000 (system)
  • 其余场景仍保持严格 token 拒绝。

目的:覆盖“system_server Hook 已捕获通知,但 token 临时读不到”的窗口,避免后台漏转发。

安全边界说明

  • 未放开普通第三方广播。
  • 仅放开系统 UID 且仅限 NMS Hook 的 app 通知路径。

后续验证点

  1. 新包下复测微信后台连续通知,确认不再出现“长时间 token empty 期间漏转发”。
  2. 观察是否仍有 query pref unavailable/ipc token empty,若有,确认是否被 Receiver 兜底成功。
  3. 关注误放行风险(理论上应很低,因 UID+source+msgType 三重限制)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions