我最近從 Kickstarter 買了一個智慧睡眠面罩。我沒想到最後竟然能讀取陌生人的腦波,並在他們睡覺時向他們發送電脈衝。但事情就是這樣發生了。

這個面罩來自一家中國小型研究公司,硬體非常酷——腦電圖 (EEG) 腦部監測、眼周電肌肉刺激 (EMS)、震動、加熱、音訊。不過,應用程式還很不成熟,面罩也一直斷線,所以我請 Claude 試著逆向工程藍牙協定,並為我建立一個簡單的網頁控制面板。

Claude 做的第一件事是掃描附近的 BLE (藍牙低功耗) 裝置。它在 35 個範圍內的裝置中找到了我的面罩,連線後,它繪製了介面——兩個資料通道。一個用於發送指令,一個用於串流資料。

接著它試著與之溝通。發送了大概一百種不同的指令模式。Modbus 訊框、JSON、原始位元組、常用標頭。不幸的是,裝置沒有任何回應,協定並非標準協定。

所以 Claude 改而分析應用程式。它抓取了 Android APK,並使用 jadx 反編譯。結果發現該應用程式是用 Flutter 建構的,這對逆向工程來說有點麻煩。Flutter 會將 Dart 原始碼編譯成原生 ARM64 機械碼——你無法像一般的 Java Android 應用程式那樣直接讀取它。實際的業務邏輯存在於一個 9MB 的二進位檔案中。

但即使是編譯過的二進位檔案中也包含字串。錯誤訊息、URL、除錯日誌。Claude 在二進位檔案上執行了 strings 命令,這是整個過程中產出最多成果的一步。在數千行 Flutter 框架的雜訊中,它發現了:

我們掌握了協定的架構。但仍然沒有實際的位元組值。

接著 Claude 使用了 blutter,一個專門用於反編譯 Flutter 編譯過的 Dart 快照的工具。它可以重建帶有可讀註釋的函數。Claude 弄清楚了編碼方式,並直接讀取了每個函數的每個指令位元組。十五個指令,完全對應。

Claude 發送了一個六位元組的查詢封包。裝置回傳了 153 個位元組——型號、韌體版本、序號、所有八個感測器通道的配置 (EEG 頻率 250Hz、呼吸、3 軸加速度計、3 軸陀螺儀)。電池電量 83%。

震動控制有效。加熱有效。EMS 有效。音樂有效。Claude 為我建立了一個帶有所有功能的滑桿的小型網頁儀表板。我對此非常滿意。

故事本可以就此結束。

Claude 擷取了兩分鐘來自兩個活躍睡眠面罩的 EEG 數據。一個用戶似乎處於 REM 睡眠階段 (混合頻率活動)。另一個則處於深度慢波睡眠階段 (4Hz 以下的強烈 Delta 波)。來自世界各地真實人們的真實腦波。

該面罩也提供 EMS——眼周的電肌肉刺激。控制它只是另一個指令:模式、頻率、強度、持續時間。

由於每個裝置都共用相同的憑證和相同的代理伺服器,如果你能讀取某人的腦波,你也能在他們身上施加電脈衝。

出於明顯的原因,我在此不透露產品/公司名稱,但我已聯繫他們告知此問題。

這整件事讓我想起了 Karpathy 的數位衛生文章,你可能也應該看看。

逆向工程——藍牙、APK 反編譯、Dart 二進位檔案分析、MQTT 發現——基本上是由 Claude (Opus 4.6) 在一個 30 分鐘的自主會話中一次性完成的。

更新:這篇文章不知何故衝上了 HN 的第一名,大家一直在詢問 Claude 對話記錄。我已在此處新增。