- Después de ponerse el monitor de presión arterial Microlife WatchBP O3 en la farmacia, intentó revisar los datos directamente y encontró el puerto micro-USB del dispositivo
- Ejecutó el software WatchBP Analyzer en Linux, pero no logró que reconociera el dispositivo; después consiguió descargar los datos usando una máquina virtual con Windows
- Usó Wireshark y usbmon para capturar la comunicación USB, y confirmó en los paquetes de datos una estructura de bytes que incluía presión sistólica, diastólica y frecuencia cardíaca
- También rastreó OPP (presión máxima oscilométrica) y las marcas de tiempo, pero no logró interpretar con claridad la estructura de los datos de hora
- El intento de ingeniería inversa se detuvo por falta de tiempo, pero le dejó experiencia analizando estructuras de datos y el concepto de “hipertensión de bata blanca”
El monitor de presión arterial y los primeros intentos
- Después de recibir una vacuna contra la influenza en la farmacia, su lectura de presión arterial salió alta y le colocaron un dispositivo de monitoreo de presión arterial de 24 horas
- El dispositivo mide automáticamente cada 30 minutos (de día) y cada 60 minutos (de noche)
- Descubrió el puerto micro-USB en un costado del aparato e intentó acceder a los datos
- El modelo del dispositivo era Microlife WatchBP O3, y descargó el software WatchBP Analyzer para Windows relacionado
- Intentó ejecutarlo en Linux usando Bottles, pero el dispositivo no fue reconocido
- Aparecía como un dispositivo
hidraw, lo que confirmó que usaba una interfaz USB HID
- Después instaló una máquina virtual de Windows (Gnome Boxes) y, al conectar el dispositivo USB, logró descargar los datos
- En WatchBP Analyzer pudo ver las primeras tres mediciones
Análisis del tráfico USB
- Aprovechó el entorno de la máquina virtual para capturar la comunicación USB con Wireshark
- Registró el flujo de datos entre el dispositivo y el host mediante la interfaz
usbmon3
- En los paquetes capturados encontró una secuencia de bytes que parecía contener los valores de presión arterial
- Ejemplo:
05 0a 89 71 43 9b
- Estimó que el tercer byte correspondía a la presión sistólica (SYS), el cuarto a la presión diastólica (DIA) y el quinto a la frecuencia cardíaca (HR)
- Comparó varias mediciones para organizar el patrón de datos
- Ejemplos:
137/113/67, 132/86/68, 126/84/82
- Cada paquete estaba compuesto en bloques de 32 bytes, y el primer byte indicaba la longitud de los datos válidos (SIGNIFICANT BITS)
Exploración adicional de la estructura de datos
- Analizó bytes adicionales que incluían OPP (presión máxima oscilométrica) y marcas de tiempo
- Los datos de OPP aparecían en los paquetes posteriores a cada medición, pero su posición no era constante
- Supuso que los 4 bytes posteriores a SYS, DIA y HR eran una marca de tiempo de 32 bits, pero no coincidían con la hora real de medición
- Observó un patrón en el que el valor de la sexta columna cambiaba de
82 a 83 al pasar de AM a PM, mientras que la séptima columna se reiniciaba
- Algunos valores parecían seguir una tendencia similar a los minutos de la hora de medición, pero no se confirmó una regla clara
Experimentos con IA y código
- Intentó analizar los datos introduciéndolos en varios modelos de IA a través de la plataforma Kagi
- Algunos dieron resultados no válidos, pero aun así ayudaron con la dirección del análisis, como el concepto de endianness
- También intentó reproducir con Python el handshake inicial del dispositivo y la descarga de datos, pero el código generado por la IA fue en su mayoría incorrecto
- En el proceso descubrió la biblioteca pyhidapi
Cierre y aprendizajes
- Tuvo que detener el trabajo de ingeniería inversa por la fecha de devolución del dispositivo
- Aun así, obtuvo experiencia práctica en análisis de estructuras de datos USB e ingeniería inversa
- Entre los términos nuevos que aprendió mencionó “Normotension” (presión arterial normal) y “White Coat Hypertension” (hipertensión de bata blanca)
- La presión arterial puede subir temporalmente cuando se mide justo después de una inyección
- En conclusión, no se recomienda medir la presión arterial inmediatamente después de una vacunación
1 comentarios
Comentarios de Hacker News
Tengo problemas de hipertensión, así que compré un dispositivo de Hilo
Después de calibrarlo usando un manguito en el brazo, te pones un dispositivo pequeño en la muñeca y mide automáticamente la presión arterial de día y de noche cuando no te estás moviendo
Los datos se sincronizan y guardan en una app del smartphone, lo que evita la molestia de ponerse el manguito cada vez y la hipertensión de bata blanca (white coat hypertension)
Eso sí, hay que recalibrarlo con el manguito más o menos una vez al mes, y la función de la app que mide el dedo con la cámara da resultados inconsistentes
En un texto sobre AI aparecía la expresión "stupid in ways that made me think", y siento que esa frase resume muy bien por qué la AI sirve para el rubber duck debugging
Te hace pensar más a fondo que cuando hablas con un colega
Me puse un monitor de frecuencia cardíaca y analicé los datos, y solo había dos casos en los que mi pulso se disparaba: cuando manejaba y cuando hablaba con mi esposa
Un nadador dice que no usa ningún dispositivo y solo escucha su propio pulso
La hipertensión de bata blanca no necesariamente se debe a las inyecciones o al entorno hospitalario; también puede venir simplemente de la tensión del momento de la medición
Al final le recetaron medicamentos
Desde entonces, hasta él se pone tenso cada vez que a su esposa le miden la presión
Por eso solo tomo en cuenta el promedio. Tanto el A&D UA-611 Plus de casa como los equipos del hospital muestran variaciones parecidas
Al analizar el formato de los datos, intentó deducir a nivel de bits el año, mes, día, hora y minuto, pero todavía no entiende por qué hace falta un reverse de bits (reverse) ni qué significan los espacios vacíos
El chiste de "si hago ingeniería inversa de esto, seguro me mejora la presión" fue tan identificable que, después de leerlo, casi sintió que de verdad había mejorado su salud
Después de tomar jugo de naranja y comer plátano dos veces al día, su presión bajó de 142/90 → 125/80
Terminó consumiendo unos 2000 mg de potasio al día
La frase "stupid in ways that made me think" parece resumir muy bien al mismo tiempo las fortalezas y limitaciones de la AI
Yo también empecé a gestionar directamente mis propios datos de salud
Parece probable que aumente la tendencia de desarrolladores mayores que, al notar señales raras en el cuerpo, practican una gestión proactiva de su salud
Organicé documentación relacionada en mikado-aktiia.readthedocs.io
Yo uso BPExtract para leer PDFs y exportar automáticamente todas las mediciones a Apple Health; siento que automatizarlo es muchísimo mejor que hacerlo a mano
El médico general (GP) al final solo funciona como paso previo hacia el especialista, y los tiempos de espera son demasiado largos
Eso sí, siempre hay que partir de la base de que uno puede estar equivocado en su propio juicio
Al ver el volcado de tráfico dan ganas de analizar el protocolo sin conexión
Hace poco también pasó medio día haciendo ingeniería inversa (reverse engineering) de un driver de impresora virtual para Windows, y tuvo que obligarse a parar aunque quería seguir