A veces una tarea forense es bastante estrecha. Determinación del tipo de archivo significa leer los primeros meses del 10 de bytes en la mayoría de los casos. Por suerte hay herramientas que hacen justamente eso. Pero para otras tareas que podríamos enfrentar, nuestras herramientas estándar no realmente nos dan un método para reducir su alcance. Es posible que desee para buscar archivos de una cadena que se puede esperar encontrar en los primeros 1000 bytes del archivo. Grep le permitirá detener la búsqueda de un archivo una vez que se encuentra la cadena, pero no va a dejar de buscar hasta que encuentre el partido. Esto puede no parecer una gran cosa hasta que se considera archivos grandes como videos. ¿Realmente quieres buscar 1k de datos, pero que terminan buscando 2 GB
Head
El la cabeza comando se utiliza para la producción de la primera parte de un archivo. Por defecto, imprime las primeras 10 líneas de un archivos (mejor cuando se aplica al texto archivos), pero puede ser utilizado para generar un monto definido por el usuario bytes.
$ head-c 1000 archivo # Exportar el primeros 1000 bytes de «archivo». «1k» se puede utilizar como un atajo para «1000». Del mismo modo, el cola de comandos se puede utilizar para exportar datos desde el final de un archivo .
Usted puede dejar de leer aquí si sólo se está necesitando ouput una cantidad fija de bytes de un archivo. Pero, por lo general, el examinador forense se ocupa de buscar a través de cientos de miles de archivos, si no millones!
Un ejemplo del mundo real
Digamos que tenemos una imagen de disco que contiene cientos de mil gráficos, pero sólo queremos ver las fotografías creadas con una cámara digital. Programas de visualización de gráficos como a Gthumb tienen la capacidad de recurse a través de un sistema de archivos y encontrar imágenes de gráficos, e incluso establecer algunos límites de búsqueda, como el tamaño de archivo, fecha de modificación, etc, pero estos filtros realmente no nos ayudan aquí.
Necesitamos una manera de limitar los gráficos que vemos a las fotografías digitales. La mejor manera de hacer esto es para limitar la búsqueda de imágenes en base a la presencia de datos Exif. El término Exif siglas en inglés de Formato de archivo de imagen. Datos Exif contiene cámara y configuración de la información y se ha desarrollado para fomentar la interoperabilidad entre dispositivos digitales (ver exif.org). Se encuentra antes de los datos de imagen en un archivo jpeg. La mayoría de cámaras digitales utilizan este estándar />.
Datos Exif se lo precedió por el encabezado «Exif» encontraron 25 bytes en un archivo jpeg. Por lo tanto, parece lógico buscar archivos de gráficos para la cabecera Exif. Pero, ¿cómo buscar archivos gráficos, y después de buscar solamente los primeros 28 bytes para el término ‘Exif’
encontrar y el archivo
El encontrar de comandos se puede utilizar para hacer búsquedas recursivas en un sistema de archivos. Es una herramienta muy robusta, pero sólo me centraré en una de las invocaciones más simples aquí: la búsqueda de un camino de forma recursiva para cualquier archivo:
$ find ruta / al / búsqueda de tipo / f # El» f «argumento de la» opción de tipo «sólo devuelve los archivos a la salida estándar. El argumento de la «d» limitaría la producción a los directorios, etc
Podemos limitar aún más nuestra producción basada en el nombre del archivo, si se quiere:
$ find ruta / a /-forma de buscar f-nombrei «. jp * g» # La opción-INAME coincida con el siguiente argumento con mayúsculas y minúsculas. Tenga en cuenta que se aceptan los comodines estándar. La opción-nombre produciría resultados mayúsculas y minúsculas.
Podríamos estar buscando los gráficos que han cambiado de nombre, sin embargo, y limitar nuestra búsqueda por el nombre es demasiado estrecho. Es aquí donde el style=»font-family: archivo monospace;»> Courier New, Courier, de comandos entra en juego Archivo lee un archivos de cabecera y devuelve su tipo. Podemos archivos de tubería situado, con encontrar y leer su tipo así:
$ find ruta / a /-forma de buscar f | file-i – # La opción-i retorna los archivos de tipo MIME, que está más estandarizado que las descripciones «lenguaje llano» disposición expresa en contrario. El comando de archivo requiere un argumento de archivo, y el «-» después de la opción-i es un atajo para stdin. En otras palabras, el – se sustituye por la ruta del archivo devuelto por el comando find
Ahora tenemos una lista de los archivos con los tipos que se devuelven a la salida estándar.. Lo que queremos hacer es filtrar los archivos de las imágenes, y luego obtener un subconjunto de imágenes con datos EXIF. Para ello, inserte un bucle while y añadir una prueba:
$ find ruta / a /-forma de buscar f | mientras lee i; hacer-file ib» $ i «| grep» imagen «; [$ ? = 0] && echo «$ i»; hecho # Aquí, cada archivo que se encuentra con el hallazgo se asigna a la variable $ i en el bucle while. Dentro del bucle, el tipo de archivo de $ i se determina y si el tipo contiene la cadena «imagen», la ruta del archivo se imprime. La opción «-b» fue introducido en el comando file para producir «breve» de salida, que es la salida que incluye el tipo de archivo en ausencia del nombre de archivo (esto evita falsos éxitos donde el término «imagen» está en la ruta de archivo) .
Si usted no está familiarizado con las pruebas de golpe, por favor revise este post, o en la línea de comandos bash, escriba «test ayuda.» En resumen, estamos probando el grep código de salida, y si es ‘0 ‘, lo que significa el éxito, se ejecuta el echo comando para imprimir la ruta del archivo.
Hemos administramos una lista de archivos que se clasifican como imágenes. Tenemos que determinar cuáles tienen los datos Exif para completar la nuestra búsqueda. Hacemos esto mediante la integración de un ensayo más:
Courier New, Courier, monospace; font-size: x-small;»> $ encontrar ruta / a /-forma de buscar f | mientras lee i; hacer file-ib «$ i» | grep «imagen»; [$ ? = 0] && head-c 28 «$ i» | grep «Exif»; [$ ? = 0] && echo «$ i»; hecho # En este caso, si el archivo se determina que es una imagen, los primeros 28 bytes son grepped la cadena «Exif». . Si esto da como resultado una coincidencia, el nombre del archivo se imprime
Vale, me has pillado: Sólo produje una lista de archivos con cabeceras Exif y no puedo ver el contenido de las imágenes por lectura de una lista. Esto es fácilmente rectificado con el ln o el comando ‘link’. Podemos reemplazar el último eco con un comando para crear archivos de enlace a las imágenes que nos ubicamos el permitir a todos los archivos que se ve desde un solo lugar:
$ find ruta / a /-forma de buscar f | mientras lee i; hacer-file ib» $ i «| grep» imagen «; [ $ ? = 0] && head-c 28 «$ i» | grep «Exif»; [$ ? = 0] && ln-s «$ i» «$ {i # # * /}» – $ (stat-c% i «$ i»); hecho # La opción-s crea un enlace simbólico a un archivo $ i en el directorio actual. El enlace se llama así por el nombre base del archivo y tiene el número de inodo adjunta para evitar errores al producirse si los archivos tienen el mismo nombre.
No te preocupes por el «$ {i # # * /}» – $ (stat-c% i «$ i») alarde publicitario por ahora. Voy a explicar que en otro post. Por ahora, sólo imitar esa parte del comando, si usted está preocupado acerca de los archivos con el mismo nombre.
Un poco más de detalle para los que siguen conscientes
Resulta que Exif no es realmente la mejor cadena para filtrar. Más eficaz se filtraba en una fecha de creación exif. Consideremos un caso reciente en el que tallé jpegs de grupos no asignados. Aquí, podría filtrar en el nombre de archivo sobre el tipo de archivo porque el tallador añade automáticamente la extensión de archivo jpg />
Número total de archivos grabados:..
$ find recuperado /-type f | wc-l # El «número de palabras» comando wc o se puede utilizar para contar líneas de salida
231 331
Mi número total de imágenes jpeg:
$ find recuperado /-name «* jpg.» | wc
61432
total número de imágenes jpeg con datos Exif:
Courier New, Courier, monospace; font-size: x-small;»> $ find recuperado /-name «* jpg.» | mientras lee i; hacer head-c 28 $ i | grep Exif; hecho | wc-l
3815
Número total de imags jpeg con fechas de creación Exif:
Courier New, Courier, monospace; font-size: x-small;»> $ find recuperado /-name «*. jpg» | mientras lee i; hacer head-c 256 $ i | grep-E ‘[0-9] {4}: [0-9] {2}: [0-9] {2 } [0-9] {2}: [0-9] {2}: [0-9] {2} ‘; hecho | wc-l # La expresión regular coincide con una salida como» 2012:08:09 17:11:56 «
841
Como puede ver, el filtrado en un código de fecha fue mucho más eficaz en la búsqueda de archivos con metadatos asociados con cámaras (fechas de creación de ficheros) que el de la cabecera Exif solo.
Yo sé que hay una gran cantidad de información aquí, pero espero que con la presentación por completo que son capaces de entender y adaptar los conceptos a su usos propios.