Solución al último reto de la categoría "Miscelánea" que he puesto en este blog.El enunciado del reto decía lo siguiente: Lo importante es el código. Si lo sabes introdúcelo por el teclado y el secreto se visualizará en el LCD (del inglés, 'Liquid Crystal Display').
Y como recurso asociado al reto se proporcionaba el siguiente: arduino.jpg.
Solución: Lo primero que hago es bajar el archivo de imagen, en la que se ve un circuito implementado sobre una placa Arduino Uno y que consta de varios dispositivos: teclado de cuatro columnas y cuatro filas (4x4 'Keypad'), display de cristal líquido de 16 columnas y 2 filas (16x2 LCD), potenciómetro y resistencia:
Y como recurso asociado al reto se proporcionaba el siguiente: arduino.jpg.
Solución: Lo primero que hago es bajar el archivo de imagen, en la que se ve un circuito implementado sobre una placa Arduino Uno y que consta de varios dispositivos: teclado de cuatro columnas y cuatro filas (4x4 'Keypad'), display de cristal líquido de 16 columnas y 2 filas (16x2 LCD), potenciómetro y resistencia:
Está claro que únicamente con este diagrama del circuito poco puedo hacer para conocer el código a introducir y como este reto, tal y como se indica en el post del enunciado, tiene algo de esteganografía lo siguiente que hago es intentar detectar información oculta en el archivo de imagen (arduino.jpg). Para ello, empiezo investigando los metadatos de dicho archivo y veo que el de etiqueta 'Software' tiene un valor que puede indicar algo ('sketch' es el nombre que reciben los programas en Arduino):
Tras este examen preliminar puedo utilizar algún simulador de Arduino para ejecutar el programa y ver que se visualiza en el LCD tras introducirse el código correcto ("C0D3"), o bien completar de forma manual el análisis del programa y obtener lo que se visualizaría si se introdujera dicho código.
Seguidamente, abro el archivo de imagen (arduino jpg) con un editor hexadecimal y veo que se ha utilizado el software 'steghide' para ocultar algo en él. Pruebo a extraer la información utilizando como contraseña 'sketch', y, efectivamente, se extrae de la imagen el archivo Reto_41.ino (la extensión .ino es la que tienen los programas en Arduino):
El segundo paso a dar para resolver este reto tiene que ver con la ingeniería inversa ('Reversing'). Examino el programa extraído y me queda claro que el código a introducir por el teclado es: "C0D3":
Lo hago de ambas maneras:
1.- Utilizando un simulador:
Me parece que esta forma de resolver el reto es la más didáctica, ya que obliga a montar el circuito con la ayuda del archivo de imagen (arduino.jpg) y siguiendo las especificaciones del programa (Reto_41.ino). Para ello uso el simulador 'on-line' 'Tinkercad'.
Una vez hecho lo anterior ejecuto la simulación:
Como se observa en la figura anterior, tras introducirse el código "C0D3" se muestra un mensaje de que éste es correcto y se visualizan ciertos "caracteres" o símbolos en el LCD.
Como se observa en la figura anterior, tras introducirse el código "C0D3" se muestra un mensaje de que éste es correcto y se visualizan ciertos "caracteres" o símbolos en el LCD.
2.- Completar el análisis del programa de forma manual:
Una vez que se verifica que el código introducido por el teclado es correcto, mediante un bucle se visualizan en el LCD 12 "caracteres" personalizados o símbolos que han sido definidos previamente.
Una vez que se verifica que el código introducido por el teclado es correcto, mediante un bucle se visualizan en el LCD 12 "caracteres" personalizados o símbolos que han sido definidos previamente.
En un LCD cada carácter a visualizar se representa mediante 40 píxeles dispuestos en 8 filas y 5 columnas, y éste tiene un juego de caracteres predefinido, pero también se pueden personalizar caracteres sin más que definir para cada uno de ellos los píxeles que se iluminarán (1) y aquellos que se mantendrán apagados (0). Posteriormente se crean cada uno de los caracteres personalizados (lcd.createChar) y ya estarían listos para su uso.
Tomo como ejemplo el primer carácter que se visualiza en el LCD tras introducirse el código correcto (dispongo mejor la definición del símbolo en el programa para que se aprecien mejor los valores a asignar a los píxeles):
Como se ve, también puedo obtener manualmente todos los "caracteres" personalizados o símbolos que se visualizan en el LCD tras incluirse el código correcto.
Por consiguiente, tanto utilizando un simulador como de forma manual, obtengo los mismos símbolos, pero: ¿Qué significan? Este tercer paso para resolver el reto es el más fácil y enseguida los identifico como pertenecientes al alfabeto braille, con lo que lo único que me queda es decodificarlos con una de las muchas herramientas 'on-line' existentes:
Con lo que la solución a este reto es: K3YP4D-LCD.
Comentarios
Publicar un comentario