viernes, 10 de agosto de 2012

Como ocultar archivos adentro de imágenes, audio o videos

Este es un post que compartí en taringa sin recibir muchos puntos, lo publico aquí y espero que les guste :(


El subtitulo seria como embeber o embedar un archivo adentro de una imagen, audio o video cualquiera utilizando una consola, ya sea el símbolo del sistema o un terminal.
Este procedimiento se llama también "esteganografía" y basa en un articulo publicado en gcc2.net que vi referenciado en un post de la pagina de anieto2k, el cual decidí completar más para usar con varias plataformas y con otras posibilidades.

El objetivo inicial seria proteger nuestros archivos ocultos de miradas indiscretas, pudiendo así colocar imágenes y vídeos en nuestros mails o en internet sin que nadie pueda darse cuenta del verdadero contenido oculto.
Para hacer esto se necesitara un archivo de imagen, audio o video, un archivo o grupo de archivos cualquiera que queramos ocultar (puede ser desde texto o un mismo archivo multimedia) y un programa para comprimir (WinRar, WinZip o 7zip en windows; PeaZip o p7zip en Linux). Es valido para Windows XP, Vista, 7, 8 o cualquier Linux. En mi caso voy a utilizar windows XD lite, un mod del XP junto con linux Xubuntu.

Instrucciones básicas:
Antes que nada quiero advertir que ocultar archivos adentro de videos o musica puede generar errores debido al gran tamaño y el sistema de codificación de estos últimos, por lo que recomiendo que lo intenten primero con una imagen cualquiera (en mi caso jpg).

1) Lo primero que se debe hacer es juntar los archivos que queremos ocultar con el archivo de fachada (que puede ser una imagen, audio o video) en una misma carpeta, esta puede estar hubicada en la raiz del disco o en el escritorio.

2) Debemos comprimir los archivos a ocultar en formato .rar, .zip o .7z.

3) Debemos abrir un Simbolo de sistema (Windows) o Terminal (Linux) y dirigirnos a la carpeta especifica (en caso que la carpeta se llame "ocultar" y se ubique en el escritorio seria: cd Escritorio\ocultar en windows o cd Desktop/ocultar en linux).

4) Una vez dentro de la carpeta utilizar el siguiente comando en Windows (ejemplo con imagen jpg):
copy /B "fichero_de_fachada.jpg" + "archivos_a_ocultar.zip" "fichero_de_salida.jpg"

En Linux se puede usar el comando cat de una forma simple:
cat "archivos_a_ocultar.zip" >> "fichero_de_fachada.jpg"
* Las comillas no son necesarias salvo que el nombre del archivo/fichero contenga espacios.

5) Luego para extraer el archivo solo se necesita abrir el "archivo_de_fachada.jpg" desde nuestro programa de compresión predeterminado usando en el menú contextual la opcion "Abrir con...". En caso que no nos lo permita, con solo cambiar a la extensión del archivo comprimido original se podrán ver los archivos ocultos:
El siguiente comando es para cambiar una extensión desde windows:
rename "fichero_de_fachada.jpg" "fichero_de_fachada.zip"
El comando para cambiar una extensión desde Linux es:
mv -iv "fichero_de_fachada.jpg" "fichero_de_fachada.zip"
PD: Para cambiar las extensiones de los archivos en windows sin usar la consola dirigirse a "Herramientas → Opciones de carpeta... → Ver" y destildar la casilla "Ocultar las extensiones para tipos de archivo conocidos."

Recuerden que casi todo se realiza desde una consola o terminal...

Como toda esta explicación fue poco gráfica voy a ilustrar todo un poco más en detalle.

Práctica paso a paso: 
Voy a exponer 3 ejemplos distintos.



Ocultar varios archivos adentro de una imagen jpg en Windows

1) Primero comprimimos los archivos de texto que queremos ocultar (yo lo voy a comprimir con WinRar) y los ponemos en una misma carpeta junto con una imagen jpg de fachada. Yo voy a crear la carpeta "Prueba" en mi escritorio:








2) Debemos abrir un Simbolo de sistema (Inicio → Ejecutar → cmd) por lo que nos aparecera una pantalla negra donde podemos insertar comandos ms-dos.

y nos dirigimos a la carpeta (cd Escritorio y cd Prueba)


3) Ahora es cuando debemos poner el comando para ocultar los archivos adentro de la imagen:

Repito que la sintaxis era: copy /B "fichero_de_fachada.jpg" + "archivos_a_ocultar.zip" "fichero_de_salida.jpg"

Por lo que en este caso será: copy /B "foto.jpg" + "archivo.zip" "foto de salida.jpg"



Si la operacion se realiza correctamente la consola nos dirá "1 archivos copiados."

Cabe decir que el parametro "/B" le dice al sistema operativo que copie el archivo en forma binaria (binary), pueden obtener más ayuda tecleando el parametro copy /?

Si se fijan verán que la imagen nueva (foto de salida.jpg) tiene algo más de tamaño en relación con la imagen original, sin embargo esto no altera el comportamiento normal de la imagen por lo que podremos manipularla como queramos sin que el archivo adjunto se dañe.

4) Ahora para ver el contenido alojado en la imagen debemos abrirla con el WinRAR (o el 7zip, etc.), desde el menú contextual "Abrir con...":



Para extraer los archivos solamente hay que hacer click en "Extraer en" o "Extract" y seleccionar el directorio.

PD: en caso que les de un error de "archivo desconocido o dañado" (muy extraño que suceda con imágenes), en la parte 3 del siguiente apartado (para ocultar un mp3) se explica como reparar el archivo.

Ocultar varios archivos adentro de un archivo de audio Mp3 en Windows

1) Repetimos los pasos 1, 2 y 3 del apartado anterior.


2) Al momento de escribir el comando en la consola, reemplazamos el archivo de fachada por un archivo mp3:



3) Ahora bien puede suceder el error de que al intentar abrir el archivo mp3 con WinRAR o cualquier otro programa de compresion aparezca un mensaje de error diciendo que el archivo es desconocido o está dañado, aun incluso cambiándole la extensión de .mp3 a .rar:


Para solucionar el inconveniente solo es necesario usar la función de "Reparar" el archivo. En este caso desde WinRAR seleccionamos el archivo y vamos al menú Herramientas →  Reparar archivo (Alt+R) → Tratar como si fuese Rar:


Nos aparecerá el archivo reparado con el prefijo "rebuilt" que podemos abrir sin problemas:

Puede suceder que al abrir un archivo en WinRAR de un error mientras que en 7zip se habrá perfectamente o viceversa, esto depende del tipo de archivo y su codificación.


PD: siempre es recomendable hacer una prueba experimental para saber si puede haber errores antes de ocultar nuestros verdaderos archivos.

Ocultar un archivo zip adentro de un gif en Linux Ubuntu
En las fotos en realidad se ve a Xubuntu ya que en este momento estoy en Virtualbox 

1) Comprimimos los archivos que queremos ocultar con un compresor de preferencia Zip, (puede ser el PeaZip o el p7zip) yo en mi caso utilizare File Roller el administrador de archivadores predeterminado de Ubuntu (gnome).






2) Abrimos una consola (terminal) y nos dirigimos a la carpeta Prueba creada en el escritorio:
cd Desktop → cd Prueba → ls → cat "archivo.zip" >> "foto.gif"
* ls es solo para verificar que estamos en la ubicación correcta.



3) Ahora para abrir el archivo en Ubuntu será necesario cambiarle la extension (F2) de gif a zip:



4) Luego podremos abrir la imagen Gif y ver los archivos ocultos desde cualquier archivador para linux (en este caso File Roller el predeterminado de Xubuntu):


El procedimiento en Linux como se puede ver es relativamente facil.


Ocultar archivos adentro de un video flv en Linux Ubuntu

1) Repetimos el paso 1 del apartado anterior.


2) Ahora volvemos a usar el comando referenciado anteriormente pero con un video flv:
cat "archivo.zip" >> "Video Youtube.flv"



Como se puede ver el vídeo funciona igualmente con el archivo incrustado, pero no es recomendable subir un video con un archivo incrustado a youtube o sitios de vídeo online ya que estos suelen reencodear los archivos de vídeo al subirlos a sus servidores por lo que los archivos que incrustáramos se perderían :(



También suele ocurrir que al intentar abrir el video como un archivo comprimido nos de error (archivo dañado o desconocido, bla bla) por lo que solo nos queda reparar el archivo (es por eso que en linux recomiendo comprimir en zip por compatibilidad), pero en casos extremos puede pasar que como el vídeo es muy pesado tampoco se lo pueda reparar (depende del compresor que usemos), por lo que se debe recurrir a abrir el archivo de vídeo desde un notepad y buscar "PK" (con el atajo Ctrl+F) que es la etiqueta de formato interno del archivo Zip original... a ver lo voy a explicar mejor... En linux y en windows también, el formato de los archivos no solo se identifica por la extensión textual del nombre de archivo (archivo.extension), también casi todos los archivos tienen una etiqueta interna que identifica el formato real del archivo, para probarlo pueden arrastrar un archivo zip a un notepad (bloq de notas) y verán que en la primera linea dice "PK", esto identifica internamente a los archivos .zip, los archivos .rar suelen decir Rar, los .7z dicen 7z y la mayoría de los archivos usa como denominador interno su extensión real. Ahora ¿porque los ZIP llevan internamente PK?... eso es porque los creadores del formato fueron de la compañía PK, creadora del PKZIP para Ms-Dos y Unix :P

Automatizando las consolas:
También podemos hacer un pequeño script en Bach para hacer esta accion de ocultacion de archivos de forma automática:
7z a archivo.zip *\  -r
copy /b "*.jpg" + archivo.zip secreto.jpg
del archivo.zip && pause>nul

Este seria un script para bash en Linux:
p7z a archivo.zip *\  -r
cat archive.zip >> "*.jpg"
rm archive.zip

* Atención: estos scripts solo deben ejecutarse en una carpeta separada donde solo halla una sola imagen jpg, de lo contrario grabaría los ficheros a ocultar en cada imagen que se encuentre en el directorio.
* Puede ser necesario incluir el programa 7zip.exe en las variables del sistema para no tener que adjuntarlo en el mismo directorio.
* Para usar 7zip en Linux es necesario instalarlo con el comando sudo apt-get install p7zip (para Ubuntu o Devian).

Otras opciones:
Ademas debo referenciar que hay programas que podemos instalar que nos permiten ocultar nuestros archivos en imágenes y otros ficheros con la posibilidad de añadirles contraseña de una forma mas simple (para los que no quieran usar la consola).

Our Secret:
Está es la herramienta que le dio nombre a este método llamado "esteganografía", con este programa gratuito seleccionamos el archivo JPEG o MP3 que será usado como contenedor de nuestros documentos privados y seleccionamos los archivos que deseamos incrustar en el.
Para des-ocultar los archivos solo se necesita hacer el procedimiento inverso.
Se puede descargar desde aqui.
Ocultar archivos en la PC
Our Secret
Steghide:
Es un programa para consola que permite ocultar archivos adentro de imágenes JPG o BMP y audio WAV y AU; lo más importante es que es compatible con Windows y Linux
Se puede descargar desde aqui y se puede ver también su manual en español aqui.

Camouflage:
Software gratuito que permite ocultar cualquier tipo de archivo en imágenes bitmap de 24bpp, de forma que para una tercera persona no sepa que esa imagen contiene otro archivo. A partir de una contraseña definida por el usuario, se ocultan los datos en un orden aleatorio; sin esa contraseña, es casi imposible siquiera ver que hay un fichero oculto en su interior.
Pueden descargar el instalador desde aqui.
Camouflage v1.2.1
Camouflage

PD: en caso de que estas paginas se caigan no duden en pedírmelos en los comentarios.

Solo me faltaría referenciar el método Stream, que nos permite ocultar archivos en cualquier sistema Windows NTFS, pero que no quiero explicar ya que los archivos guardados con este método se podrían perder con facilidad :(

Como curiosidad y a modo de prueba dejare esta imagen de pedobear que tiene oculto un archivo comprimido en Rar con algunas cosas interesantes 

URL: https://goo.gl/bn9VKX

Ante cualquier duda o sugerencia no duden en comentar ;)

Adios y salu2 a to2

nikos3194

7 comentarios:

  1. amigo muy bueno, necesito saber si conoces de algun programa hecho en java que realice esto mismo

    ResponderBorrar
    Respuestas
    1. De nada. Programas ya hechos explícitamente en java no conozco. Si se trata de programarlo personalmente, sería como tratar de reinventar la bombilla electrica, por lo que recomiendo importar el comando de windows directamente al código:

      try {
      Process proceso = Runtime.getRuntime().exec("copy /b archivo1.ext + archivo2.xyz archivo1.ext");
      } catch (IOException e) {
      e.printStackTrace();
      }


      Salu2

      Borrar
  2. Seria el mismo procedimiento si quiero ocultar una imagen dentro de otra imagen???

    ResponderBorrar
    Respuestas
    1. Si. El único problema es que si subes la imagen a un sitio de imágenes tipo google fotos, flickr, imgur,... estos te la reencodean y perderás los datos incrustados.

      Borrar
  3. En efecto veo que perdí la imagen con el archivo incrustado al final del post. Esto se debió a la migración de picasa a google fotos :(

    Aquí la tengo subida a un hosting dedicado:

    http://informax.comyr.com/Misc~Web/pedobear_meme.jpg

    ResponderBorrar