device-activity-tracker README

The project's README from github.com/gommzystudio/device-activity-tracker. As one markdown file: README.md.

Device Activity Tracker

WhatsApp & Signal Activity Tracker via RTT Analysis

Node.js TypeScript React License MIT

⚠️ DISCLAIMER: Proof-of-concept for educational and security research purposes only. Demonstrates privacy vulnerabilities in WhatsApp and Signal.

Overview

This project implements the research from the paper "Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers" by Gabriel K. Gegenhuber, Maximilian Günther, Markus Maier, Aljosha Judmayer, Florian Holzbauer, Philipp É. Frenzel, and Johanna Ullrich (University of Vienna & SBA Research).

What it does: By measuring Round-Trip Time (RTT) of WhatsApp message delivery receipts, this tool can detect:

Security implications: This demonstrates a significant privacy vulnerability in messaging apps that can be exploited for surveillance.

Example

WhatsApp Activity Tracker Interface

The web interface shows real-time RTT measurements, device state detection, and activity patterns.

Installation

# Clone repository
git clone https://github.com/gommzystudio/device-activity-tracker.git
cd device-activity-tracker

# Install dependencies
npm install
cd client && npm install && cd ..

Requirements: Node.js 20+, npm, WhatsApp account

Usage

The easiest way to run the application is using Docker:

# Copy environment template
cp .env.example .env

# (Optional) Customize ports in .env file
# BACKEND_PORT=3001
# CLIENT_PORT=3000

# Build and start containers
docker compose up --build

The application will be available at:

To stop the containers:

docker compose down

Manual Setup

Web Interface

# Terminal 1: Start backend
npm run start:server

# Terminal 2: Start frontend
npm run start:client

Open http://localhost:3000, scan QR code with WhatsApp, then enter phone number to track (e.g., 491701234567).

CLI Interface (only WhatsApp)

npm start

Follow prompts to authenticate and enter target number.

Example Output:

╔════════════════════════════════════════════════════════════════╗
║ 🟡 Device Status Update - 09:41:51                             ║
╠════════════════════════════════════════════════════════════════╣
║ JID:        ***********@lid                                    ║
║ Status:     Standby                                            ║
║ RTT:        1104ms                                             ║
║ Avg (3):    1161ms                                             ║
║ Median:     1195ms                                             ║
║ Threshold:  1075ms                                             ║
╚════════════════════════════════════════════════════════════════╝

How It Works

The tracker sends probe messages and measures the Round-Trip Time (RTT) to detect device activity. Two probe methods are available:

Probe Methods

Method Description
Delete (Default) Sends a "delete" request for a non-existent message ID.
Reaction Sends a reaction emoji to a non-existent message ID.

Detection Logic

The time between sending the probe message and receiving the CLIENT ACK (Status 3) is measured as RTT. Device state is detected using a dynamic threshold calculated as 90% of the median RTT: values below the threshold indicate active usage, values above indicate standby mode. Measurements are stored in a history and the median is continuously updated to adapt to different network conditions.

Switching Probe Methods

In the web interface, you can switch between probe methods using the dropdown in the control panel. In CLI mode, the delete method is used by default.

Common Issues

Project Structure

device-activity-tracker/
├── src/
│   ├── tracker.ts         # WhatsApp RTT analysis logic
│   ├── signal-tracker.ts  # Signal RTT analysis logic
│   ├── server.ts          # Backend API server (both platforms)
│   └── index.ts           # CLI interface
├── client/                # React web interface
└── package.json

How to Protect Yourself

The most effective mitigation is to enable “Block unknown account messages” in WhatsApp under Settings → Privacy → Advanced.

This setting may reduce an attacker’s ability to spam probe reactions from unknown numbers, because WhatsApp blocks high-volume messages from unknown accounts. However, WhatsApp does not disclose what “high volume” means, so this does not fully prevent an attacker from sending a significant number of probe reactions before rate-limiting kicks in.

Disabling read receipts helps with regular messages but does not protect against this specific attack. As of December 2025, this vulnerability remains exploitable in WhatsApp and Signal.

⚠️ For research and educational purposes only. Never track people without explicit consent - this may violate privacy laws. Authentication data (auth_info_baileys/) is stored locally and must never be committed to version control.

Citation

Based on research by Gegenhuber et al., University of Vienna & 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}
}

License

MIT License - See LICENSE file.

Built with @whiskeysockets/baileys


Use responsibly. This tool demonstrates real security vulnerabilities that affect millions of users.

Star History

Star History Chart

device-activity-tracker (gommzystudio/device-activity-tracker)

Searching Database…

这是什么?这是一个概念验证性质的安全研究工具,通过测量消息送达回执的往返时间(RTT),监测 WhatsApp 和 Signal 用户,从而判断目标设备是正在使用、处于待机,还是离线。
怎样才能让它运行起来?最快的方式是使用 Docker:运行「docker compose up」即可同时启动前端和后端。若要手动设置,需要 Node.js 20+ 和 npm,然后打开网页界面或命令行工具,扫描 WhatsApp 二维码,并输入目标的手机号码。
运行它是否需要我自己的 WhatsApp 账号?需要。你要通过 @whiskeysockets/baileys 库扫描二维码,登录自己的 WhatsApp 账号,然后输入目标的手机号码开始探测。同时还需要 Node.js 20+ 和 npm。
它也支持 Signal 吗,还是只支持 WhatsApp?研究说明和免责声明同时涵盖 WhatsApp 和 Signal,但已发布的命令行工具只支持 WhatsApp;Signal 探测由单独的「start:signal-api」脚本驱动,不属于主命令行流程。
用它追踪别人的 WhatsApp 活动是否合法?不合法。作者明确警告,本工具仅供研究和教育用途;未经明确同意追踪他人可能违反隐私法律;身份验证数据绝不能提交到版本控制系统中。
它究竟是如何判断某人在线还是离线的?它会发送一条探测消息(默认是删除一条不存在的消息 ID 的请求),并计时获取 CLIENT ACK 所需的时间。如果往返时间低于动态阈值(中位往返时间的 90%),设备显示「在线」;高于该阈值则显示「待机」;完全没有收到 ACK 则表示「离线」。
「删除」和「表情回应」两种探测方式有什么区别?两者都是向一个不存在的消息 ID 发起请求,以触发送达回执,同时不让目标察觉。「删除」发送删除请求(默认方式),「表情回应」则改为发送一个表情回应。你可以在网页界面的控制面板中切换这两种方式。
我能保护自己免受这类追踪吗?在 WhatsApp 的隐私设置中开启「屏蔽未知账户消息」,可以降低攻击者通过陌生号码大量发送探测消息的能力,但 WhatsApp 并未公开确切的速率限制阈值,因此这并不能彻底解决问题。关闭已读回执对这种特定攻击没有防护作用。
这项研究的出处是什么?它实现了 Gegenhuber 等人发表的论文《Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers》中的研究成果,作者来自维也纳大学和 SBA Research。
Size
0.4 MB
Stars
5.2K
Updated
CommitDec 31
Age
10mo
Commits · 90 Days