我的智能睡眠面罩将用户的脑波广播到开放的 MQTT broker

发布: (2026年2月14日 GMT+8 23:35)
5 分钟阅读

Source: Hacker News

Bluetooth

Claude 做的第一件事是扫描附近的 BLE(低功耗蓝牙)设备。它在 35 台范围内的设备中找到了我的设备,连接上后映射了接口——两个数据通道:一个用于发送指令,一个用于流式传输数据。

随后它尝试与之通信,发送了大约一百种不同的指令模式(Modbus 帧、JSON、原始字节、常见头部)。遗憾的是,设备没有任何响应;该协议并非标准协议。

The app

Claude 转向 Android APK,使用 jadx 进行反编译。该应用是用 Flutter 构建的,Flutter 会把 Dart 源码编译成原生 ARM64 机器码,所以原始源码并不直接可读。业务逻辑位于一个 9 MB 的二进制块中。

即使是编译后的二进制文件也会包含字符串。Claude 对二进制文件运行 strings,发现了:

  • 硬编码的公司消息代理凭证(所有副本共享同一套凭证)
  • 云 API 端点
  • 所有十五个指令构造函数的名称(例如,用于设置振动、加热、电刺激等)
  • 协议调试信息,揭示了数据包结构——头部、方向字节、指令类型、负载、尾部

在了解了协议的形状后,Claude 使用了 blutter,这是一款用于反编译 Flutter 编译后 Dart 快照的工具。它重新构建了带有可读注释的函数,使 Claude 能够确定所有十五条指令的精确指令字节。

It works

Claude 发送了一个六字节的查询数据包。设备回应了 153 字节,包含型号、固件版本、序列号以及全部八个传感器通道的配置(250 Hz 的 EEG、呼吸、三轴加速度计、三轴陀螺仪)。电池电量为 83 %。

  • 振动控制正常。
  • 加热功能正常。
  • EMS(电肌肉刺激)正常。
  • 音乐播放正常。

Claude 构建了一个带有滑块的简易网页仪表盘,每个功能都如预期工作。

The server

记得那段硬编码的凭证吗?Claude 用它们连接到了公司的 MQTT 代理。MQTT 是物联网中常用的发布/订阅消息系统,设备会发布传感器读取值并订阅指令。连接成功后,数据开始流动——不仅来自我的面罩,还来自所有使用相同凭证的设备。大约有 25 台设备处于活跃状态,包括:

  • 发布实时 EEG 脑电数据的睡眠面罩
  • 报告温度、湿度、CO₂ 的空气质量监测仪
  • 检测房间占用情况的存在传感器

Claude 捕获了两台活跃睡眠面罩的几分钟 EEG 数据。一个用户似乎处于 REM 睡眠(混合频率活动);另一个则处于深度慢波睡眠(4 Hz 以下的强 delta 波)。这些是真实人类在世界某处产生的真实脑波。

Live EEG

EMS

该面罩还支持 EMS——眼部周围的电肌肉刺激。控制它只是另一条指令:模式、频率、强度、持续时间。由于每台设备共享相同的凭证和代理,任何能够读取用户脑波的人也可以向其发送电刺激。

Disclosure

出于显而易见的原因,我没有透露产品或公司名称,但我已经联系他们并告知此问题。

整个过程让我想起了 Karpathy 的 Digital Hygiene 文章,值得一读。

逆向工程——蓝牙扫描、APK 反编译、Dart 二进制分析、MQTT 发现——主要由 Claude(Opus 4.6)在一次 30 分钟的自主会话中完成。

0 浏览
Back to Blog

相关文章

阅读更多 »