最近在 Kickstarter 上众筹了个智能睡眠眼罩。
初衷很简单,就是想睡个好觉。这家初创公司的硬件看着挺唬人:脑电波监测(EEG)、眼部肌肉电刺激(EMS)、加热、震动,甚至还带音频。
但我万万没想到,这玩意儿不仅没让我睡着,反而让我成了“偷窥者”。
我没打算读取陌生人的脑波,更没想过在半夜给几千公里外的人发送电脉冲。
但事情就是这样发生了。
当 AI 决定当个黑客
这眼罩硬件挺硬,App 却烂得掉渣,蓝牙动不动就断。
作为一名搞技术的,我实在忍不了,就把这烂摊子丢给了 Claude(Opus 4.6)。我的要求很直接:别管那个破 App 了,直接逆向破解蓝牙协议,给我写个网页控制面板。
Claude 动手很快。
第一步,扫描周围的蓝牙低功耗(BLE)设备。它在周围 35 个设备里锁定了我的眼罩,连接上,发现有两个数据通道:一个发指令,一个传数据。
接着,它开始“瞎蒙”。发了一百多种指令包,什么 Modbus 帧、JSON、原始字节……结果设备毫无反应,这协议不是通用的。
碰壁了。
挖出那串致命的代码
既然蓝牙协议搞不定,Claude 把矛头对准了 Android App。
抓包、反编译,一切看起来很顺利,直到它发现这 App 是用 Flutter 写的。这有点麻烦,Flutter 把代码编译成了原生 ARM64 机器码,不像普通的 Java App 那样容易读,核心逻辑都藏在一个 9MB 的二进制大文件里。
但二进制文件里总得有点字符串吧?错误信息、URL、调试日志……
Claude 运行了 strings 命令,这一步,直接把软件的底裤扒下来了。
在那几千行 Flutter 框架的噪音里,它挖到了金子:
- 公司消息代理的硬编码凭证(所有 App 都共用这一套);
- 云端 API 接口;
- 15 个控制功能的函数名(震动、加热、电刺激……);
- 甚至还有协议调试信息,直接暴露了数据包结构。
紧接着,Claude 用专门反编译 Flutter 的工具 blutter 还原了函数,把那 15 个指令的字节码一个个读了出来。
搞定。
它发了一个 6 字节的查询包,眼罩立刻回了 153 字节:型号、固件版本、序列号,还有 8 个传感器的配置。
我试了试,震动、加热、EMS(肌肉电刺激)、播放音乐,全都能用。
Claude 给我做了个带滑块的网页控制台,那一刻,我觉得这就值回票价了。
本来故事到这就该结束了。
大脑在互联网上裸奔
还记得前面挖出来的那个“硬编码凭证”吗?
Claude 试着用这组账号去连公司的 MQTT 代理(物联网常用的消息传输协议)。连上了,畅通无阻。
然后,数据像洪水一样涌进来。
不仅仅是我的眼罩,是所有人的。
大概有 25 个设备在线,正在疯狂吐数据:
- 睡眠眼罩实时上传脑电波(EEG);
- 空气质量监测器上报温度、湿度、二氧化碳浓度;
- 人体存在传感器汇报房间 occupancy。
我截取了几分钟的数据,看到两个正在使用眼罩的用户。
一个处于快速眼动期(REM),脑波频率混乱;另一个处于深度慢波睡眠,Delta 波功率极强。
那是真实的人,真实的睡眠,真实的大脑活动。
我能电醒你,只要你睡着
这还没完。
眼罩那个 EMS 功能,也就是眼部肌肉电刺激,本质上也是个指令包。只要设定好模式、频率、强度、时长就能触发。
既然所有设备都共用同一套凭证,连在同一个代理上……
逻辑很简单:
如果你能读到他的脑波,你就能给他发电脉冲。
我只要动动手指,就能给那个正在深度睡眠的陌生人发个“震动提醒”,甚至是一电流刺激。
这画面,是不是有点赛博朋克过头了?
这不仅仅是眼罩的问题
出于安全考虑,我不点名这家公司,但已经联系他们去修这个巨大的漏洞。
这事儿让我重新审视了 Andrej Karpathy 关于“数字卫生”的观点,你也应该看看。
有意思的是,评论区里有个神经科学家说,虽然 EEG 算不上读心术,但这种脑数据毫无隐私的先例,非常糟糕。
还有人说,这简直就是 Philip K Dick 科幻小说里的情节。
但我个人觉得,这事儿最细思极恐的地方不在于“读心”,而在于门槛的消失。
整个逆向工程过程——蓝牙破解、APK 反编译、Dart 二进制分析、MQTT 发现——基本上是 Claude 在 30 分钟内自主完成的。
以前这需要资深黑客攒好几天的经验,现在 AI 只要半小时。
再加上 IoT 厂商那种“能省则省”的懒政开发习惯——硬编码凭证、开放 Broker——这简直就是把大门敞开,还在门口贴了欢迎标语。
Kickstarter 上这种项目太多了,为了尽快上市,什么捷径都敢走。
下次再把这种能连上网的穿戴设备戴在身上,或者放在卧室里时,你或许该多想一层:
这玩意儿,真的只有你在用吗?
参考链接:
https://aimilios.bearblog.dev/reverse-engineering-sleep-mask/