Powrót do strony głównej

HID++ w Logitech: przechowywanie 2 bajtów w rejestrze DPI

Artykuł analizuje wykorzystanie rejestru DPI w myszach Logitech jako 2-bajtowego sesyjnego przechowywania przez HID++ 2.0. Opisano 33 właściwości MX Vertical, blokady macOS i narzędzie Rust do reverse. Uzyskano wiedzę o protokołach bez pełnej dokumentacji.

2 bajty w myszy: HID++ reverse na Rust
Advertisement 728x90

Przechowywanie danych w rejestrach myszy Logitech za pomocą HID++

Mysz Logitech MX Vertical wykorzystuje pamięć flash do zapisywania ustawień DPI między urządzeniami. To otworzyło możliwość przekształcenia jej w nośnik danych o pojemności 2 bajtów. Narzędzie napisane w Rust umożliwiło wyliczenie 33 właściwości urządzenia za pomocą protokołu HID++ 2.0, zbudowanego na bazie USB HID.

Protokół działa z tabelą właściwości: stabilny ID właściwości (np. 0x2201) jest przypisany do indeksu modelu myszy (np. 0x12). Żądania są formułowane pakietami: ID raportu, indeks urządzenia, indeks właściwości, ID funkcji i parametry (do 3 bajtów). Odpowiedzi przychodzą w analogicznym formacie.

Większość właściwości nie jest udokumentowana. Obiecujące okazały się TemplateBytesNVS (0x1eb0) i PersistentRemappableAction (0x1c00), ale nie odpowiadały na żądania lub były blokowane przez IOHIDManager w macOS. Ten ostatni odrzuca długie raporty bez błędów, wymagając obejścia przez IOKit.

Google AdInline article slot

Analiza rejestrów i poszukiwanie pamięci

Rejestr nazwy urządzenia akceptuje zapisy, ale je ignoruje, zwracając "MX Vertical". Rejestr DPI (u16) okazał się funkcjonalny: akceptuje dowolne wartości bez walidacji. Zapis 0x6869 jest zachowywany przy przełączaniu komputerów w ramach jednej sesji.

Przy odłączeniu/włączeniu wartość jest resetowana do domyślnej. Zapis wpływa tylko na aktywne DPI, nie dotykając wartości domyślnej.

Testowanie innych rejestrów (0x1e, 0x1f, 0x18xx) nie dało trwałej pamięci. Domyślne DPI prawdopodobnie jest przechowywane w zamkniętej części oprogramowania układowego lub dostępne tylko przez narzędzia firmowe Logitech.

Google AdInline article slot

Kluczowe cechy przechowywania sesyjnego:

  • Działa tylko gdy mysz jest włączona.
  • Międzykomputerowe: przeniesienie odbiornika Unifying zachowuje dane.
  • Pojemność: ściśle 2 bajty (u16).
  • Brak walidacji: dowolna wartość od 0 do 65535.

Lekcje inżynierii wstecznej HID++

Badanie ujawniło różnice między tabelą właściwości a indeksem właściwości. Wyszukiwanie wsteczne IFeatureSet w Logitech jest uszkodzone. Dokumentacja obejmuje połowę właściwości, reszta — poprzez eksperymenty.

macOS IOHIDManager blokuje niestandardowe raporty w sposób cichy. Do zapisu w PersistentRemappableAction potrzebne są powiadomienia lub dostęp niskopoziomowy.

Google AdInline article slot

Zalety podejścia w Rust:

  • Pełny zrzut właściwości bez zależności od Logitech SDK.
  • Wsparcie dla wszystkich myszy z odbiornikiem Unifying.
  • Wymiana pakietowa do debugowania: żądanie/odpowiedź w czasie rzeczywistym.

Cel — trwała pamięć — nie został osiągnięty, ale zdobyto wiedzę o protokołach i zachowaniu systemu operacyjnego.

Co jest ważne

  • HID++ 2.0 używa dynamicznych indeksów właściwości, przypisanych do modelu urządzenia.
  • Rejestr DPI — jedyna dostępna 2-bajtowa pamięć sesyjna bez walidacji.
  • macOS blokuje długie raporty HID przez IOHIDManager; obejście via IOKit.
  • 33 właściwości w MX Vertical, połowa nieudokumentowana.
  • Kod narzędzia uniwersalny dla myszy Logitech z Unifying.

— Editorial Team

Advertisement 728x90

Czytaj dalej