Comprei um water cooler sem suporte para Linux. Então fiz engenharia reversa do software.
Quando comprei um Water Cooler Pichau Aqua 120X , a ideia era simples: resfriar e usar o display LCD para mostrar a temperatura da CPU. O problema apareceu quando fui procurar o software. O fabricante disponibilizava uma aplicação para Windows, mas não existia suporte nativo para Linux. O hardware funcionava normalmente como dispositivo USB, mas o display não recebia nenhuma informação. Em outras…
A pessoa comprou um Water Cooler Pichau Aqua 120X com a intenção de usar o display LCD para exibir a temperatura da CPU. No entanto, não havia suporte nativo para Linux, apenas uma aplicação para Windows. O hardware funcionava normalmente como dispositivo USB, mas o display não estava recebendo nenhuma informação. Para resolver esse problema, a pessoa decidiu usar engenharia reversa do software.
O primeiro passo foi identificar como o dispositivo aparecia no Linux. O dispositivo apareceu como /dev/ttyACM0, o que indicava que existia uma interface serial disponível no sistema. Com isso, a pessoa começou a testar os bytes enviados pelo software oficial para o dispositivo. Ela encontrou várias funções relacionadas ao envio de informações como temperatura da CPU, frequência do CPU e da GPU, entre outras.
A partir das referências encontradas, a pessoa descobriu como o software encontra o dispositivo e como configura a comunicação serial no Linux. A configuração usada pelo software oficial era 1.000.000 baud, 8N1. Ela também descobriu o formato dos dados enviados ao dispositivo.
Com essa informação, a pessoa montou o formato dos pacotes enviados ao dispositivo. Os pacotes consistiam em 23 bytes, onde o primeiro byte era fixo (t), seguido por um flag, campos de bytes de diferentes tamanhos e um XOR escondido nos bytes de 16 e 32 bits. Para enviar um pacote, a pessoa precisava montar os bytes, manter os dois primeiros intactos e aplicar XOR 0x02 nos bytes restantes.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.