- Nach dem Anlegen des Microlife WatchBP O3-Blutdruckmessgeräts in der Apotheke wurde beim Versuch, die Daten direkt einzusehen, der micro-USB-Port des Geräts entdeckt
- Die WatchBP Analyzer-Software wurde in einer Linux-Umgebung ausgeführt, erkannte das Gerät jedoch nicht; anschließend gelang der Daten-Download über eine Windows-virtuelle Maschine
- Mit Wireshark und usbmon wurde die USB-Kommunikation aufgezeichnet, und in den Datenpaketen wurde eine Byte-Struktur identifiziert, die systolischen und diastolischen Blutdruck sowie die Herzfrequenz enthält
- Zusätzlich wurden OPP (oszillatorischer Spitzendruck) und Zeitstempel verfolgt, doch die Struktur der Zeitdaten ließ sich nicht eindeutig interpretieren
- Der Versuch des Reverse Engineerings wurde wegen einer Frist abgebrochen, lieferte aber neue Erfahrungen bei der Analyse von Datenstrukturen und mit dem Konzept der Weißkittelhypertonie
Das Blutdruckmessgerät und die ersten Versuche
- Nach einer Grippeimpfung in der Apotheke war der gemessene Blutdruck erhöht, woraufhin ein 24-Stunden-Blutdruckmessgerät angelegt wurde
- Das Gerät misst automatisch im Abstand von 30 Minuten (tagsüber) bzw. 60 Minuten (nachts)
- An der Seite des Geräts wurde ein micro-USB-Port entdeckt, und es wurde versucht, auf die Daten zuzugreifen
- Das Gerätemodell war Microlife WatchBP O3, und die zugehörige WatchBP Analyzer-Software für Windows wurde heruntergeladen
- Der Start unter Linux mit Bottles gelang, aber das Gerät wurde nicht erkannt
- Es erschien als
hidraw-Gerät, was auf die Nutzung einer USB-HID-Schnittstelle hindeutete
- Danach wurde eine Windows-virtuelle Maschine (Gnome Boxes) eingerichtet; nach dem Verbinden des USB-Geräts gelang der Daten-Download
- Im WatchBP Analyzer konnten die ersten drei Messwerte eingesehen werden
Analyse des USB-Traffics
- In der VM-Umgebung wurde die USB-Kommunikation mit Wireshark aufgezeichnet
- Über die Schnittstelle
usbmon3 wurde der Datenfluss zwischen Gerät und Host protokolliert
- In den aufgezeichneten Paketen wurde eine Byte-Sequenz gefunden, die offenbar Blutdruckwerte enthält
- Beispiel:
05 0a 89 71 43 9b
- Das 3. Byte wurde als systolischer Blutdruck (SYS), das 4. als diastolischer Blutdruck (DIA) und das 5. als Herzfrequenz (HR) interpretiert
- Durch den Vergleich mehrerer Messwerte wurden Datenmuster zusammengestellt
- Beispiele:
137/113/67, 132/86/68, 126/84/82 usw.
- Jedes Paket besteht aus 32 Byte; das erste Byte gibt die Länge der gültigen Daten (SIGNIFICANT BITS) an
Weitere Erkundung der Datenstruktur
- Zusätzliche Bytes mit OPP (oszillatorischer Spitzendruck) und Zeitstempeln wurden analysiert
- OPP-Daten sind in den Paketen nach jeder Messung vorhanden, ihre Position ist jedoch nicht konstant
- Die 4 Bytes nach SYS, DIA und HR wurden als 32-Bit-Zeitstempel vermutet, stimmten aber nicht mit den tatsächlichen Messzeiten überein
- Es wurde beobachtet, dass sich der Wert in der 6. Spalte beim Wechsel von Vormittag zu Nachmittag von
82 auf 83 änderte und die 7. Spalte zurückgesetzt wurde
- Einige Werte zeigten eine Tendenz, den Minutenanteilen der Messzeit zu ähneln, eine klare Regel ließ sich jedoch nicht erkennen
KI- und Code-Experimente
- Über die Plattform Kagi wurden Daten in mehrere KI-Modelle eingespeist, um sie analysieren zu lassen
- Einige lieferten ungültige Ergebnisse, halfen aber bei der Richtung der Analyse, etwa beim Konzept der Endianness
- Mit Python wurde versucht, den initialen Handshake des Geräts und den Daten-Download nachzubilden, doch der von der KI gelieferte Code war größtenteils ungenau
- Dabei wurde auch die Bibliothek pyhidapi neu entdeckt
Fazit und Erkenntnisse
- Wegen der anstehenden Rückgabe des Geräts musste die Reverse-Engineering-Arbeit abgebrochen werden
- Der Prozess brachte praktische Erfahrung bei der Analyse von USB-Datenstrukturen und Reverse Engineering
- Als neu gelernte Begriffe wurden „Normotension“ und „White Coat Hypertension“ (Weißkittelhypertonie) genannt
- Direkt nach einer Injektion gemessener Blutdruck kann vorübergehend erhöht sein
- Daraus folgt: Eine Blutdruckmessung direkt nach einer Impfung ist nicht empfehlenswert
1 Kommentare
Hacker-News-Kommentare
Wegen Bluthochdruck habe ich ein Gerät von Hilo gekauft.
Nach der Kalibrierung mit einer Manschette am Oberarm trägt man ein kleines Gerät am Handgelenk, das tagsüber und nachts automatisch den Blutdruck misst, wenn man sich nicht bewegt.
Die Daten werden mit einer Smartphone-App synchronisiert und gespeichert, wodurch man sich das ständige Anlegen der Manschette spart und Weißkittelhypertonie vermeiden kann.
Allerdings muss etwa einmal im Monat mit der Manschette neu kalibriert werden, und die Funktion der App, mit der Kamera den Finger zu messen, liefert schwankende Ergebnisse.
In einem AI-bezogenen Artikel gab es den Ausdruck „stupid in ways that made me think“, und das fasst wohl sehr gut zusammen, warum AI für Rubber-Duck-Debugging nützlich ist.
Sie bringt mich dazu, tiefer nachzudenken als Gespräche mit Kolleg:innen.
Nachdem ich einen Herzfrequenzmonitor getragen und die Daten ausgewertet hatte, stellte ich fest, dass meine Herzfrequenz nur in zwei Fällen stark anstieg — beim Fahren und beim Gespräch mit meiner Frau.
Ein Schwimmer sagte, er benutze gar kein Gerät und höre nur auf seinen eigenen Puls.
Weißkittelhypertonie muss nicht unbedingt nur an Spritzen oder der Krankenhausumgebung liegen, sondern kann einfach durch die Anspannung der Messsituation entstehen.
Am Ende bekam er ein Rezept für Medikamente.
Seitdem werde sogar ich nervös, wenn bei ihr der Blutdruck gemessen wird.
Deshalb beachte ich nur den Durchschnitt. Sowohl mein A&D UA-611 Plus zu Hause als auch die Geräte im Krankenhaus zeigen ähnliche Schwankungen.
Beim Analysieren des Datenformats habe ich Jahr, Monat, Tag, Stunde und Minute bitweise geschätzt, aber ich verstehe noch nicht, warum eine Bit-Umkehrung (reverse) nötig ist oder was die leeren Bereiche bedeuten.
Der Witz „Wenn ich das reverse engineere, wird mein Blutdruck bestimmt besser“ war so nachvollziehbar, dass ich mich nach dem Lesen tatsächlich gesünder fühlte.
Nachdem ich zweimal täglich Orangensaft und Bananen konsumiert hatte, sank mein Blutdruck von 142/90 → 125/80.
Dadurch nahm ich etwa 2000 mg Kalium pro Tag zu mir.
Der Satz „stupid in ways that made me think“ scheint die Stärken und Grenzen von AI gleichzeitig gut zusammenzufassen.
Ich habe ebenfalls angefangen, meine Gesundheitsdaten selbst zu verwalten.
Ich denke, dass es mehr ältere Entwickler geben wird, die Veränderungen ihres Körpers wahrnehmen und selbstbestimmtes Gesundheitsmanagement betreiben.
Die zugehörigen Dokumente habe ich unter mikado-aktiia.readthedocs.io zusammengestellt.
Ich lese PDFs mit BPExtract aus und exportiere alle Messwerte automatisch nach Apple Health; im Vergleich zur manuellen Methode finde ich Automatisierung deutlich besser.
Hausärzte fungieren letztlich nur als Signalgeber für den Weg zum Facharzt, und die Wartezeiten sind viel zu lang.
Man muss allerdings immer davon ausgehen, dass die eigene Einschätzung falsch sein kann.
Beim Traffic-Dump denkt man sofort daran, das Protokoll offline analysieren zu wollen.
Erst kürzlich habe ich einen halben Tag damit verbracht, einen virtuellen Windows-Druckertreiber zu reverse engineeren, und musste mich zwingen aufzuhören, obwohl ich weitermachen wollte.