Ukládání dat v registrech myši Logitech pomocí HID++
Myš Logitech MX Vertical využívá flash paměť pro uložení nastavení DPI mezi zařízeními. To otevřelo možnost přeměnit ji na datové úložiště o velikosti 2 bajtů. Nástroj v Rustu umožnil vypsat 33 vlastností zařízení pomocí protokolu HID++ 2.0, který je postaven nad USB HID.
Protokol pracuje s tabulkou vlastností: stabilní ID vlastnosti (např. 0x2201) je vázáno na index modelu myši (např. 0x12). Požadavky jsou tvořeny pakety: ID reportu, index zařízení, index vlastnosti, ID funkce a parametry (až 3 bajty). Odpovědi přicházejí v analogickém formátu.
Většina vlastností není dokumentována. Slibnými se ukázaly TemplateBytesNVS (0x1eb0) a PersistentRemappableAction (0x1c00), ale nereagovaly na požadavky nebo byly blokovány IOHIDManager v macOS. Ten zahazuje dlouhé reporty bez chyb, což vyžaduje obejití přes IOKit.
Analýza registrů a hledání úložiště
Registr názvu zařízení přijímá zápisy, ale ignoruje je a vrací "MX Vertical". Registr DPI (u16) se ukázal jako funkční: přijímá jakékoliv hodnoty bez validace. Zápis 0x6869 se uloží při přepínání počítačů v rámci jedné relace.
Při odpojení/zapnutí se hodnota resetuje na výchozí. Zápis ovlivňuje pouze aktivní DPI, nedotýká se výchozí hodnoty.
Testování dalších registrů (0x1e, 0x1f, 0x18xx) neposkytlo trvalé úložiště. Výchozí DPI je pravděpodobně uloženo v uzavřené části firmwaru nebo je dostupné pouze přes proprietární nástroje Logitech.
Klíčové vlastnosti relace úložiště:
- Funguje pouze, dokud je myš zapnutá.
- Mezi počítači: přenos přijímače Unifying zachovává data.
- Kapacita: striktně 2 bajty (
u16). - Žádná validace: jakákoliv hodnota od 0 do 65535.
Lekce z reverzního inženýrství HID++
Výzkum odhalil rozdíly mezi tabulkou vlastností a indexem vlastnosti. Zpětné vyhledávání IFeatureSet v Logitech je nefunkční. Dokumentace pokrývá polovinu vlastností, zbytek je zkoumán experimentálně.
macOS IOHIDManager tiše blokuje nestandardní reporty. Pro zápis do PersistentRemappableAction jsou potřeba notifikace nebo přístup na nízké úrovni.
Výhody přístupu v Rustu:
- Kompletní výpis vlastností bez závislosti na Logitech SDK.
- Podpora všech myší s přijímačem Unifying.
- Dávková výměna pro ladění: požadavek/odpověď v reálném čase.
Cíl – trvalé úložiště – nebyl dosažen, ale získali jsme znalosti o protokolech a chování operačního systému.
Co je důležité
- HID++ 2.0 používá dynamické indexy vlastností, vázané na model zařízení.
- Registr DPI – jediné dostupné 2-bajtové relace úložiště bez validace.
- macOS blokuje dlouhé HID reporty přes IOHIDManager; obejití přes IOKit.
- 33 vlastností v MX Vertical, polovina nedokumentovaná.
- Kód nástroje je univerzální pro Unifying myši Logitech.
— Editorial Team
Zatím žádné komentáře.