返回首页

Logitech 中的 HID++:在 DPI 寄存器中存储 2 字节

本文分析了通过 HID++ 2.0 在 Logitech 鼠标中使用 DPI 寄存器作为 2 字节会话存储。描述了 MX Vertical 的 33 个属性、macOS 阻塞以及 Rust 逆向工具。获得了没有完整文档的协议知识。

鼠标中的 2 字节:Rust 上的 HID++ 逆向
Advertisement 728x90

通过HID++协议探索罗技鼠标寄存器中的数据存储

罗技MX Vertical鼠标使用闪存在不同设备间保存DPI设置。这为将其转变为2字节数据存储设备提供了可能。一款基于Rust的工具通过构建在USB HID之上的HID++ 2.0协议,实现了枚举33个设备属性。

该协议基于属性表工作:一个稳定的属性ID(例如0x2201)与鼠标型号索引(例如0x12)相关联。请求以数据包形式构成:报告ID、设备索引、属性索引、功能ID和参数(最多3字节)。响应采用类似格式。

大多数属性未记录文档。有潜力的属性包括TemplateBytesNVS0x1eb0)和PersistentRemappableAction0x1c00),但它们要么不响应请求,要么被macOS的IOHIDManager阻止。后者会静默丢弃长报告而不报错,需要通过IOKit进行变通处理。

Google AdInline article slot

分析寄存器并寻找存储空间

设备名称寄存器接受写入但忽略内容,始终返回“MX Vertical”。DPI寄存器(u16)被证明是功能性的:它接受任何值而不进行验证。写入0x6869在单次会话中切换计算机时能保持。

当鼠标关闭/开启时,该值会重置为默认值。写入仅影响活动DPI,不改变默认值。

测试其他寄存器(0x1e0x1f0x18xx)未发现持久存储。默认DPI可能存储在固件的封闭部分,或仅能通过罗技专有工具访问。

Google AdInline article slot

会话存储的关键特性:

  • 仅在鼠标通电时有效。
  • 跨计算机:移动Unifying接收器可保留数据。
  • 容量:严格2字节(u16)。
  • 无验证:接受0到65535之间的任意值。

HID++逆向工程的经验教训

调查揭示了特性表与特性索引之间的差异。罗技的IFeatureSet反向查找功能已损坏。文档仅涵盖一半属性;其余需通过实验探索。

macOS的IOHIDManager会静默阻止非标准报告。写入PersistentRemappableAction需要通知或底层访问权限。

Google AdInline article slot

Rust方法的优势:

  • 无需依赖罗技SDK即可完整转储属性。
  • 支持所有配备Unifying接收器的鼠标。
  • 批量交换便于调试:实时请求/响应。

目标——持久存储——虽未实现,但获得了关于协议和操作系统行为的宝贵知识。

核心要点

  • HID++ 2.0使用与设备型号绑定的动态属性索引。
  • DPI寄存器是唯一可访问的2字节会话存储空间,且无验证。
  • macOS通过IOHIDManager阻止长HID报告;需通过IOKit变通解决。
  • MX Vertical拥有33个属性,其中一半未记录文档。
  • 该工具代码适用于所有罗技Unifying鼠标。

— Editorial Team

Advertisement 728x90

继续阅读