- 약국에서 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에서 첫 세 번의 측정값을 확인
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’(백의 고혈압) 을 언급
- 주사 직후 혈압 측정 시 일시적으로 높은 수치가 나타날 수 있음
- 결론적으로, 예방접종 직후 혈압 측정은 권장되지 않음