forked from tianma8023/XposedSmsCode
-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
背景
用户反馈:微信通知在前台可转发,但在后台经常不转发。同一套 Webhook 配置下,存在明显间歇性。
相关日志包:
play/XposedSmsCode/log/logs_2026-03-01_21-16-06.zip
复现现象
- 微信收到通知后,LSPosed Hook 已触发(可见
NotificationManagerHook日志)。 - 但在一段时间内,Hook 侧多次出现:
query pref unavailable ... key=ipc_tokenipc token empty, skip forwarding for pkg=com.tencent.mm
- 随后某时刻 token 恢复(
ipc token refreshed from provider),微信通知立即恢复正常转发,Webhook 返回 200。
关键证据(同一份日志内)
失败窗口(大量重复)
NotificationManagerHook: query pref unavailable ... key=ipc_token ... caller=com.tencent.mmNotificationManagerHook: 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=forwardWebhook 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_notifyforward_source=nms_hooksentFromUid=1000 (system)
- 其余场景仍保持严格 token 拒绝。
目的:覆盖“system_server Hook 已捕获通知,但 token 临时读不到”的窗口,避免后台漏转发。
安全边界说明
- 未放开普通第三方广播。
- 仅放开系统 UID 且仅限 NMS Hook 的 app 通知路径。
后续验证点
- 新包下复测微信后台连续通知,确认不再出现“长时间 token empty 期间漏转发”。
- 观察是否仍有
query pref unavailable/ipc token empty,若有,确认是否被 Receiver 兜底成功。 - 关注误放行风险(理论上应很低,因 UID+source+msgType 三重限制)。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels