Mi interés en el mundo de la criptomoneda ha ido creciendo en los últimos meses. Para abordar este interés, finalmente obtuve una plataforma de minería criptográfica.
Aquellos de ustedes que están familiarizados con las plataformas de minería han sido expuestos a los perros guardianes USB. Estos son dispositivos pequeños que están conectados a un puerto USB con el objetivo de monitorear su computadora y reiniciarla en caso de que su sistema se bloquee.
El funcionamiento de un watchdog USB es simple:
1. Inserte el dispositivo en un puerto USB libre. Hay cuatro pines que necesitan estar conectados. Use cables de puente para conectar dos de las clavijas al botón de reinicio con las otras dos clavijas conectadas al interruptor de encendido.
2. Una vez que enciende el dispositivo, espera un período de tiempo predeterminado para recibir un mensaje que indica que la computadora todavía funciona correctamente. Si ese mensaje no se recibe en el período de tiempo designado, la computadora se reiniciará.
3. El paso 2 se repite indefinidamente.
El software especializado es responsable de enviar mensajes al perro guardián. Si su computadora falla o se bloquea, el software no podrá transmitir el mensaje. Si se excede el intervalo de tiempo antes de recibir un mensaje, se avisa al watchdog que hay un problema con el sistema. A continuación, inicia un reinicio de hardware que es equivalente a presionar el botón de reinicio de la computadora.
Los watchdogs USB vienen con este software dedicado, aunque en mi caso el programa fue esencialmente inútil. Fue diseñado para ser utilizado en una máquina con Windows y yo uso una computadora con Linux para mi plataforma de minería. Esto planteaba un problema que debía ser abordado.
Echando un vistazo al software de Windows, me pareció bastante simple, así que decidí intentar aplicar ingeniería inversa a la aplicación.
Fue fácil de hacer:
Primero, necesitaba un programa que pudiera usarse para monitorear la conexión y los datos que se estaban pasando al perro guardián. Una rápida búsqueda en Google me dirigió a una herramienta valiosa, el monitoreo de puertos com.
El uso de un rastreador de puerto serie hizo que sea fácil descifrar los patrones necesarios. Debe verificar la configuración del puerto serie, que debe ser:
Velocidad de transmisión: 9600
Bits de paridad: ninguno
Bits de parada: 1
Eso es todo lo que necesita para comenzar a transmitir mensajes al controlador de vigilancia USB.
El protocolo:
El siguiente aspecto a considerar es el protocolo en uso. Una vez más, el sniffer te permite llevar a cabo esta investigación.
Lo primero que hay que notar es que cuando se inicia el software de vigilancia, envía un paquete (0x80) al que responde el dispositivo de vigilancia (0x81). A pesar de no saber la manera exacta en que se codifican los datos, es bastante obvio que este mensaje de conexión inicial contiene la versión del firmware.
Luego descubrí que se estaba enviando una secuencia de bytes (0x10) a una velocidad de uno por segundo. Esto fue con un valor de tiempo de espera de 160 segundos. Cambiar el valor de tiempo de espera a diez segundos hizo que el programa enviara un byte diferente (0x01).
Algunas deducciones indicaron que si un valor de byte de uno equivale a diez segundos, 160 segundos deberían representarse por un 16. Y 16 se representa en notación hexadecimal con 0x10.
Cuando se presiona el botón de reinicio, los relés se activan y se envía un byte de 0xff.
Que yo sepa, las únicas operaciones disponibles son estas tres:
Enviar un mensaje de latido que contenga el valor de tiempo de espera actual.
Compruebe la versión del firmware.
Reiniciar.
La secuencia de comandos
El guión completado es bastante básico. El código fuente está disponible para que lo use en https://github.com/zatarra/usb-watchdog.
Definitivamente, hay espacio para extender la funcionalidad del script de varias maneras que solo están limitadas por su imaginación. Algunas sugerencias son comenzar de forma remota una plataforma de minería o probar el video de las tarjetas de video de su sistema.
Advertencia: establecer el intervalo de latido demasiado bajo puede ser contraproducente para usted. Si lo configura en un minuto, esa es la cantidad de tiempo que tiene que reaccionar si su computadora falla. Deberá iniciar la máquina e iniciar el script dentro de ese período de tiempo. Si no lo hace, su computadora entrará en un bucle infinito, lo que puede ser muy molesto si está utilizando una plataforma de minería ubicada de forma remota.
Echa un vistazo a este repositorio de códigos para la última versión de la secuencia de comandos.
Si encuentra este instructivo, las donaciones se aceptan con gratitud en forma de una bebida para adultos.