# 혈압 측정기 프로토콜을 24시간 만에 역공학하지 못했다

> Clean Markdown view of GeekNews topic #24322. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24322](https://news.hada.io/topic?id=24322)
- GeekNews Markdown: [https://news.hada.io/topic/24322.md](https://news.hada.io/topic/24322.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-13T01:33:27+09:00
- Updated: 2025-11-13T01:33:27+09:00
- Original source: [james.belchamber.com](https://james.belchamber.com/articles/blood-pressure-monitor-reverse-engineering/)
- Points: 1
- Comments: 1

## Topic Body

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

## Comments



### Comment 46255

- Author: neo
- Created: 2025-11-13T01:33:28+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45893095) 
- 고혈압 문제가 있어서 [Hilo](https://hilo.com) 기기를 구입했음  
  팔에 커프를 착용해 **보정(calibration)** 한 뒤 손목에 작은 장치를 차면, 움직이지 않을 때 주야로 자동으로 혈압을 측정함  
  데이터는 스마트폰 앱과 동기화되어 저장되고, 커프를 매번 차는 번거로움과 **백의 고혈압(white coat hypertension)** 을 피할 수 있음  
  다만 한 달 정도마다 커프로 다시 보정해야 하고, 앱의 카메라로 손가락을 측정하는 기능은 결과가 들쭉날쭉함
  - 정확도는 어느 정도인지 궁금함  

- AI 관련 글에서 “**stupid in ways that made me think**”이라는 표현이 있었는데, 이게 바로 AI가 **러버덕 디버깅**에 유용한 이유를 잘 요약한 문장 같음  
  동료와 대화할 때보다 더 깊이 생각하게 만들어줌  

- 심박수 모니터를 착용하고 데이터를 분석해보니, 심박수가 급상승하는 경우가 두 가지뿐이었음 — 운전할 때와 아내와 대화할 때임  
  - 과학을 위해 운전하면서 아내와 대화할 때의 데이터도 필요하다고 농담함  
  - Oura가 헬스장에서의 운동을 **스트레스**로 인식하는 경우가 있는데, 실제로 운동이 몸에 스트레스를 주는 게 맞다는 의견도 있음  
    한 수영 선수는 어떤 기기도 쓰지 않고 자신의 심박만 듣는다고 함  
  - 아마 자동차와 아내 둘 다 사랑해서 그런 거라고 유쾌하게 말함  

- 백의 고혈압은 꼭 주사를 맞거나 병원 환경 때문만은 아니고, 단순히 **측정 상황의 긴장감** 때문일 수도 있음  
  - 친구가 병원에서 예쁜 간호사에게 혈압을 쟀는데 너무 높게 나와서, 의사가 다시 측정했더니 여전히 높았음  
    결국 약을 처방받게 되었음  
  - 병원에 늦을까 봐 뛰어가서 혈압을 쟀더니 너무 높게 나와, 의사가 집에서 조용히 다시 재보라고 권했음  
  - 아내가 자가면역 질환으로 병원에 자주 가는데, 자동 혈압계가 고장 나서 팔을 계속 조여서 공포스러웠던 적이 있음  
    그 이후로 아내가 혈압을 잴 때마다 나까지 긴장하게 됨  
  - 치과 공포증이 심해서, 만약 상시 모니터를 차고 있다면 치과에 있을 때 혈압이 확실히 튈 것 같음  
  - 나는 ADHD 약 조절 때문에 매일 혈압을 재는데, 같은 조건에서도 수치가 **115/75에서 135/90**까지 들쭉날쭉함  
    그래서 평균값만 참고함. 집의 A&D UA-611 Plus나 병원 기기 모두 비슷한 변동을 보임  

- 데이터 포맷을 분석해보며 연도, 월, 일, 시, 분을 비트 단위로 추정했지만, **비트 반전(reverse)** 이 필요한 이유나 빈 구간의 의미는 아직 모르겠음  

- “이걸 역공학하면 혈압이 좋아질 것 같다”는 농담이 너무 공감되어, 읽고 나니 진짜 건강해진 기분이 듦  

- 오렌지 주스와 바나나를 하루 두 번 먹었더니 혈압이 **142/90 → 125/80**으로 내려감  
  하루 약 2000mg의 칼륨을 섭취하게 됨  
  - 혈압을 낮추기 위해 오렌지 주스와 바나나를 새로 시작한 건지, 중단한 건지 궁금함  

- “stupid in ways that made me think”이라는 문장은 AI의 장점과 한계를 동시에 잘 표현한 요약 같음  
  - AI는 괜찮은 **러버덕**이자, 그럭저럭 쓸 만한 검색 엔진임  

- 나도 비슷하게 건강 데이터를 직접 관리해보기 시작했음  
  나이 든 개발자들이 몸의 이상을 느끼며 **자기 주도적 건강 관리**를 하는 흐름이 늘어날 것 같음  
  관련 문서를 [mikado-aktiia.readthedocs.io](https://mikado-aktiia.readthedocs.io/en/latest/)에 정리했음  
  - 최신 앱 버전은 Apple Health로 하루 평균값을 내보낼 수 있음  
    나는 BPExtract로 PDF를 읽어 모든 측정값을 Apple Health로 자동 내보내는데, 수동보다 자동화가 훨씬 낫다고 느낌  
  - PDF를 읽는 대신 **Bluetooth 트래픽을 직접 스니핑**하는 게 더 쉬울 수도 있겠다고 제안함  
  - 요즘은 나이와 상관없이 스스로 건강을 챙겨야 하는 시대라고 느낌  
    일반의(GP)는 결국 전문의로 가는 신호 역할만 하고, 대기 기간이 너무 길기 때문임  
    다만 자기 판단이 틀릴 수 있다는 전제를 항상 가져야 함  
  - 괄호 하나를 빼먹었다고 가볍게 지적함  

- 트래픽 덤프를 보면 프로토콜을 오프라인에서 분석해보고 싶다는 생각이 듦  
  최근에도 Windows 가상 프린터 드라이버를 **역공학(reverse engineering)** 하느라 반나절을 보냈는데, 계속하고 싶은 걸 억지로 멈췄음  
  - (스페인어로 된 무관한 댓글은 생략함)
