1 ポイント 投稿者 GN⁺ 2025-11-13 | 1件のコメント | WhatsAppで共有
  • 薬局で Microlife WatchBP O3 血圧計 を装着した後、データを直接確認しようとして装置の micro-USB ポート を発見
  • Linux 環境で WatchBP Analyzer ソフトウェア を実行したが装置の認識に失敗し、その後 Windows 仮想マシン を通じてデータのダウンロードに成功
  • Wireshark と usbmon を使って USB 通信をキャプチャし、データパケット内で 収縮期・拡張期血圧および心拍数 を含むバイト構造を確認
  • さらに OPP(振動性最高圧)タイムスタンプ を追跡したが、時刻データの構造は明確に解釈できなかった
  • リバースエンジニアリングの試みは期限のため中断されたが、データ構造の分析経験と「白衣高血圧」の概念 を新たに学んだ事例

血圧計と最初の試み

  • 薬局でインフルエンザ予防接種を受けた後、血圧測定結果が高く出たため 24時間血圧測定装置 を装着
    • 装置は30分(日中)・60分(夜間)間隔で自動測定
    • 装置側面の micro-USB ポート を見つけ、データへのアクセスを試みた
  • 装置のモデルは Microlife WatchBP O3 で、関連する Windows 用 WatchBP Analyzer ソフトウェア をダウンロード
    • Linux 環境で Bottles を使って実行したが、装置の認識に失敗
    • hidraw デバイスとして表示され、USB HID インターフェースを使っていることを確認
  • その後 Windows 仮想マシン(Gnome Boxes) をインストールして USB デバイスを接続すると、データのダウンロードに成功
    • WatchBP Analyzer で最初の3回の測定値を確認

USB トラフィック分析

  • 仮想マシン環境を活用して Wireshark で USB 通信をキャプチャ
    • usbmon3 インターフェースを通じて装置とホスト間のデータフローを記録
  • キャプチャしたパケットから、血圧値が含まれていると見られるバイト列を発見
    • 例: 05 0a 89 71 43 9b
    • 3バイト目は 収縮期血圧(SYS)、4バイト目は 拡張期血圧(DIA)、5バイト目は 心拍数(HR) と推定
  • 複数の測定値を比較して データパターン を整理
    • 例: 137/113/67, 132/86/68, 126/84/82 など
    • 各パケットは32バイト単位で構成され、最初のバイトは有効データ長(SIGNIFICANT BITS)を示す

追加のデータ構造探索

  • OPP(振動性最高圧) および タイムスタンプ を含む追加バイトを分析
    • OPP データは各測定後のパケットに存在するが、位置は一定していない
    • SYS、DIA、HR の後の4バイトを 32ビットのタイムスタンプ と仮定したが、実際の測定時刻とは一致しなかった
  • 6列目の値が午前・午後の切り替わり時に 82 から 83 に変わり、7列目が初期化されるパターンを観察
    • 一部の値は測定時刻の分単位に似た傾向を示したが、明確な規則は確認できなかった

AI とコードの実験

  • Kagi プラットフォームを通じて複数の AI モデルにデータを入力し、分析を試行
    • 一部は無効な結果を示したが、エンディアン(endianness) の概念など分析の方向性には役立った
  • Python で装置の初期ハンドシェイクとデータダウンロードを模倣しようとしたが、AI が提供したコードの大半は不正確だった
    • この過程で pyhidapi ライブラリを新たに知った

まとめと教訓

  • 装置を返却しなければならない都合により、リバースエンジニアリング作業は中断
    • その過程で USB データ構造の分析とリバースエンジニアリングの実践経験 を得た
  • 新しく学んだ用語として 「Normotension」(正常血圧)「White Coat Hypertension」(白衣高血圧) に言及
    • 注射直後の血圧測定では一時的に高い数値が出ることがある
  • 結論として、予防接種直後の血圧測定は推奨されない

1件のコメント

 
GN⁺ 2025-11-13
Hacker Newsの意見
  • 高血圧の問題があるので、Hilo デバイスを購入した
    腕にカフを装着して**校正(calibration)したあと、手首に小さな装置を着けておくと、動いていないときに昼夜を問わず自動で血圧を測定する
    データはスマートフォンアプリと同期して保存され、毎回カフを巻く手間や
    白衣高血圧(white coat hypertension)**を避けられる
    ただし月に1回ほどはカフで再校正する必要があり、アプリのカメラで指を測定する機能は結果にばらつきがある

    • 精度がどの程度なのか気になる
  • AI関連の記事で「stupid in ways that made me think」という表現があったが、これはまさにAIがラバーダック・デバッグに役立つ理由をうまく要約した一文だと思う
    同僚と話すときよりも、もっと深く考えさせてくれる

  • 心拍数モニターを着けてデータを分析してみたところ、心拍数が急上昇するケースは2つしかなかった — 運転しているときと妻と会話しているときだ

    • 科学のために、運転しながら妻と会話しているときのデータも必要だと冗談を言う
    • Ouraがジムでの運動をストレスとして認識することがあるが、実際に運動は体にストレスを与えるのだから間違いではないという意見もある
      ある水泳選手は、どんなデバイスも使わず自分の心拍だけを聞いているという
    • たぶん車も妻もどちらも愛しているからだろうと、陽気に語る
  • 白衣高血圧は、必ずしも注射や病院の環境が原因というわけではなく、単に測定状況への緊張感によるものかもしれない

    • 友人が病院で美人の看護師に血圧を測ってもらったところ非常に高く出て、医師が測り直してもやはり高かった
      結局、薬を処方されることになった
    • 病院に遅れそうで走って行って血圧を測ったら高すぎる値が出て、医師から家で静かにもう一度測るよう勧められた
    • 妻は自己免疫疾患で病院に頻繁に通っているが、自動血圧計が故障して腕を締め付け続け、恐ろしい思いをしたことがある
      それ以来、妻が血圧を測るたびに自分まで緊張するようになった
    • 歯科恐怖症がひどいので、もし常時モニターを着けていたら歯科医院にいるときは確実に血圧が跳ね上がると思う
    • 私はADHDの薬の調整のために毎日血圧を測っているが、同じ条件でも数値が115/75から135/90までかなりばらつく
      なので平均値だけを参考にしている。自宅のA&D UA-611 Plusでも病院の機器でも同じような変動が見られる
  • データ形式を分析しながら、年・月・日・時・分をビット単位で推定してみたが、**ビット反転(reverse)**が必要な理由や空き領域の意味はまだ分からない

  • 「これをリバースエンジニアリングすれば血圧が良くなりそうだ」という冗談があまりに共感できて、読んだあと本当に健康になった気がした

  • オレンジジュースとバナナを1日2回摂るようにしたら、血圧が142/90 → 125/80に下がった
    1日あたり約2000mgのカリウムを摂取することになる

    • 血圧を下げるためにオレンジジュースとバナナを新たに始めたのか、それともやめたのかが気になる
  • 「stupid in ways that made me think」という文は、AIの長所と限界を同時によく表した要約のように思える

    • AIはそこそこ使えるラバーダックであり、まあまあ実用になる検索エンジンでもある
  • 私も同じように健康データを自分で管理し始めた
    年齢を重ねた開発者たちが体の異変を感じ、主体的な健康管理をする流れは今後ますます増える気がする
    関連文書はmikado-aktiia.readthedocs.ioにまとめた

    • 最新のアプリ版では、Apple Healthに1日平均値をエクスポートできる
      私はBPExtractでPDFを読み取り、すべての測定値をApple Healthへ自動で書き出しているが、手動より自動化のほうがずっと良いと感じている
    • PDFを読む代わりに、Bluetoothトラフィックを直接スニッフィングするほうが簡単かもしれないと提案する
    • 今は年齢に関係なく、自分で健康を管理しなければならない時代だと感じる
      一般医(GP)は結局のところ専門医へ回すための窓口にすぎず、待ち時間が長すぎるからだ
      ただし自分の判断が間違っている可能性は常に前提にしておくべきだ
    • 括弧を1つ書き忘れていると軽く指摘する
  • トラフィックダンプを見ると、プロトコルをオフラインで解析してみたくなる
    最近もWindowsの仮想プリンタドライバを**リバースエンジニアリング(reverse engineering)**するのに半日を費やしたが、続けたい気持ちを無理やり抑えた

    • (スペイン語の無関係なコメントは省略)