Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
logitech-ipc-protocol — Обратно спроектированный протокол IPC агента Logi Options+. Переключайте многохостные устройства Logitech программно через Unix-сокет (macOS) или именованный канал (Windows). | Kitploit
Инструменты/GitHubGitHub/saimanish1/logitech-ipc-protocol
Безопасность встроенных системБезопасность BluetoothОбратная инженерияБезопасность беспроводных сетейАппаратный ХакингБезопасность оборудования и IoTСтатьи и ИсследованияОбучение и Образование

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
saimanish1/logitech-ipc-protocol

logitech-ipc-protocol

Обратно спроектированный протокол IPC агента Logi Options+. Переключайте многохостные устройства Logitech программно через Unix-сокет (macOS) или именованный канал (Windows).

Репозиторий
1724 месяцев назадЕщё не проверено

logitech-ipc-protocol

Документация, полученная в результате реверс-инжиниринга IPC-протокола агента Logi Options+. Обеспечивает программное управление мульти-хостовыми устройствами Logitech (переключение между хостами, запросы информации об устройстве) без прямого доступа к HID, как на macOS, так и на Windows.

Данный протокол ранее не был публично задокументирован.

Проблема

macOS блокирует прямой HID-доступ к Bluetooth-устройствам ввода на уровне ядра. Никакие разрешения, антлиты или хаки это не обходят. Агент Logi Options+ имеет подписанные Apple антлиты (com.apple.security.device.bluetooth), предоставляющие ему Bluetooth HID-доступ. Этот проект взаимодействует с агентом через его IPC-канал.

Файлы

ФайлОписание
logi-options-ipc-reverse-engineering.mdПолная хроника реверс-инжиниринга
software-kvm-setup.mdРуководство по настройке двустороннего программного KVM (Windows + Mac)
switch_to_windows.pyСкрипт для Mac, который переключает устройства Logitech и вход монитора через Unix-сокет IPC
api-reference.mdСправочник API агента: работающие эндпоинты, типы protobuf, возможности устройств
kvm.ahkAutoHotkey v2 скрипт: горячие клавиши Win+1/2/3, вызывающие kvm_daemon_windows.py --switch (работает в системном трее)
kvm_daemon_windows.pyПереключение устройств Windows через именованный канал, переключение мониторов через DDC/CI
kvm_config.iniКонфигурация Windows (горячие клавиши, входы монитора)
query_feature_index.pyОпределяет индекс функции HID++ ChangeHost для устройств Logitech (Windows)
query_agent_windows.pyЗапросы к агенту на Windows через именованный канал
config.iniУстаревшая конфигурация UnifiedSwitch (заменена kvm_daemon_windows.py)

Использование

Mac

root@kitploit:~
python3 switch_to_windows.py 0        # Переключение на хост 0 (DisplayPort)
python3 switch_to_windows.py 1        # Переключение на хост 1 (HDMI)
python3 switch_to_windows.py --dry-run 0  # Показать, что произойдёт

Требуется запущенный Logi Options+ и установленный m1ddc (brew install m1ddc).

Windows

root@kitploit:~
# Start the AHK hotkey listener (runs in system tray, no console)
# Requires AutoHotkey v2: winget install AutoHotkey.AutoHotkey
start kvm.ahk

# Or switch directly from the command line
python kvm_daemon_windows.py --switch 1

# Show discovered devices and configured hotkeys without switching
python kvm_daemon_windows.py --dry-run

Требуется запущенный Logi Options+. Установите зависимости: pip install pywin32.

Скрипт AHK слушает Win+1/2/3 и вызывает kvm_daemon_windows.py --switch N для каждой. Python-скрипт автоматически обнаруживает устройства через агента (без жёстко заданных идентификаторов устройств или HID-путей). Отредактируйте kvm_config.ini для настройки горячих клавиш и значений DDC/CI для входа монитора.

Протокол

Агент слушает на:

  • macOS: Unix-сокет по пути /tmp/logitech_kiros_agent-<hash>
  • Windows: Именованный канал \\.\pipe\logitech_kiros_agent-<hash>

Одинаковый проводной протокол на обеих платформах. Формат двоичного фрейма:

root@kitploit:~
LE32(total_len) + BE32(proto_name_len) + "json" + BE32(msg_len) + JSON_message

Переключение устройства на другой хост:

root@kitploit:~
{
  "msg_id": "1",
  "verb": "SET",
  "path": "/change_host/<device_id>/host",
  "payload": {
    "@type": "type.googleapis.com/logi.protocol.devices.ChangeHost",
    "host": 0
  }
}

Полезная нагрузка — это поле google.protobuf.Any, сериализованное как встроенный JSON с аннотацией @type. Агент использует строгий синтаксический анализатор JSON для protobuf; неизвестные поля вызывают INVALID_MESSAGE_RECEIVED.

В запросах используется msg_id (snake_case). В ответах — msgId (camelCase). Глаголы — строки: "GET", "SET", "SUBSCRIBE", "BROADCAST".

См. logi-options-ipc-reverse-engineering.md для полной документации протокола.

Обработка ошибок IPC

Для длительной автоматизации повторно подключайтесь при BrokenPipeError и заново обнаруживайте путь к сокету/каналу.

Особенности Windows HID++

Это применимо при отправке команд HID++ напрямую, а не через агента. kvm_daemon_windows.py избегает всех этих проблем, работая через именованный канал агента.

Устаревшие особенности HID++ (для прямого HID-доступа)

Коллекция HID++ различается для каждого устройства. MX Master 3S использует HID++ на COL02. MX Keys S — на COL05. Оба используют страницу использования FF43:0202. Проверьте с помощью:

root@kitploit:~
Get-PnpDeviceProperty -InstanceId "<instance_id>" -KeyName DEVPKEY_Device_HardwareIds
# Ищите UP:FF43_U:0202

Индексы функций различаются для каждого устройства. ChangeHost (0x1814) находится по индексу 0x0A на MX Keys S, но 0x09 на MX Mechanical. Запрашивайте во время выполнения через IRoot::GetFeature:

root@kitploit:~
Send: {0x11, 0x00, 0x00, 0x0D, 0x18, 0x14, ...}  (20 байт)
Read: ответ, байт 4 = индекс функции

Переспаривание устройства изменяет HID-пути. Переключение с приёмника Bolt на прямое BT LE полностью меняет путь. Запустите query_agent_windows.py, чтобы получить текущие пути от агента.

GATT-коллекция поставщика BT LE показывает "Неизвестно". Windows иногда не может инициализировать службу HID++ GATT. Устройство работает нормально, но канал команд поставщика мёртв. Решение: выключите и включите Bluetooth в настройках Windows. Это проблема Windows/прошивки.

Протестированные версии

ВерсияСтатус
Logi Options+ 2.0.840907Работает (macOS Tahoe, Windows 11)

Проводной протокол и основные пути API (/devices/list, /change_host/<id>/host) остаются стабильными. Переспаривание устройств нарушало HID-пути и номера коллекций, но сам IPC-протокол не затрагивался.

Отказ от ответственности

Этот проект предназначен только для образовательных и исследовательских целей. Он документирует незадокументированный, неподдерживаемый протокол, который Logitech может изменить или удалить в любое время. Авторы не несут ответственности за любой ущерб, потерю данных, повреждение устройств или нарушение функциональности в результате использования этого кода или документации. Используйте на свой страх и риск.

Этот проект не связан с Logitech и не одобрен ею.

Лицензия

MIT

Скачать инструмент
СценарийЧто происходитОбнаружение
Агент не запущенСокет/канал не существуетconnect() вызывает FileNotFoundError или ConnectionRefusedError
Перезапуск агента во время сессииСоединение разрываетсяsend() вызывает BrokenPipeError; recv() возвращает пустое значение
Устройство на другом хостеNO_SUCH_PATHПроверьте result.code
Устройство недоступноTIMEOUT через ~3 секПроверьте result.code
Некорректная полезная нагрузкаINVALID_MESSAGE_RECEIVEDОтсутствует @type или неизвестные поля
Изменение хэша сокетаСтарый путь исчезВсегда динамически обнаруживайте, никогда не задавайте жёстко
Устаревший сокет после перезапускаConnectionRefusedErrorПовторите попытку после короткой задержки
Одновременные клиентыРаботает нормальноАгент обрабатывает несколько соединений