一个电话号码可以揭示设备是否处于活动、待机或离线状态(以及更多信息)。此 PoC 演示了送达回执 + RTT 时序如何泄露敏感的设备活动模式。(WhatsApp / Signal)
通过 RTT 分析实现 WhatsApp 和 Signal 活动追踪
⚠️ 免责声明:仅供教育和安全研究使用。演示 WhatsApp 和 Signal 中的隐私漏洞。
本项目实现了论文 《Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers》(作者:Gabriel K. Gegenhuber, Maximilian Günther, Markus Maier, Aljosha Judmayer, Florian Holzbauer, Philipp É. Frenzel, 和 Johanna Ullrich,维也纳大学 & SBA Research)中的研究成果。
功能: 通过测量 WhatsApp 消息送达回执的往返时间(RTT),该工具能够检测:
安全影响: 这表明消息应用中存在一个可利用的重大隐私漏洞,可能被用于监视。
![]()
Web 界面显示实时 RTT 测量、设备状态检测和活动模式。
# 克隆仓库
git clone https://github.com/gommzystudio/device-activity-tracker.git
cd device-activity-tracker
# 安装依赖
npm install
cd client && npm install && cd ..
要求: Node.js 20+、npm、WhatsApp 账户
运行应用的最简单方式是使用 Docker:
# 复制环境模板
cp .env.example .env
# (可选)在 .env 文件中自定义端口
# BACKEND_PORT=3001
# CLIENT_PORT=3000
# 构建并启动容器
docker compose up --build
应用将在以下地址可用:
CLIENT_PORT)BACKEND_PORT)停止容器:
docker compose down
# 终端1:启动后端
npm run start:server
# 终端2:启动前端
npm run start:client
打开 http://localhost:3000,使用 WhatsApp 扫描二维码,然后输入要追踪的手机号码(例如 491701234567)。
npm start
按照提示进行身份验证并输入目标号码。
输出示例:
╔════════════════════════════════════════════════════════════════╗
║ 🟡 设备状态更新 - 09:41:51 ║
╠════════════════════════════════════════════════════════════════╣
║ JID: ***********@lid ║
║ 状态: 待机 ║
║ RTT: 1104ms ║
║ 平均 (3): 1161ms ║
║ 中位数: 1195ms ║
║ 阈值: 1075ms ║
╚════════════════════════════════════════════════════════════════╝
追踪器发送探测消息并测量往返时间(RTT)以检测设备活动。提供两种探测方法:
| 方法 | 描述 |
|---|---|
| 删除(默认) | 对不存在的消息 ID 发送“删除”请求。 |
| 反应 | 对不存在的消息 ID 发送表情反应。 |
发送探测消息与收到 CLIENT ACK(状态3)之间的时间被测量为 RTT。设备状态通过动态阈值检测,该阈值计算为中位数 RTT 的 90%:低于阈值表示活跃使用,高于阈值表示待机模式。测量结果存储在历史记录中,中位数不断更新以适应不同网络条件。
在 Web 界面中,您可以通过控制面板中的下拉菜单切换探测方法。在 CLI 模式下,默认使用删除方法。
auth_info_baileys/ 文件夹并重新扫描二维码。device-activity-tracker/
├── src/
│ ├── tracker.ts # WhatsApp RTT 分析逻辑
│ ├── signal-tracker.ts # Signal RTT 分析逻辑
│ ├── server.ts # 后端 API 服务器(两个平台)
│ └── index.ts # CLI 界面
├── client/ # React Web 界面
└── package.json
最有效的缓解措施是在 WhatsApp 中启用“屏蔽未知账户消息”,路径为: 设置 → 隐私 → 高级。
此设置可能会降低攻击者从未知号码大量发送探测反应的能力,因为 WhatsApp 会阻止来自未知账户的高频消息。 然而,WhatsApp 并未透露“高频”的具体含义,因此在速率限制生效之前,这并不能完全阻止攻击者发送大量探测反应。
禁用已读回执有助于应对常规消息,但无法抵御这种特定攻击。截至 2025 年 12 月,该漏洞在 WhatsApp 和 Signal 中仍可利用。
⚠️ 仅供研究和教育目的。未经明确同意切勿追踪他人——这可能违反隐私法律。身份验证数据(auth_info_baileys/)存储在本地,绝不可提交到版本控制。
基于 Gegenhuber 等人(维也纳大学 & SBA Research)的研究:
@inproceedings{gegenhuber2024careless,
title={Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers},
author={Gegenhuber, Gabriel K. and G{\"u}nther, Maximilian and Maier, Markus and Judmayer, Aljosha and Holzbauer, Florian and Frenzel, Philipp {\'E}. and Ullrich, Johanna},
year={2024},
organization={University of Vienna, SBA Research}
}
MIT 许可证 - 详见 LICENSE 文件。
基于 @whiskeysockets/baileys 构建
负责任地使用。此工具展示了影响数百万用户的真实安全漏洞。