Ocultando archivos en otros – LSB (II)

Rafa Páez, al que podéis encontrar en su twitter, acaba la serie sobre el método LSB para ocultar información en imágenes con un ejemplo práctico.

Para comprender mejor la técnica de esteganografía comentada en la entrada del viernes, he realizado una serie de scripts en PHP que nos permiten realizar todo este procedimiento de manera automática, simplemente indicando los archivos a utilizar.

El primero de ellos es ocultar.php (en todos los scripts es necesario quitar la extensión .txt para probarlo) que utilizaremos para ocultar el archivo deseado en la imagen y nos devolverá una imagen en formato PNG, que será igual a simple vista que la imagen de entrada pero que contendrá el archivo oculto. Para utilizarlo, debemos ejecutarlo de la siguiente forma:

php ocultar.php formato_entrada[jpeg/png] recorrido[filas/columnas] \
            imagen_portadora fichero_a_ocultar imagen_resultante

Como podemos ver, tenemos la opción de elegir el tipo de imagen de entrada entre “jpeg” y “png”, y la forma en que se recorrerá la imagen para ir introduciendo los bits del archivo a ocultar. Esto último sirve para saber en qué orden tendremos que recorrer la imagen resultante para poder obtener el archivo oculto, ya que debemos saber el orden en el que se han introducido los bits en la imagen para después ordenarlos correctamente.

El segundo script, comprobar_lsb.php, nos sirve precisamente para conocer en qué orden debemos recorrer la imagen portadora para obtener el archivo oculto, ya que crea una imagen de igual tamaño que la portadora, pintando de color negro si el píxel contiene algún 1 en los bits menos significativos o de color blanco si tiene todo 0s. Esto es debido a que para poder detectar el final del archivo oculto, los siguiente bits menos significativos de los píxeles se rellenan con 0s.

Para ejecutarlo lo haremos de la siguiente manera, donde en formato_salida indicaremos si queremos obtener una imagen jpeg o png con el resultado.

php comprobar_lsb.php formato_salida[jpeg/png] imagen_portadora imagen_salida

En las siguientes imágenes, podemos ver un ejemplo de una misma imagen en la que se ha utilizado el método LSB para ocultar un archivo recorriendo la imagen por columnas y por filas:

Una vez hemos comprobado que en la imagen hay información oculta y la forma en la que se ha ocultado, podemos utilizar el tercer script, obtener.php, para obtener el archivo oculto.

Para ejecutarlo, lo haremos de la siguiente forma:

php obtener.php recorrido[filas/columnas] imagen_portadora archivo_salida

En este caso, los scripts se han utilizado para hacer una demostración del método, pero pueden ser utilizados para ocultar cualquier tipo de archivo en una imagen usando el método LSB, siempre y cuando se cumpla el requisito del tamaño :)

Para aquellos que quieran probar y comprobar la técnica, os dejo dos imágenes completamente “iguales”, pero una de ellas tiene algo oculto. ¿Sabríais decir cual es? :P

Comments

  1. Excelente código rafa, es mas corto del que yo haría =P

    Y claro podría decir cual es con un «ataque visual» =)

    Saludos rafa!!

    Habrá mas?

  2. Gracias Hecky :)

    Estoy dándole las últimos retoques a un reto sobre esteganografía, así que supongo que en breve habrá otro por aquí ;)

    Saludos
    fikih888

  3. Excelentes códigos. Y or no leer bien las opciones casi no descubro el mensaje