Almacenamiento de Datos en Registros del Ratón Logitech mediante HID++
El ratón Logitech MX Vertical utiliza memoria flash para guardar configuraciones de DPI entre dispositivos. Esto abrió la posibilidad de convertirlo en un dispositivo de almacenamiento de datos de 2 bytes. Una herramienta basada en Rust permitió enumerar 33 propiedades del dispositivo mediante el protocolo HID++ 2.0, construido sobre USB HID.
El protocolo funciona con una tabla de propiedades: un ID de propiedad estable (por ejemplo, 0x2201) está vinculado a un índice del modelo de ratón (por ejemplo, 0x12). Las solicitudes se forman como paquetes: ID de informe, índice del dispositivo, índice de propiedad, ID de función y parámetros (hasta 3 bytes). Las respuestas vienen en un formato similar.
La mayoría de las propiedades no están documentadas. Las prometedoras fueron TemplateBytesNVS (0x1eb0) y PersistentRemappableAction (0x1c00), pero o no respondían a las solicitudes o estaban bloqueadas por IOHIDManager en macOS. Este último descarta silenciosamente informes largos sin errores, requiriendo una solución alternativa mediante IOKit.
Análisis de Registros y Búsqueda de Almacenamiento
El registro del nombre del dispositivo acepta escrituras pero las ignora, devolviendo "MX Vertical". El registro de DPI (u16) resultó ser funcional: acepta cualquier valor sin validación. Escribir 0x6869 persiste al cambiar de ordenador dentro de una misma sesión.
Cuando el ratón se apaga/enciende, el valor se restablece al predeterminado. La escritura solo afecta al DPI activo, no al valor predeterminado.
Probar otros registros (0x1e, 0x1f, 0x18xx) no produjo almacenamiento persistente. El DPI predeterminado probablemente se almacena en una parte cerrada del firmware o solo es accesible mediante las herramientas propietarias de Logitech.
Características clave del almacenamiento de sesión:
- Funciona solo mientras el ratón está encendido.
- Entre ordenadores: mover el receptor Unifying preserva los datos.
- Capacidad: estrictamente 2 bytes (
u16). - Sin validación: cualquier valor de 0 a 65535.
Lecciones de la Ingeniería Inversa de HID++
La investigación reveló diferencias entre la tabla de características y el índice de características. La búsqueda inversa de IFeatureSet en Logitech está rota. La documentación cubre la mitad de las propiedades; el resto es mediante experimentación.
macOS IOHIDManager bloquea silenciosamente informes no estándar. Escribir en PersistentRemappableAction requiere notificaciones o acceso de bajo nivel.
Ventajas del enfoque con Rust:
- Volcado completo de propiedades sin dependencias del SDK de Logitech.
- Soporte para todos los ratones con receptor Unifying.
- Intercambio por lotes para depuración: solicitud/respuesta en tiempo real.
El objetivo—almacenamiento persistente—no se logró, pero se obtuvo conocimiento sobre protocolos y comportamiento del sistema operativo.
Conclusiones Clave
- HID++ 2.0 utiliza índices de propiedad dinámicos vinculados al modelo del dispositivo.
- El registro de DPI es el único almacenamiento de sesión de 2 bytes accesible sin validación.
- macOS bloquea informes HID largos mediante IOHIDManager; solución alternativa mediante IOKit.
- 33 propiedades en el MX Vertical, la mitad no documentadas.
- El código de la herramienta es universal para ratones Logitech Unifying.
— Editorial Team
Aún no hay comentarios.