HID++를 통한 로지텍 마우스 레지스터 데이터 저장소 분석
로지텍 MX Vertical 마우스는 장치 간 DPI 설정을 저장하기 위해 플래시 메모리를 사용합니다. 이를 통해 2바이트 데이터 저장 장치로 활용할 가능성이 열렸습니다. Rust 기반 도구를 사용하면 USB HID 위에 구축된 HID++ 2.0 프로토콜을 통해 33개의 장치 속성을 열거할 수 있습니다.
이 프로토콜은 속성 테이블 방식으로 작동합니다: 안정적인 속성 ID(예: 0x2201)가 마우스 모델 인덱스(예: 0x12)와 연결됩니다. 요청은 패킷 형태로 구성됩니다: 리포트 ID, 장치 인덱스, 속성 인덱스, 함수 ID, 매개변수(최대 3바이트). 응답도 유사한 형식으로 전달됩니다.
대부분의 속성은 문서화되지 않았습니다. 유망해 보였던 TemplateBytesNVS(0x1eb0)와 PersistentRemappableAction(0x1c00)은 요청에 응답하지 않거나 macOS의 IOHIDManager에 의해 차단되었습니다. 후자는 오류 없이 긴 리포트를 조용히 폐기하므로 IOKit을 통한 우회 방법이 필요합니다.
레지스터 분석 및 저장소 탐색
장치 이름 레지스터는 쓰기를 허용하지만 무시하고 "MX Vertical"을 반환합니다. DPI 레지스터(u16)는 기능적임이 밝혀졌습니다: 검증 없이 모든 값을 수용합니다. 0x6869를 기록하면 단일 세션 내에서 컴퓨터를 전환해도 값이 유지됩니다.
마우스 전원을 껐다 켜면 값이 기본값으로 재설정됩니다. 기록은 활성 DPI에만 영향을 미치며 기본값은 변경되지 않습니다.
다른 레지스터(0x1e, 0x1f, 0x18xx)를 테스트해도 영구 저장소는 발견되지 않았습니다. 기본 DPI는 펌웨어의 폐쇄된 부분에 저장되거나 로지텍의 독점 도구를 통해서만 접근 가능할 가능성이 높습니다.
세션 저장소의 주요 특징:
- 마우스 전원이 켜져 있는 동안만 작동합니다.
- 크로스 컴퓨터: Unifying 리시버를 이동해도 데이터가 보존됩니다.
- 용량: 엄격히 2바이트(
u16). - 검증 없음: 0부터 65535까지 모든 값 허용.
HID++ 리버스 엔지니어링에서 얻은 교훈
조사를 통해 기능 테이블과 기능 인덱스 간 차이가 드러났습니다. 로지텍의 IFeatureSet 역방향 조회는 고장 난 상태입니다. 문서는 속성의 절반만 다루며 나머지는 실험을 통해 파악해야 합니다.
macOS IOHIDManager는 비표준 리포트를 조용히 차단합니다. PersistentRemappableAction에 쓰려면 알림 또는 저수준 접근이 필요합니다.
Rust 접근법의 장점:
- 로지텍 SDK에 의존하지 않고 전체 속성 덤프 가능.
- Unifying 리시버가 있는 모든 마우스 지원.
- 디버깅을 위한 일괄 교환: 실시간 요청/응답.
영구 저장소라는 목표는 달성하지 못했지만, 프로토콜과 OS 동작에 대한 지식을 얻었습니다.
핵심 요약
- HID++ 2.0은 장치 모델에 연결된 동적 속성 인덱스를 사용합니다.
- DPI 레지스터는 검증 없이 접근 가능한 유일한 2바이트 세션 저장소입니다.
- macOS는 IOHIDManager를 통해 긴 HID 리포트를 차단하며, IOKit을 통한 우회가 필요합니다.
- MX Vertical의 33개 속성 중 절반은 문서화되지 않았습니다.
- 도구의 코드는 로지텍 Unifying 마우스에 보편적으로 적용됩니다.
— Editorial Team
아직 댓글이 없습니다.