Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
logitech-ipc-protocol — Protocolo IPC do agente Logi Options+ com engenharia reversa. Alterne dispositivos Logitech multi-host programaticamente via socket Unix (macOS) ou pipe nomeado (Windows). | Kitploit
Ferramentas/GitHubGitHub/saimanish1/logitech-ipc-protocol
Segurança de Sistemas EmbarcadosSegurança BluetoothEngenharia ReversaSegurança Sem FioHacking de HardwareSegurança de Hardware e IoTPapers e PesquisaAprendizado e Educação

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHub
saimanish1/logitech-ipc-protocol

logitech-ipc-protocol

Protocolo IPC do agente Logi Options+ com engenharia reversa. Alterne dispositivos Logitech multi-host programaticamente via socket Unix (macOS) ou pipe nomeado (Windows).

Ver Repositório
172há 4 mesesAinda não revisado

logitech-ipc-protocol

Documentação de engenharia reversa do protocolo IPC do agente Logi Options+. Permite o controle programático de dispositivos multi-host Logitech (alternância de host, consultas de dispositivos) sem acesso HID bruto, tanto no macOS quanto no Windows.

Este protocolo não foi documentado publicamente antes deste projeto.

Problema

O macOS bloqueia o acesso HID bruto a dispositivos de entrada Bluetooth no nível do kernel. Nenhuma permissão, autorização ou hack contorna isso. O agente Logi Options+ possui autorizações assinadas pela Apple (com.apple.security.device.bluetooth) que concedem acesso HID Bluetooth. Este projeto se comunica com o agente através de seu canal IPC.

Arquivos

ArquivoDescrição
logi-options-ipc-reverse-engineering.mdCrônica completa da engenharia reversa
software-kvm-setup.mdGuia de configuração de KVM bidirecional via software (Windows + Mac)
switch_to_windows.pyScript no lado Mac que alterna dispositivos Logitech e entrada de monitor via IPC de socket Unix
api-reference.mdReferência da API do agente: endpoints funcionais, tipos protobuf, capacidades dos dispositivos
kvm.ahkScript AutoHotkey v2: teclas de atalho Win+1/2/3 que chamam kvm_daemon_windows.py --switch (executa na bandeja do sistema)
kvm_daemon_windows.pyAlternância de dispositivos no Windows via pipe nomeado, alternância de monitor via DDC/CI
kvm_config.iniConfiguração do Windows (teclas de atalho, entradas de monitor)
query_feature_index.pyDescobre o índice da funcionalidade HID++ ChangeHost para dispositivos Logitech (Windows)
query_agent_windows.pyConsulta o agente no Windows via pipe nomeado
config.iniConfiguração legada do UnifiedSwitch (substituída por kvm_daemon_windows.py)

Uso

Mac

root@kitploit:~
python3 switch_to_windows.py 0        # Alternar para o host 0 (DisplayPort)
python3 switch_to_windows.py 1        # Alternar para o host 1 (HDMI)
python3 switch_to_windows.py --dry-run 0  # Mostrar o que aconteceria

Requer o Logi Options+ em execução e o m1ddc instalado (brew install m1ddc).

Windows

root@kitploit:~
# Iniciar o ouvinte de teclas de atalho AHK (executa na bandeja do sistema, sem console)
# Requer AutoHotkey v2: winget install AutoHotkey.AutoHotkey
start kvm.ahk

# Ou alternar diretamente pela linha de comando
python kvm_daemon_windows.py --switch 1

# Mostrar dispositivos descobertos e teclas de atalho configuradas sem alternar
python kvm_daemon_windows.py --dry-run

Requer o Logi Options+ em execução. Instale as dependências: pip install pywin32.

O script AHK escuta Win+1/2/3 e chama kvm_daemon_windows.py --switch N para cada uma. O script Python descobre os dispositivos automaticamente a partir do agente (sem IDs de dispositivos ou caminhos HID fixos). Edite kvm_config.ini para configurar teclas de atalho e valores de entrada DDC/CI do monitor.

Protocolo

O agente escuta em:

  • macOS: Socket de domínio Unix em /tmp/logitech_kiros_agent-<hash>
  • Windows: Pipe nomeado em \\.\pipe\logitech_kiros_agent-<hash>

Mesmo protocolo de transmissão em ambas as plataformas. Formato do frame binário:

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

Alternar um dispositivo para um host diferente:

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

O payload é um campo google.protobuf.Any serializado como JSON inline com uma anotação @type. O agente usa um parser JSON estrito de protobuf; campos desconhecidos causam INVALID_MESSAGE_RECEIVED.

As requisições usam msg_id (snake_case). As respostas usam msgId (camelCase). Verbos são strings: "GET", "SET", "SUBSCRIBE", "BROADCAST".

Consulte logi-options-ipc-reverse-engineering.md para a documentação completa do protocolo.

Tratamento de erros IPC

Para automação de longa duração, reconectar em caso de BrokenPipeError e redescobrir o caminho do socket/pipe.

Peculiaridades do HID++ no Windows

Estas se aplicam ao enviar comandos HID++ diretamente, não através do agente. kvm_daemon_windows.py evita todas elas usando o pipe nomeado do agente.

Peculiaridades legadas do HID++ (para acesso HID direto)

A coleção HID++ varia por dispositivo. O MX Master 3S expõe HID++ na COL02. O MX Keys S usa COL05. Ambos usam a página de uso FF43:0202. Verifique com:

root@kitploit:~
Get-PnpDeviceProperty -InstanceId "<instance_id>" -KeyName DEVPKEY_Device_HardwareIds
# Procure por UP:FF43_U:0202

Índices de funcionalidade diferem por dispositivo. ChangeHost (0x1814) está no índice 0x0A no MX Keys S, mas 0x09 no MX Mechanical. Consulte em tempo de execução via IRoot::GetFeature:

root@kitploit:~
Enviar: {0x11, 0x00, 0x00, 0x0D, 0x18, 0x14, ...}  (20 bytes)
Ler: byte 4 da resposta = índice da funcionalidade

O reemparelhamento do dispositivo altera os caminhos HID. Alternar do receptor Bolt para BT LE direto altera o caminho completamente. Execute query_agent_windows.py para obter os caminhos atuais do agente.

A coleção de fornecedor GATT BT LE fica "Desconhecido". O Windows ocasionalmente falha ao inicializar o serviço GATT HID++. O dispositivo funciona normalmente, mas o canal de comando do fornecedor está morto. Correção: alternar Bluetooth desligado/ligado nas Configurações do Windows. Isso é um problema do Windows/firmware.

Versões testadas

VersãoStatus
Logi Options+ 2.0.840907Funcionando (macOS Tahoe, Windows 11)

O protocolo de transmissão e os caminhos principais da API (/devices/list, /change_host/<id>/host) permaneceram estáveis. O reemparelhamento do dispositivo quebrou caminhos HID e números de coleção, mas o protocolo IPC em si não foi afetado.

Aviso

Este projeto é apenas para fins educacionais e de pesquisa. Ele documenta um protocolo não documentado e não suportado que a Logitech pode alterar ou remover a qualquer momento. Os autores não são responsáveis por qualquer dano, perda de dados, dispositivos danificados ou funcionalidades quebradas resultantes do uso deste código ou documentação. Use por sua conta e risco.

Este projeto não é afiliado ou endossado pela Logitech.

Licença

MIT

Baixar ferramenta
CenárioO que aconteceDetecção
Agente não em execuçãoSocket/pipe não existeconnect() levanta FileNotFoundError ou ConnectionRefusedError
Agente reinicia no meio da sessãoConexão é quebradasend() levanta BrokenPipeError; recv() retorna vazio
Dispositivo em outro hostNO_SUCH_PATHVerificar result.code
Dispositivo inacessívelTIMEOUT após ~3sVerificar result.code
Payload malformadoINVALID_MESSAGE_RECEIVEDFaltando @type ou campos desconhecidos
Hash do socket mudaCaminho antigo desapareceSempre descobrir dinamicamente, nunca fixar
Socket obsoleto após reinicializaçãoConnectionRefusedErrorTentar novamente após um breve atraso
Clientes concorrentesFunciona normalmenteAgente lida com múltiplas conexões