1 điểm bởi GN⁺ 2025-11-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sau khi đeo máy đo huyết áp Microlife WatchBP O3 tại hiệu thuốc, tác giả muốn tự kiểm tra dữ liệu và phát hiện cổng micro-USB trên thiết bị
  • Đã chạy phần mềm WatchBP Analyzer trong môi trường Linux nhưng không nhận ra thiết bị, sau đó tải dữ liệu thành công qua máy ảo Windows
  • Dùng Wireshark và usbmon để ghi lại giao tiếp USB, đồng thời xác định được cấu trúc byte trong các gói dữ liệu chứa huyết áp tâm thu, tâm trương và nhịp tim
  • Tiếp tục truy vết OPP (áp suất dao động cực đại)dấu thời gian, nhưng cấu trúc dữ liệu thời gian vẫn chưa được giải mã rõ ràng
  • Nỗ lực đảo ngược phải dừng lại vì đến hạn, nhưng đây là một trải nghiệm giúp học thêm về phân tích cấu trúc dữ liệu và khái niệm “tăng huyết áp áo choàng trắng”

Máy đo huyết áp và những thử nghiệm ban đầu

  • Sau khi tiêm vắc-xin cúm ở hiệu thuốc, kết quả đo huyết áp cao nên tác giả được đeo thiết bị đo huyết áp 24 giờ
    • Thiết bị tự động đo mỗi 30 phút (ban ngày) và 60 phút (ban đêm)
    • Tác giả phát hiện cổng micro-USB ở cạnh bên thiết bị và thử truy cập dữ liệu
  • Mẫu thiết bị là Microlife WatchBP O3, và tác giả tải xuống phần mềm WatchBP Analyzer cho Windows
    • Đã thử chạy bằng Bottles trong môi trường Linux nhưng không nhận ra thiết bị
    • Thiết bị hiển thị dưới dạng hidraw, cho thấy nó sử dụng giao diện USB HID
  • Sau đó, tác giả cài máy ảo Windows (Gnome Boxes) và kết nối thiết bị USB, từ đó tải dữ liệu thành công
    • Trong WatchBP Analyzer, tác giả xem được ba kết quả đo đầu tiên

Phân tích lưu lượng USB

  • Tận dụng môi trường máy ảo để ghi lại giao tiếp USB bằng Wireshark
    • Ghi nhận luồng dữ liệu giữa thiết bị và máy chủ thông qua giao diện usbmon3
  • Trong các gói đã ghi, tác giả phát hiện những chuỗi byte có vẻ chứa giá trị huyết áp
    • Ví dụ: 05 0a 89 71 43 9b
    • Byte thứ 3 được suy đoán là huyết áp tâm thu (SYS), byte thứ 4 là huyết áp tâm trương (DIA), và byte thứ 5 là nhịp tim (HR)
  • So sánh nhiều kết quả đo để tổng hợp mẫu hình dữ liệu
    • Ví dụ: 137/113/67, 132/86/68, 126/84/82
    • Mỗi gói được cấu thành theo đơn vị 32 byte, trong đó byte đầu tiên biểu thị độ dài dữ liệu hợp lệ (SIGNIFICANT BITS)

Khám phá thêm về cấu trúc dữ liệu

  • Phân tích thêm các byte chứa OPP (áp suất dao động cực đại)dấu thời gian
    • Dữ liệu OPP xuất hiện trong gói sau mỗi lần đo nhưng vị trí không cố định
    • Tác giả giả định 4 byte sau SYS, DIA, HR là dấu thời gian 32 bit, nhưng chúng không khớp với thời điểm đo thực tế
  • Quan sát thấy giá trị ở cột thứ 6 đổi từ 82 sang 83 khi chuyển từ sáng sang chiều, và cột thứ 7 bị đặt lại
    • Một số giá trị có xu hướng giống với số phút trong thời điểm đo, nhưng không xác nhận được quy luật rõ ràng

Thử nghiệm với AI và mã nguồn

  • Tác giả dùng nền tảng Kagi để đưa dữ liệu cho nhiều mô hình AI phân tích
    • Một số mô hình đưa ra kết quả không hợp lệ, nhưng vẫn gợi mở hướng phân tích như khái niệm endianness
  • Tác giả cũng thử dùng Python để mô phỏng bắt tay ban đầu của thiết bị và quá trình tải dữ liệu, nhưng mã do AI cung cấp phần lớn không chính xác
    • Trong quá trình này, tác giả biết đến thư viện pyhidapi

Kết lại và bài học rút ra

  • Vì phải trả lại thiết bị theo lịch, nỗ lực đảo ngược buộc phải dừng lại
    • Dù vậy, tác giả đã tích lũy được kinh nghiệm thực hành về phân tích cấu trúc dữ liệu USB và đảo ngược
  • Những thuật ngữ mới được nhắc đến gồm “Normotension” (huyết áp bình thường)“White Coat Hypertension” (tăng huyết áp áo choàng trắng)
    • Huyết áp có thể tăng tạm thời khi đo ngay sau khi tiêm
  • Kết luận là, không nên đo huyết áp ngay sau khi tiêm chủng

1 bình luận

 
GN⁺ 2025-11-13
Bình luận trên Hacker News
  • Vì có vấn đề cao huyết áp nên tôi đã mua thiết bị Hilo
    Sau khi đeo vòng bít ở tay để hiệu chuẩn (calibration), chỉ cần đeo một thiết bị nhỏ ở cổ tay là nó sẽ tự động đo huyết áp cả ngày lẫn đêm khi bạn không cử động
    Dữ liệu được đồng bộ và lưu trong ứng dụng trên điện thoại thông minh, giúp tránh sự phiền toái phải đeo vòng bít mỗi lần và cả tăng huyết áp áo choàng trắng (white coat hypertension)
    Tuy vậy, khoảng mỗi tháng vẫn phải hiệu chuẩn lại bằng vòng bít, và tính năng dùng camera của ứng dụng để đo ở ngón tay cho kết quả khá thất thường

    • Tôi tò mò không biết độ chính xác thực tế đến mức nào
  • Trong một bài viết về AI có câu “stupid in ways that made me think”, và tôi thấy đây là câu tóm tắt rất đúng lý do AI hữu ích cho rubber duck debugging
    Nó khiến tôi phải suy nghĩ sâu hơn cả khi nói chuyện với đồng nghiệp

  • Sau khi đeo máy theo dõi nhịp tim và phân tích dữ liệu, tôi nhận ra chỉ có hai trường hợp nhịp tim tăng vọt — khi lái xe và khi nói chuyện với vợ

    • Có người đùa rằng vì khoa học thì còn cần cả dữ liệu lúc vừa lái xe vừa nói chuyện với vợ
    • Có khi Oura nhận diện việc tập trong phòng gym là căng thẳng, nhưng cũng có ý kiến cho rằng tập luyện đúng là gây căng thẳng cho cơ thể
      Một vận động viên bơi lội nói rằng anh ấy không dùng thiết bị nào cả, chỉ lắng nghe nhịp tim của chính mình
    • Có người vui vẻ nói chắc là vì họ yêu cả ô tô lẫn vợ mình
  • Tăng huyết áp áo choàng trắng không nhất thiết chỉ do tiêm hay môi trường bệnh viện, mà có thể đơn giản là do căng thẳng của tình huống đo

    • Có người kể bạn mình được một y tá xinh đẹp đo huyết áp trong bệnh viện, kết quả cao bất thường, bác sĩ đo lại thì vẫn cao
      Cuối cùng người đó được kê thuốc
    • Có người chạy vội đến bệnh viện vì sợ muộn, đo huyết áp xong thấy quá cao nên bác sĩ khuyên về nhà ngồi yên rồi đo lại
    • Vợ của một người bị bệnh tự miễn và phải vào viện thường xuyên; có lần máy đo huyết áp tự động bị lỗi, cứ siết chặt cánh tay mãi khiến cô ấy rất sợ
      Từ sau đó, mỗi lần vợ đo huyết áp là đến cả người chồng cũng thấy căng thẳng theo
    • Có người bị ám ảnh nha khoa rất nặng, nên nghĩ rằng nếu đeo máy theo dõi liên tục thì huyết áp chắc chắn sẽ tăng vọt khi ở phòng nha
    • Tôi đo huyết áp mỗi ngày để điều chỉnh thuốc ADHD, nhưng ngay cả trong cùng điều kiện thì số đo vẫn dao động từ 115/75 đến 135/90
      Vì vậy tôi chỉ xem giá trị trung bình. Cả chiếc A&D UA-611 Plus ở nhà lẫn máy ở bệnh viện đều cho thấy mức biến động tương tự
  • Khi phân tích định dạng dữ liệu, tôi đã thử suy đoán năm, tháng, ngày, giờ và phút ở mức bit, nhưng vẫn chưa hiểu vì sao lại cần đảo bit (reverse) hoặc ý nghĩa của các khoảng trống

  • Câu đùa “nếu reverse engineering cái này thì chắc huyết áp sẽ tốt hơn” quá đồng cảm, đọc xong tôi còn thấy như mình khỏe ra thật

  • Sau khi uống nước cam và ăn chuối hai lần mỗi ngày, huyết áp của tôi giảm từ 142/90 → 125/80
    Thành ra mỗi ngày tôi nạp khoảng 2000mg kali

    • Có người hỏi không biết là để hạ huyết áp thì bạn mới bắt đầu dùng nước cam và chuối, hay là đã ngừng dùng chúng
  • Câu “stupid in ways that made me think” có vẻ là một cách tóm tắt rất hay, vừa nói lên ưu điểm vừa nói lên giới hạn của AI

    • AI là một rubber duck khá ổn, đồng thời cũng là một công cụ tìm kiếm tạm được
  • Tôi cũng bắt đầu tự quản lý dữ liệu sức khỏe của mình theo cách tương tự
    Có cảm giác rằng ngày càng nhiều lập trình viên lớn tuổi, khi bắt đầu nhận thấy cơ thể có vấn đề, sẽ chuyển sang quản lý sức khỏe chủ động
    Tôi đã tổng hợp tài liệu liên quan tại mikado-aktiia.readthedocs.io

    • Phiên bản ứng dụng mới nhất có thể xuất giá trị trung bình theo ngày sang Apple Health
      Tôi dùng BPExtract để đọc PDF và tự động xuất toàn bộ kết quả đo sang Apple Health; cảm giác tự động hóa tốt hơn hẳn làm thủ công
    • Có người gợi ý rằng thay vì đọc PDF thì có thể sniff trực tiếp lưu lượng Bluetooth, có lẽ còn dễ hơn
    • Có cảm giác rằng giờ đây bất kể tuổi tác ra sao thì ai cũng phải tự chăm sóc sức khỏe của mình
      Bác sĩ đa khoa (GP) rốt cuộc chỉ đóng vai trò chuyển tiếp sang bác sĩ chuyên khoa, mà thời gian chờ thì quá lâu
      Tuy vậy vẫn phải luôn giữ trong đầu rằng phán đoán của bản thân có thể sai
    • Có người nhẹ nhàng chỉ ra rằng đã thiếu mất một dấu ngoặc đơn
  • Nhìn traffic dump là lại muốn đem giao thức về phân tích offline
    Gần đây tôi cũng đã tốn nửa ngày để reverse engineering một driver máy in ảo trên Windows, rồi phải cố ép mình dừng lại dù rất muốn tiếp tục

    • (Đã lược bỏ một bình luận không liên quan bằng tiếng Tây Ban Nha)