2 pontos por GN⁺ 2025-07-28 | 1 comentários | Compartilhar no WhatsApp
  • 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:
    1. Fazer polling da máquina de lavar
    2. Se não houver mudança de estado, dormir e repetir
    3. Ao detectar mudança, atualizar a última mensagem ou enviar uma nova
    4. 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

 
GN⁺ 2025-07-28
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

    • Não era específico para um aparelho, mas eu também tive problemas com um app, então desativei as atualizações automáticas e voltei para uma versão antiga
      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

    • Aqui em casa, a máquina de lavar e a secadora estão ligadas em smart plugs, e o consumo de energia vai via MQTT para o Node-RED
      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 criptografia
    Deu 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 isso

    • Isso pode parecer desnecessário, mas talvez seja tráfego relacionado a ARP
      Já 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