2 puntos por GN⁺ 2025-07-28 | 1 comentarios | Compartir por WhatsApp
  • Dos estudiantes de ciberseguridad intentaron hackear una lavadora por diversión y por el desafío técnico
  • Analizaron por ingeniería inversa la app móvil de la lavadora para estudiar la API y el método de cifrado
  • Encontraron la clave de cifrado XOR e implementaron una forma de leer y descifrar los datos de estado de la lavadora en tiempo real
  • Usando webhooks de Discord, crearon un bot de notificaciones que automatiza el estado de funcionamiento y los avisos de finalización de la lavadora
  • Más adelante planean aplicar una automatización de hogar inteligente similar a otros electrodomésticos “tontos”

Introducción

  • El autor llevó a cabo un proyecto de hackeo de una lavadora junto con un amigo en la casa a la que se acababa de mudar
  • El objetivo era más la diversión y el desafío técnico que la utilidad pura
  • Todo empezó por la curiosidad de conectar la lavadora y otros electrodomésticos a un sistema de hogar inteligente
  • La experiencia obtenida al hackearlo directamente también ayudó como práctica real de ingeniería inversa

Contexto

  • En la casa ya venía instalada una lavadora inteligente con Wi‑Fi
  • Esta lavadora puede enviar notificaciones de progreso a través de una app móvil
  • Solo una persona a la vez puede vincularla con la app, así que compartirla resulta incómodo
  • Viendo esto como una oportunidad, decidieron hacer que varias personas pudieran recibir notificaciones del estado sin las limitaciones de la app

El caso del timbre

  • El timbre de la casa usa un sistema que envía alertas mediante señales inalámbricas de 433MHz
  • Un amigo creó un sistema que detecta la señal del timbre y envía alertas a un servidor de Discord
  • Se usa junto con el sonido real del timbre y también como alerta de respaldo
  • A partir de ese caso exitoso, decidieron intentar conectar la lavadora de la misma forma con notificaciones automatizadas

Plan y preparación

  • El autor decidió hacer ingeniería inversa de la app móvil para entender cómo funcionaba la API
  • Usó un router con OpenWRT para capturar directamente el tráfico de red de la lavadora inteligente
  • Conectó la lavadora a una red Wi‑Fi temporal para identificar patrones de comunicación mediante captura de paquetes

Análisis del tráfico de la lavadora

  • La lavadora envía y recibe tráfico por varias rutas: su propia IP, 255.255.255.255 (broadcast), servidores externos (API HTTP, tráfico cifrado) y comunicación HTTP directa con la app (puerto 80)
  • Se centraron especialmente en la parte de comunicación directa con la app móvil y analizaron esa sección en detalle

Ingeniería inversa de la API de la lavadora

  • La app usa repetidamente dos endpoints: /http-read.json?encrypted=1 (lectura de estado) y /http-write.json?encrypted=1 (envío de comandos)
  • El objetivo principal era el endpoint de lectura, pero los datos de respuesta están cifrados (HEX, tipo HTML)
  • Incluso al pasar el parámetro de query encrypted=0, solo obtenían fallos de descifrado o errores 400

Análisis del cifrado y obtención de la clave

  • Suponiendo que se trataba de un cifrado simple basado en XOR, intentaron fuerza bruta con herramientas en línea como CyberChef
  • En un proyecto de referencia (CandySimplyFi-tool) encontraron código que ya había logrado extraer la clave, y con eso consiguieron restaurar la clave y descifrar los datos en segundos
  • Para entender mejor el esquema de datos, también consultaron el código open source de ofalvai/home-assistant-candy

Experimentos con los valores de estado de la lavadora

  • Confirmaron cómo cambiaban los datos al realizar distintas acciones físicas en la lavadora (cambiar programa, ajustar temperatura y velocidad, iniciar/detener/finalizar)
  • Campos principales de los valores de estado:
    • Pr: estado de la perilla de selección de programa
    • PrPh: ciclo de lavado en curso
    • Temp: temperatura configurada
    • SpinSp: velocidad de centrifugado configurada
    • RemTime: tiempo restante (minutos; a veces puede quedarse fijo en 10 minutos)
  • Desventaja: algunos valores (por ejemplo, SpinSp) pueden no coincidir con el valor real

Desarrollo del script de automatización de alertas

  • Ya tenían implementados el esquema de la API de la lavadora, la clave de cifrado, la lectura y descifrado de datos, y la detección del estado
  • Crearon un script de bot de notificaciones usando webhooks de Discord
  • Flujo principal:
    1. Hacer polling a la lavadora
    2. Si no hay cambios de estado, dormir y repetir
    3. Si se detecta un cambio, actualizar el último mensaje o enviar uno nuevo
    4. Repetir

Cierre y planes futuros

  • Ya lograron automatizar las notificaciones del timbre y de la lavadora
  • En el futuro planean aplicar automatizaciones similares a lavavajillas, secadora, TV y otros dispositivos (enchufes inteligentes, sensores de vibración, IR blaster)
  • También piensan experimentar con un sistema de seguridad sencillo usando una webcam

Conclusión

  • Con este proyecto aprendieron las bases de la ingeniería inversa de IoT en la práctica y de un sencillo hackeo de hogar inteligente
  • Fue un caso que les permitió experimentar tanto la utilidad como la diversión

1 comentarios

 
GN⁺ 2025-07-28
Comentarios de Hacker News
  • Antes que nada, aclaro que esto no es una crítica al artículo original; me pareció una gran presentación de un proceso de análisis de dispositivos realmente fascinante
    Si el dispositivo se comunica con una app de Android, recomiendo apk-mitm
    Esta herramienta elimina del APK casi todas las formas conocidas de certificate pinning y además reescribe el manifiesto para permitir usar certificados locales sin root
    Si desinstalas la app original y haces sideload del resultado de apk-mitm, puedes usar mitmproxy en un dispositivo común sin modificar
    Y otro punto importante: si la app envía datos cifrados y luego los descifra para mostrarlos, entonces la clave tiene que estar en algún lado dentro de la app o llegar desde alguna parte
    Si analizas el APK con jadx, puedes verlo casi como código Java, así que a veces incluso puedes encontrar la clave
    Pero algunos fabricantes mueven el cifrado a código nativo, y en ese caso toca hacer ingeniería inversa con Ghidra o algo similar
    Este proceso puede ser increíblemente tedioso, pero también muy divertido
    Aunque el autor se basó en investigaciones previas de otras personas, creo que incluso si nadie ha hecho exactamente ese trabajo antes, vale totalmente la pena intentarlo y no rendirse
    Al final, puedes aprender muchísimo al descubrir cómo funciona un dispositivo que te pertenece

    • No era algo específico del dispositivo, pero yo también tuve problemas con una app, desactivé las actualizaciones automáticas y me quedé en una versión anterior
      Con el tiempo me bloquearon el acceso al servidor, y por casualidad descubrí lo del certificate pinning, así que probé ese repositorio y de verdad lo resolvió limpiamente
      Hasta dejó de mostrar anuncios, quizá porque usaba URLs publicitarias antiguas
      Y no me da ninguna pena, porque la empresa solo parecía enfocada en arruinar cada vez más la app
  • Yo uso una lavadora Bosch para monitorear el progreso desde el otro extremo de la casa, a diferencia del artículo original
    Gracias a la API de Bosch, puedo saber si terminó el ciclo de lavado y si la puerta ya se abrió
    Por ahora uso la versión básica de la API, pero el PoC ya está listo y pienso migrarlo a una opción alojada localmente
    Con Home Assistant, si el ciclo terminó pero la puerta no se abrió, eso significa que todavía hay ropa mojada adentro
    Así que configuré un aviso cada 15 minutos a mi teléfono y, solo cuando mi esposa está en casa, también al suyo
    Es algo muy simple y funciona perfecto

    • Mi lavadora es un modelo viejo de los 90, así que funciona según la perilla del temporizador
      No tiene computadora ni sensores; lo único extra que detecto es la etapa de entrada de agua
      Siempre basta con poner el temporizador en 40 minutos, y listo; incluso tiene función para apagar la alarma, así que no podría ser más simple

    • Yo también estoy pensando hacer algo parecido con un hornito eléctrico
      No tiene API ni conectividad, pero planeo conectarlo a un smart plug para medir el consumo eléctrico, detectar si está en espera o en funcionamiento, y mandar avisos

    • A veces pongo la lavadora antes de dormir y termino dejándola hasta el día siguiente, pero la mía tiene una función tipo "tumble extendido" que mantiene la ropa fresca toda la noche
      Usa un poco más de agua, pero me salva la rutina nocturna y además ayuda a aprovechar la electricidad en horario nocturno
      Me gusta mucho mi Electrolux, y supongo que otras marcas también tendrán algo parecido

    • Llevo más de 15 años usando un reloj G-Shock 5600 como recordatorio del temporizador de la lavadora
      Cuando empieza el lavado, configuro en el reloj el tiempo total del ciclo, y cuando termina, me avisa con un pitido
      Funciona sin importar si hay API o no, y da igual la marca

    • Es una solución realmente elegante
      Lógica simple, pero con una mejora muy real en la vida diaria

  • Estoy haciendo hardware hacking con un refrigerador
    No es por software, sino un refrigerador caro para casa rodante que soporta gas/12v/220v
    La parte de control electrónico se incendió y dañó los cables y el interior, pero el refrigerador en sí sigue bien
    Como de todos modos tendría que cambiar todas las piezas, en vez de comprar una controladora nueva por 250 dólares, quiero armar un sistema nuevo combinando piezas de una caldera de gas antigua
    La motherboard de la caldera ya incluye el sistema de ignición, así que si diseño bien la lógica y las medidas de seguridad, creo que podría hacerlo funcionar en modo gas
    Así me ahorro comprar un refrigerador nuevo y además es un buen proyecto para enseñarle electrónica a mi hijo de 9 años
    Claro, al ser gas puede ser peligroso, pero al final siempre es divertido, y cuando el hack funciona se acaban las críticas
    Si les interesa el proceso, podría escribir una publicación completa

  • Yo pegué sensores de vibración Zigbee a la lavadora y la secadora, y los conecté a Home Assistant
    No se me había ocurrido lo de monitorear corriente/voltaje con un enchufe inteligente, pero me parece una muy buena idea

    • En mi casa usamos smart plugs en la lavadora y la secadora, y enviamos el consumo eléctrico por MQTT a Node-RED
      Con unas condiciones de disparo sencillas, se automatiza la actualización del dashboard y también los correos cuando empieza o termina el lavado
      Tiene app y funciones Bluetooth, pero la app pide acceso a la cámara, audio y contactos de mi teléfono, así que no pienso usarla
      Parece que también hubo trabajo de integración con HA en el siguiente enlace
      https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
  • Este tipo de publicaciones son la esencia misma de Hacker News

    • Ojalá hubiera más publicaciones así, de hacking real en el sentido de modificación por hobby; últimamente siento que todo está lleno de temas de AI/LLM

    • Si te gusta este tipo de hardware hacking, también recomiendo muchísimo https://hackaday.com/

  • Instalar certificados propios en Android sin root suele ser bastante engorroso
    Solo puedes agregarlos al almacén de certificados del sistema, y normalmente hace falta un módulo de Magisk
    Una forma más fácil es ejecutar un emulador viejo de Android en la PC, instalar ahí el certificado y pasar el tráfico a Burpsuite o mitmproxy
    Ni siquiera hace falta cambiar de dispositivo
    Si analizas el código de la app con APKLab o Jadx, probablemente puedas encontrar al menos el algoritmo de derivación de claves
    Me da curiosidad si la app y la lavadora solo funcionan cuando están en la misma red; esa parte me gustó

  • Me sorprendió la mención de un ciclo de lavado de “3 horas” (que en realidad serían 4 o 5), así que pregunté
    Mi lavadora, en modo eco normal, tarda menos de 30 minutos y al terminar hace un aviso muy fuerte
    Gracias a la combinación de ciclo corto y alerta, no necesito ninguna solución técnica compleja aparte

    • Supongo que quien comentó es de Estados Unidos
      Las lavadoras europeas tardan más por los requisitos de menor consumo de agua y electricidad
      El aparato del artículo también parece ser una combinación lavadora-secadora, así que tarda aún más
      En mi casa, incluso el modo normal dura 104 minutos, y si la cargas de más puede llegar hasta 3 horas

    • Los ciclos largos eliminan mejor los microorganismos cuando usas detergentes enzimáticos y componentes blanqueadores de oxígeno activo
      Un ciclo de 30 minutos apenas equivale a “enjuagar” la ropa
      https://pubmed.ncbi.nlm.nih.gov/25207988/

    • Mi secadora es un modelo sin ducto, por desgracia, así que tarda hasta 3 horas
      Entre lavar y secar se van 4.5 horas
      Es el electrodoméstico que menos satisfecho me ha dejado de todos los que he usado
      A veces ni siquiera seca bien

  • Alguien señaló que no parece haber cifrado
    Analizó que los datos en la ventana de entrada del primer screenshot (cyberchef.avif) son simplemente hex ASCII sin cifrar
    Por ejemplo, explicó que 7D es {, 0D0A es CRLF, 09 es TAB, 22 es ", etc.
    Es decir, parece texto plano ya decodificado, así que la explicación sobre cifrado XOR no le cuadró
    También observó que el valor de la clave en el screenshot no coincide bien con los límites de bytes ni con los espacios reales de la entrada
    Por eso dudó de si la captura estaba manipulada o editada
    Dijo que le daba curiosidad saber por qué y qué estaba pasando realmente

  • Alguien avisó que está roto el enlace de la imagen marcada como “For now, I plugged this key into CyberChef, and was able to decrypt the data.”
    Incluso dio detalles del elemento HTML específico y del enlace relacionado

  • Sobre la parte de que “la lavadora se comunicaba muchísimo consigo misma”, alguien comentó que probablemente se debe a que quien diseñó el stack de red no conocía el concepto de interfaz loopback
    Decía que enviaba muchos paquetes a su propia IP y también paquetes por segundo a 255.255.255.255, aunque dijo que no le dio demasiada importancia

    • Aunque eso puede parecer innecesario, podría ser tráfico relacionado con ARP
      He visto ese comportamiento muchas veces en dispositivos IoT, y a veces se usa para detectar conflictos o cambios de IP
      Yo pensé algo parecido