Cómo encontrar archivos ocultos dentro de archivos de imagen (Jpg / Gif / Png)

Encontré un enlace que muestra cómo ocultar la cantidad de archivos dentro de un archivo de imagen: http://lifehacker.com/282119/hide-files-inside-of-jpeg-images más discusión sobre detección aquí: http: // preguntar .metafilter.com / 119943 / How-to-detect-RARsEXEs-hidden-in-JPGs

¿Estoy tratando de averiguar cuál es una buena manera de detectar mediante progtwigción si un archivo de imagen tiene otros archivos ocultos? ¿Debo intentar descomprimir el archivo para ver si otros archivos salen de él?

No estoy atado programáticamente, pero algo que funcione bien en la JVM sería genial.

Actualizar

Una aproximación:

Algo como este trabajo (sugerido por alguien en metafilter)

$ cat orig.jpg test.zip > stacked.jpg $ file stacked.jpg stacked.jpg: JPEG image data, JFIF standard 1.01 $ convert stacked.jpg stripped.jpg # this is an ImageMagick command $ ls -l 11483 orig.jpg 322399 stacked.jpg 11484 stripped.jpg 310916 test.zip 

Podría usar JMagick para este enfoque.

Gran pregunta

Si todo lo que desea verificar es un archivo RAR o ZIP adjunto al final de un archivo de imagen, ejecutar el unrar o unzip es la forma más fácil de hacerlo.

Si desea una verificación más rápida pero menos exacta, puede verificar algunas de las firmas de formatos de archivos especiales que indican ciertos tipos de archivos. La herramienta habitual de UNIX para identificar el formato de file es el file . Utiliza una base de datos de firmas de archivos binarios , cuyo formato se define en la página del manual de magic (5) . No encontrará un archivo RAR al final de un archivo JPEG, ya que solo mira el inicio de los archivos para tratar de identificarlos rápidamente, pero es posible que pueda modificar su código fuente para hacer lo que quiera. También puede reutilizar su base de datos de firmas de archivos. Si observa la parte del archivo comprimido de su base de datos en la sección de archivos Rar, muestra esto:

 # RAR archiver (Greg Roelofs, newt@uchicago.edu) 0 string Rar! RAR archive data, 

lo que indica que si su archivo JPEG contiene los cuatro bytes Rar! Eso sería sospechoso. Pero tendría que examinar la especificación de formato de archivo Rar en detalle para comprobar si hay más estructura de archivos Rar presente para evitar falsos positivos. ¡Esta página web también contiene los cuatro bytes de Rar! pero no hay archivos ocultos adjuntos: P

Pero si alguien conoce los detalles de sus cheques automatizados, podrían trabajar fácilmente en torno a ellos. La solución más sencilla sería revertir todos los bytes de los archivos antes de agregarlos al JPEG. Entonces, ninguna de sus firmas atrapará la versión invertida del archivo.


Si alguien realmente quiere ocultar un archivo dentro de una imagen, hay muchas formas de hacerlo que no podrás detectar fácilmente. El término general para esto es “esteganografía”. La página de Wikipedia , por ejemplo, muestra una imagen de árboles que tiene una imagen de un gato escondido en su interior. Para métodos esteganográficos más simples, existen pruebas estadísticas que pueden indicar que se ha hecho algo gracioso a una imagen, pero si alguien pasa mucho tiempo para crear su propio método para ocultar otros archivos dentro de las imágenes, no podrá hacerlo. detectalo

Podrías buscar la firma del archivo. http://en.wikipedia.org/wiki/List_of_file_signatures, por ejemplo, para el archivo 7z, la firma es 37 7A BC AF 27 1C para archivos rar es 52 61 72 21 1A 07 00 y para zip es 50 4B 03 04 Eche un vistazo a archivo comprimido en un editor hexadecimal, por ejemplo, HxD

Para ver si hay metadatos u otra información adjunta al archivo, puede decodificar la imagen y volver a codificarla para ver si el tamaño disminuye dramáticamente. Para un archivo JPEG, querría hacer algo como una rotación sin pérdidas que retenga los datos DCT originales, de lo contrario, el tamaño del archivo podría cambiar solo por las diferencias de encoding.

Un resultado más pequeño no sería una prueba de datos ocultos, pero sería un indicador de que necesita mirar más de cerca.

Nunca compartiste tu motivación para hacer la pregunta, pero voy a adivinar que se trata de descargar imágenes a un sitio público. En ese caso, realmente no debería preocuparse si la imagen enviada contiene datos extraños, simplemente debe limpiar la entrada independientemente. El proceso de deencoding / reencoding sería perfecto para esto.