- Dois estudantes de cibersegurança decidiram tentar hackear uma máquina de lavar por diversão e desafio
- Fizeram engenharia reversa do aplicativo móvel da máquina para estudar a API e o método de criptografia
- Encontraram a chave de criptografia XOR e implementaram uma forma de ler e decodificar em tempo real os dados de estado da máquina
- Criaram um bot de notificações usando webhooks do Discord para automatizar o status de funcionamento da máquina e os alertas de conclusão
- No futuro, pretendem aplicar uma automação de casa inteligente semelhante a outros eletrodomésticos "bobos"
Introdução
- O autor realizou um projeto de hackear uma máquina de lavar junto com um amigo na casa para onde havia acabado de se mudar
- O objetivo era menos utilidade prática e mais diversão e desafio técnico
- O ponto de partida foi a curiosidade de conectar a máquina de lavar e outros eletrodomésticos a um sistema de casa inteligente
- A experiência obtida ao hackear diretamente também ajudou como prática real de engenharia reversa
Contexto
- A casa já vinha equipada com uma máquina de lavar inteligente com suporte a Wi-Fi
- Essa máquina permite receber notificações de progresso pelo aplicativo móvel
- Apenas uma pessoa por vez pode vinculá-la ao app, o que torna o compartilhamento inconveniente
- Vendo isso como uma oportunidade, decidiram fazer com que várias pessoas pudessem receber notificações de status sem as limitações do app
O caso da campainha
- A campainha da casa usa um sistema que envia alertas por sinal sem fio de 433MHz
- Um amigo criou um sistema que detecta o sinal da campainha e envia notificações para um servidor no Discord
- Ele é usado junto com o som real da campainha e também como alerta de backup
- Após esse caso de sucesso, decidiram tentar integrar a máquina de lavar da mesma forma com notificações automatizadas
Plano e preparação
- O autor decidiu fazer engenharia reversa do aplicativo móvel para entender o funcionamento da API
- Usou um roteador OpenWRT para capturar diretamente o tráfego de rede da máquina de lavar inteligente
- Conectou a máquina a um Wi-Fi temporário para tentar identificar os padrões de comunicação por captura de pacotes
Análise do tráfego da máquina de lavar
- A máquina envia e recebe tráfego por vários caminhos, incluindo seu próprio IP, 255.255.255.255 (broadcast), servidores externos (API HTTP, tráfego criptografado) e comunicação HTTP direta com o aplicativo (porta 80)
- Deram atenção especial à parte de comunicação direta com o app móvel e concentraram a análise nesse ponto
Engenharia reversa da API da máquina de lavar
- O app usa repetidamente dois endpoints: /http-read.json?encrypted=1 (leitura de estado) e /http-write.json?encrypted=1 (envio de comandos)
- O alvo de interesse era o endpoint de leitura, mas os dados de resposta estão criptografados (HEX, tipo HTML)
- Mesmo passando o parâmetro de query
encrypted=0, o resultado era apenas falha na descriptografia ou erro 400
Análise da criptografia e obtenção da chave
- Partindo da suposição de que fosse uma criptografia simples baseada em XOR, tentaram um ataque de força bruta com ferramentas online como o CyberChef
- Em um projeto de referência (CandySimplyFi-tool), encontraram código que já havia extraído a chave, e com isso conseguiram recuperar a chave e decodificar os dados em poucos segundos
- Para entender melhor o esquema de dados, também consultaram o código aberto ofalvai/home-assistant-candy
Experimentos com os valores de estado da máquina
- Confirmaram as mudanças nos dados ao realizar várias operações físicas na máquina (troca de programa, ajuste de temperatura e velocidade, iniciar/parar/finalizar)
- Principais campos dos valores de estado:
- Pr: estado do seletor de programa
- PrPh: ciclo de lavagem em andamento
- Temp: temperatura configurada
- SpinSp: velocidade de rotação configurada
- RemTime: tempo restante (em minutos, embora às vezes fique travado em 10 minutos)
- Desvantagem: alguns valores (por exemplo,
SpinSp) podem não corresponder ao valor real
Desenvolvimento do script de automação de notificações
- Concluíram a implementação do esquema da API da máquina, da chave de criptografia, da leitura e decodificação dos dados e da identificação de estado
- Criaram um script de bot de notificações com webhooks do Discord
- Fluxo principal:
- Fazer polling da máquina de lavar
- Se não houver mudança de estado, dormir e repetir
- Ao detectar mudança, atualizar a última mensagem ou enviar uma nova
- Repetir
Encerramento e próximos planos
- Já tiveram sucesso com a automação de notificações da campainha e da máquina de lavar
- No futuro, pretendem aplicar automações semelhantes a lava-louças, secadora, TV e outros dispositivos, usando tomadas inteligentes, sensores de vibração e IR blaster
- Também planejam experimentar um sistema de segurança simples com webcam
Conclusão
- Com este projeto, aprenderam na prática os fundamentos de engenharia reversa de IoT e de um hack simples de casa inteligente
- Foi um caso em que puderam vivenciar tanto a utilidade quanto a diversão
1 comentários
Comentários do Hacker News
Antes de tudo, deixo claro que isso não é uma crítica ao post original; achei que ele apresentou de forma muito legal um processo realmente fascinante de análise do dispositivo
Se o aparelho se comunica com um app Android, recomendo o apk-mitm
Essa ferramenta remove do apk praticamente todos os tipos conhecidos de certificate pinning e também reescreve o manifesto para permitir o uso de certificados locais sem root
Depois de desinstalar o app original e instalar por sideload o resultado do apk-mitm, dá para usar mitmproxy em um aparelho padrão, sem modificações
Outro ponto importante é que, se o app envia dados criptografados e depois ele mesmo os descriptografa para exibir, então a chave está em algum lugar no app ou é obtida de algum lugar
Se você analisar o apk com jadx, dá para ver quase como se fosse código Java, e às vezes até encontrar a chave
Mas alguns fabricantes movem o processamento criptográfico para código nativo, e aí é preciso fazer engenharia reversa com algo como o Ghidra
Esse processo pode ser extremamente tedioso, mas também muito divertido
Mesmo que o autor tenha se baseado em pesquisas anteriores de outras pessoas, acho que vale muito a pena não desistir e tentar, mesmo quando parece um trabalho que ninguém nunca fez antes
No fim das contas, dá para aprender muito ao descobrir como funciona um dispositivo que é seu
Em algum momento, o acesso ao servidor acabou sendo bloqueado, e por acaso descobri certificate pinning; usei esse repositório e resolveu tudo de forma impecável
Acho que a URL antiga de anúncios também deixou de funcionar, então os anúncios sumiram
Também não fiquei com pena nenhuma, porque a empresa parecia focada apenas em piorar o app cada vez mais
Eu uso uma máquina de lavar Bosch para acompanhar o progresso da lavagem do outro lado da casa, ao contrário do caso do post original
Graças à API da Bosch, consigo saber se o ciclo terminou e se a porta foi aberta
No momento uso a versão padrão da API, mas a PoC já está pronta e pretendo migrar para uma opção hospedada localmente
No Home Assistant, se o ciclo terminou mas a porta não foi aberta, isso significa que ainda há roupa molhada lá dentro
Então configurei para enviar um lembrete de roupa lavada a cada 15 minutos para o meu celular e, se minha esposa estiver em casa, para o dela também
É algo muito simples e funciona perfeitamente
A minha máquina é um modelo antigo dos anos 90, então tudo depende do seletor de tempo
Não tem computador nem sensores, só uma detecção extra da etapa de enchimento de água
É só colocar sempre no timer de 40 minutos e pronto; com direito até a desligar o alarme, então não tem como ser mais simples
Também estou pensando em fazer algo parecido com um forninho
Não tem API nem conectividade, mas a ideia é ligar em uma smart plug, medir o consumo de energia e usar isso para monitorar e avisar quando está em espera ou funcionando
Às vezes eu ligo a máquina antes de dormir e acabo deixando para o dia seguinte, mas a minha tem um recurso tipo “rotação estendida” que mantém as roupas frescas durante a noite
Gasta um pouco mais de água, mas salva minha rotina da noite e ainda ajuda a aproveitar a eletricidade no período noturno
Gosto muito da minha Electrolux, e imagino que outras marcas também tenham algo parecido
Uso um relógio G-Shock 5600 há mais de 15 anos como lembrete do timer da máquina de lavar
Quando começo a lavagem, ajusto no relógio o tempo total do ciclo e pronto; quando termina, ele apita
Funciona independentemente de API e serve para qualquer marca
É uma solução realmente elegante
Lógica simples, mas com um efeito bem real na vida cotidiana
Estou hackeando o hardware de uma geladeira
Não é software; é uma geladeira cara de motorhome, com suporte a gás/12v/220v
Houve um incêndio na unidade de controle eletrônico, e os cabos e o interior ficaram danificados, mas a geladeira em si está boa
Como eu teria que trocar todas as peças mesmo, em vez de gastar US$ 250 em uma placa de controle nova, quero montar um sistema novo combinando peças antigas de aquecedor a gás
A placa-mãe do aquecedor já tem o sistema de ignição embutido, então, se eu montar bem a lógica e as proteções, talvez dê para usar no modo a gás
Assim não preciso comprar uma geladeira nova e ainda vira um ótimo projeto para ensinar eletrônica ao meu filho de 9 anos
Claro que gás pode ser perigoso, mas no fim sempre é divertido, e quando o hack dá certo as críticas desaparecem
Se alguém tiver curiosidade sobre o andamento, eu até poderia escrever um post completo
Eu coloquei sensores de vibração Zigbee na máquina de lavar e na secadora e uso isso junto com o Home Assistant
Nunca tinha pensado em monitorar corrente/tensão com tomada inteligente, mas achei uma ótima ideia
Com condições simples de trigger, já automatizei atualização do dashboard e até alertas por e-mail quando a lavagem começa e termina
O app e o Bluetooth existem, mas não pretendo usar porque o app pede acesso à câmera, ao áudio e aos contatos do meu celular
Parece que também houve trabalho de integração com o HA no link abaixo
https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
É esse tipo de post que, para mim, representa a essência do Hacker News
Eu queria ver mais posts assim, de hacking de verdade no sentido de modificação por hobby; hoje em dia parece que só tem conversa sobre AI/LLM
Se você gosta desse tipo de hack de hardware, também recomendo muito o https://hackaday.com/
Instalar certificado próprio em Android sem root costuma ser meio trabalhoso
Só dá para adicionar ao repositório de certificados do sistema, e normalmente é preciso um módulo do Magisk
Um jeito mais fácil é rodar um emulador antigo de Android no PC, instalar o certificado nele e encaminhar o tráfego para o Burpsuite ou o mitmproxy
Nem precisa trocar de aparelho
Se analisar o código do app com APKLab ou Jadx, talvez dê para encontrar pelo menos o algoritmo de derivação de chave
Fiquei curioso se o app e a máquina só funcionam quando estão na mesma rede, mas gostei dessa parte
Fiquei surpreso com a menção a um ciclo de lavagem “de 3 horas” que na prática leva 4~5 horas
A minha máquina, no modo eco normal, leva menos de 30 minutos, e quando termina faz um alerta bem alto
Essa combinação de ciclo curto com aviso sonoro faz com que eu não precise de nenhuma solução técnica mais complexa
Provavelmente quem comentou é dos EUA
Máquinas europeias demoram mais por causa das exigências de menor consumo de água e energia
O aparelho do post parece ser lava e seca, o que o faz demorar ainda mais
Aqui em casa, o modo normal já leva 104 minutos, e se estiver muito carregada pode chegar a 3 horas
Ciclos longos são mais eficazes para eliminar microrganismos quando se usam detergentes enzimáticos e componentes de alvejante à base de oxigênio ativo
Um ciclo de 30 minutos é praticamente só um “enxágue” para a roupa
https://pubmed.ncbi.nlm.nih.gov/25207988/
A minha secadora é um modelo sem duto, o que por si só já é motivo de reclamação, então leva 3 horas
Da lavagem até a secagem completa, vão embora 4,5 horas
É o eletrodoméstico de que mais me arrependo de ter comprado
Às vezes nem seca direito
Alguém apontou que não parecia haver criptografia
Analisou os dados na janela de entrada do primeiro screenshot (
cyberchef.avif) como simples hex ASCII sem criptografiaDeu exemplos como 7D = {, 0D0A = CRLF, 09 = TAB e 22 = "
Ou seja, parecia texto puro já decodificado, então a explicação sobre criptografia XOR não parecia bater
Também observou que o valor de chave mostrado no screenshot não estava alinhado aos limites de byte nem correspondia ao espaçamento real da entrada
Por isso, levantou a dúvida se a imagem teria sido manipulada ou editada
Disse que queria entender o motivo e o que de fato estava acontecendo
Avisaram que a imagem com a legenda “For now, I plugged this key into CyberChef, and was able to decrypt the data.” estava com o link quebrado
Também mencionaram em detalhe o elemento HTML específico e o link relacionado
Sobre a parte em que “a máquina de lavar se comunicava demais consigo mesma”, alguém comentou que isso parecia acontecer porque o projetista da stack de rede não conhecia o conceito de interface loopback
Ela enviava muitos pacotes para o próprio IP e também pacotes por segundo para
255.255.255.255, mas a pessoa disse que não se importou muito com issoJá vi esse comportamento várias vezes em dispositivos IoT, às vezes usado para detectar conflito ou mudança de IP
Também tive a mesma impressão