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.
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.
Sabendo disso, utilizei o dnSpyEx para analisar o código.
Explorando as classes do projeto eu acabei me deparando com alguns métodos e propriedades que tem “ContinueButton” no nome.
Dentro do método continueButton_Click é possível ver que a primeira linha desativa o botão de continuar.
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.
O método GetDeviceState lista os dispositivos HID, verifica se o headset está conectado e qual o modelo da placa do dispositivo.
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.
No trecho de código acima, o VID e PID dos dispositivos são comparados com valores hardcodeds.
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.
Pedi para uma amiga fazer o mesmo com o G435 dela (comprado no Brasil), e os valores batem com o que o software espera.
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.”.
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.
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.













