Post

Logitech G435 Updater

Aviso

Esse post é apenas um relato de algo que me diverti fazendo, e não resolve o problema em si, apenas investiga a sua causa.

Introdução

Há alguns anos atrás comprei o headset G435 da Logitech na Aliexpress, e desde então não tinha dado nenhum problema, até que recentemente ele começou a simplesmente desligar do nada.

Inicialmente tentei trocar o cabo que eu usava para carregar, mas sem sucesso também.

Ao fazer algumas pesquisas, vi uma pessoa sugerindo atualizar o firmware do headset, e decidi testar.

Tentativa de Atualização

Baixei o G435Update (v3.1.1.14) e tentei fazer a atualização.

Ao abrir o software, o botão de continuar permanece desabilitado, não deixando eu prosseguir com a atualização.

1

Mesmo reiniciando o computador, desconectando o dongle, reiniciando o headset, nada funcionou.

Sendo assim, fui análisar o executável para tentar entender o motivo disso.

Análise Estática

Joguei o EXE no DIE e ele detectou que a aplicação foi feita em C# com .NET, o que facilita bastante a engenharia reversa, principalmente se o código não estiver ofuscado.

2

Sabendo disso, utilizei o dnSpyEx para analisar o código.

3

Explorando as classes do projeto eu acabei me deparando com alguns métodos e propriedades que tem “ContinueButton” no nome.

4

Dentro do método continueButton_Click é possível ver que a primeira linha desativa o botão de continuar.

5

Analisando os métodos que atribuem um valor à propriedade Enabled do Windows Forms, é possível ver que existe um método chamado de SetState que desabilita justamente o botão de continuar.

Esse método é chamado na inicialização da aplicação, no método MainDlg.

E dentro desse método, é possível notar que no caso da variável state ser Init, aparentemente é feita uma verificação de estado do dispositivo através do método GetDeviceState.

6

O método GetDeviceState lista os dispositivos HID, verifica se o headset está conectado e qual o modelo da placa do dispositivo.

7

Para que o botão de continuar seja desabilitado, esse método deve retornar NoDevicesFound. E Vemos que para isso acontecer, o método detectDevices precisa retornar um objeto Devices com as propriedades realtek, holtek e midgar zeradas.

Analisando o método detectDevices, vemos que é feita uma busca pelos dispositivos HID conectados no computador, e depois é feita uma comparação de VID e PID.

8

No trecho de código acima, o VID e PID dos dispositivos são comparados com valores hardcodeds.

9

O VID é único, sendo ele 1133 -> 0x46D.

O PID depende do modelo da placa, conforme a tabela abaixo:

Modelo PID PID (hex)
Realtek 2763 0xACB
Midgar 2763 0xACB
Holtek 2783 0xADF

Ao verificar o meu G435 no Gerenciador de Dispositivos, vi que o VID e PID são diferentes do esperado pelo software.

10

Pedi para uma amiga fazer o mesmo com o G435 dela (comprado no Brasil), e os valores batem com o que o software espera.

13

G435 da China

1
2
VID -> 0x4C4A
PID -> 0x4155

G435 comprado no Brasil

1
2
VID -> 0x46D
PID -> 0xADF

O 0x46D é o VID oficial da Logitech. Já o 0x4C4A é um VID que não se tem muita informação na internet.

Ao buscar, encontrei menções a “Jieli Technology” e “Lite-On Technology Corp.”.

11

12

Outra coisa curiosa é que esse VID e PID estão mapeados no kernel do Linux como exceção para o “HID core”.

Podendo ser verificado nesse link.

Acontece que ele está denominado como SMARTLINKTECHNOLOGY.

14

Conclusão

A primeira coisa que pensei sobre isso é que essas versões do Logitech G435 chineses sejam falsificadas.

Porém também existe a possibilidade dos lotes chineses usarem placas de outro fabricante, visto que não há nenhum indício de falsificação olhando o produto e a sua caixa. Inclusive, consegui consultar o número de serial no site da Logitech.

Só não é possível afirmar se é um número de serial replicado para todos os itens falsificados (acredito que não).

Pelo que parece esse VID é bem genérico. Esse mesmo PID está sendo apontado como outro tipo de dispositivo HID no commit do Linux.

Pensei em modificar o updater para forçar uma atualização, mas existe a possibilidade de brickar o meu dongle ou o meu headset. Talvez no futuro quando eu trocar de headset eu faça o teste e atualizo o post.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.