- Après avoir porté un tensiomètre Microlife WatchBP O3 à la pharmacie, l’auteur a voulu consulter directement les données et a découvert le port micro-USB de l’appareil
- Il a essayé d’exécuter le logiciel WatchBP Analyzer sous Linux, mais l’appareil n’a pas été reconnu ; il a ensuite réussi à télécharger les données via une machine virtuelle Windows
- En utilisant Wireshark et usbmon pour capturer les communications USB, il a identifié dans les paquets de données une structure d’octets contenant la pression systolique, la pression diastolique et la fréquence cardiaque
- Il a aussi tenté de repérer l’OPP (pression oscillométrique maximale) et les horodatages, mais la structure des données temporelles n’a pas pu être interprétée clairement
- La tentative de rétro-ingénierie a été interrompue par l’échéance de restitution de l’appareil, mais elle a permis d’acquérir une expérience d’analyse de structures de données et de découvrir la notion d’hypertension de la blouse blanche
Le tensiomètre et les premières tentatives
- Après avoir reçu un vaccin contre la grippe à la pharmacie, une mesure de tension artérielle élevée a conduit à porter un appareil de mesure ambulatoire de la tension sur 24 heures
- L’appareil mesure automatiquement toutes les 30 minutes (en journée) et toutes les 60 minutes (la nuit)
- En remarquant le port micro-USB sur le côté de l’appareil, l’auteur a tenté d’accéder aux données
- Le modèle de l’appareil était le Microlife WatchBP O3 ; le logiciel WatchBP Analyzer pour Windows correspondant a été téléchargé
- Une tentative d’exécution sous Linux via Bottles a échoué, l’appareil n’étant pas reconnu
- Il apparaissait comme un périphérique
hidraw, ce qui a confirmé l’utilisation d’une interface USB HID
- Une machine virtuelle Windows (Gnome Boxes) a ensuite été installée ; après connexion du périphérique USB, le téléchargement des données a réussi
- Les trois premières mesures ont pu être consultées dans WatchBP Analyzer
Analyse du trafic USB
- L’environnement de machine virtuelle a été utilisé pour capturer les communications USB avec Wireshark
- Le flux de données entre l’appareil et l’hôte a été enregistré via l’interface
usbmon3
- Dans les paquets capturés, une séquence d’octets semblant contenir les valeurs de tension a été repérée
- Exemple :
05 0a 89 71 43 9b
- Le 3e octet a été supposé correspondre à la pression systolique (SYS), le 4e à la pression diastolique (DIA) et le 5e à la fréquence cardiaque (HR)
- En comparant plusieurs mesures, un motif de données a été dégagé
- Exemples :
137/113/67, 132/86/68, 126/84/82, etc.
- Chaque paquet est structuré par blocs de 32 octets, et le premier octet indique la longueur des données significatives (SIGNIFICANT BITS)
Exploration de structures de données supplémentaires
- Des octets supplémentaires incluant l’OPP (pression oscillométrique maximale) et les horodatages ont été analysés
- Les données OPP apparaissaient dans les paquets suivant chaque mesure, mais leur position n’était pas constante
- Les 4 octets suivant SYS, DIA et HR ont été supposés former un horodatage 32 bits, mais ils ne correspondaient pas à l’heure réelle des mesures
- Une tendance a été observée : la valeur de la 6e colonne passe de
82 à 83 lors du basculement AM/PM, tandis que la 7e colonne est réinitialisée
- Certaines valeurs semblaient se rapprocher des minutes de l’heure de mesure, sans qu’une règle claire puisse être établie
IA et expérimentations de code
- Plusieurs modèles d’IA ont été sollicités via la plateforme Kagi pour analyser les données
- Certains ont proposé des résultats invalides, mais ils ont tout de même aidé à orienter l’analyse, notamment sur la notion d’endianness
- En Python, l’auteur a essayé d’imiter le handshake initial de l’appareil et le téléchargement des données, mais le code fourni par l’IA était en grande partie incorrect
- Au passage, cela a permis de découvrir la bibliothèque pyhidapi
Conclusion et enseignements
- La rétro-ingénierie a dû être interrompue parce que l’appareil devait être restitué
- Le processus a néanmoins apporté une expérience pratique d’analyse de structures de données USB et de rétro-ingénierie
- Parmi les nouveaux termes appris figurent « Normotension » et « White Coat Hypertension »
- Une mesure de tension juste après une injection peut donner une valeur temporairement élevée
- En conclusion, il n’est pas recommandé de mesurer sa tension artérielle immédiatement après une vaccination
1 commentaires
Commentaire sur Hacker News
J’ai des problèmes d’hypertension et j’ai acheté un appareil Hilo
Après avoir effectué un étalonnage (calibration) avec un brassard au bras, on porte un petit dispositif au poignet, qui mesure automatiquement la tension jour et nuit quand on ne bouge pas
Les données sont synchronisées et stockées dans une application smartphone, ce qui évite la contrainte de remettre le brassard à chaque fois ainsi que l’hypertension de la blouse blanche (white coat hypertension)
En revanche, il faut refaire l’étalonnage avec le brassard environ une fois par mois, et la fonction de mesure du doigt via la caméra de l’application donne des résultats irréguliers
Dans un article sur l’IA, il y avait l’expression « stupid in ways that made me think », et j’ai l’impression que ça résume parfaitement pourquoi l’IA est utile pour le rubber duck debugging
Elle pousse à réfléchir plus profondément qu’une discussion avec un collègue
En portant un moniteur de fréquence cardiaque et en analysant les données, je me suis aperçu qu’il n’y avait que deux situations où mon rythme cardiaque grimpait fortement — quand je conduisais et quand je parlais avec ma femme
Un nageur dit qu’il n’utilise aucun appareil et qu’il se contente d’écouter son propre cœur
L’hypertension de la blouse blanche n’est pas forcément liée à une piqûre ou à l’environnement hospitalier, cela peut simplement venir de la tension liée à la situation de mesure
Il a finalement reçu une prescription
Depuis, chaque fois qu’on lui prend sa tension, je me tends moi aussi
Du coup, je ne regarde que la moyenne. Mon A&D UA-611 Plus à la maison comme les appareils de l’hôpital montrent des variations similaires
En analysant le format des données, j’ai essayé d’identifier au niveau des bits l’année, le mois, le jour, l’heure et les minutes, mais je ne comprends toujours pas pourquoi il faut un reverse de bits (reverse) ni ce que signifient les zones vides
La blague « si j’arrive à faire la rétro-ingénierie de ça, ma tension ira mieux » m’a tellement parlé que, rien qu’en la lisant, j’ai eu l’impression d’être en meilleure santé
En buvant du jus d’orange et en mangeant des bananes deux fois par jour, ma tension est passée de 142/90 → 125/80
Cela représente environ 2000 mg de potassium par jour
La phrase « stupid in ways that made me think » semble être un excellent résumé à la fois des qualités et des limites de l’IA
Moi aussi, j’ai commencé à gérer plus directement mes propres données de santé
J’ai l’impression qu’on va voir de plus en plus de développeurs vieillissants adopter une gestion proactive de leur santé à mesure qu’ils sentent que leur corps commence à dérailler
J’ai rassemblé la documentation associée sur mikado-aktiia.readthedocs.io
Moi, j’utilise BPExtract pour lire les PDF et exporter automatiquement toutes les mesures vers Apple Health, et j’ai le sentiment que l’automatisation est bien meilleure que le manuel
Le généraliste ne sert au fond qu’à aiguiller vers un spécialiste, et les délais d’attente sont beaucoup trop longs
Cela dit, il faut toujours garder à l’esprit qu’on peut se tromper dans son propre jugement
En voyant un dump de trafic, j’ai envie d’analyser le protocole hors ligne
Récemment encore, j’ai passé une demi-journée à faire de la rétro-ingénierie (reverse engineering) sur un pilote d’imprimante virtuelle Windows, et j’ai dû me forcer à arrêter alors que j’avais envie de continuer