
Un conjunto de herramientas forenses de imágenes digitales de código abierto
Un conjunto de herramientas forenses de imágenes digitales de código abierto
"El análisis forense de imágenes es la aplicación de la ciencia de la imagen y la experiencia en el dominio para interpretar el contenido de una imagen y/o la imagen en sí misma en asuntos legales. Las subdisciplinas principales del análisis forense de imágenes con aplicaciones para el cumplimiento de la ley incluyen: Fotogrametría, Comparación Fotográfica, Análisis de Contenido y Autenticación de Imágenes." (Grupo de Trabajo Científico sobre Tecnologías de Imagen)
Sherloq es un proyecto de investigación personal sobre la implementación de un entorno completamente integrado para la informática forense de imágenes digitales. No está concebido como una herramienta automática que decida si una imagen es falsificada o no (¡esa herramienta probablemente nunca existirá...!), sino como un compañero para experimentar con varios algoritmos encontrados en los artículos y talleres de investigación más recientes.
Si bien muchas soluciones comerciales tienen precios minoristas elevados y a menudo están reservadas únicamente para las fuerzas del orden y agencias gubernamentales, este conjunto de herramientas pretende ser tanto un marco extensible como un punto de partida para cualquier persona interesada en realizar experimentos en esta aplicación particular del procesamiento de señales digitales.
Creo firmemente que la seguridad por oscuridad es la forma incorrecta de ofrecer cualquier tipo de servicio forense (por ejemplo, "¡Usando este software propietario le garantizo que esta foto es prístina... y usted tiene que confiar en mí!"). Siguiendo la filosofía del código abierto, todos deberían poder probar varias técnicas por sí mismos, adquirir conocimiento y compartirlo con la comunidad... ¡incluso mejor si contribuyen con mejoras en el código! :)
La primera versión fue escrita en 2015 usando C++11 para construir una utilidad de línea de comandos con muchas opciones, pero pronto resultó ser demasiado engorrosa y no muy interactiva. Esa versión se podía compilar con CMake después de instalar las bibliotecas OpenCV, Boost y AlgLib. Este primer prototipo ofrecía alrededor del 80% de las funciones planificadas (consulte a continuación la lista completa).
Si bien también incluía algoritmos novedosos, la versión de 2017 agregó principalmente una GUI multiventana basada en Qt para brindar una mejor experiencia de usuario. Se podían mostrar múltiples análisis en pantalla y se implementó un visor rápido de zoom/desplazamiento para una navegación de imágenes más fácil. Ese proyecto se podía compilar con Qt Creator con Qt 5 y OpenCV 3 y cubría aproximadamente el 70% de las funciones planificadas.
Avance rápido hasta 2020, cuando decidí portar todo a Python (PySide2 + Matplotlib + OpenCV) para un desarrollo e implementación más fáciles. Si bien esta iteración apenas comienza y aún tengo que portar todo el código anterior a la nueva plataforma, creo que esta será la "forma" final del proyecto (siempre que alguien no se ofrezca como voluntario para desarrollar una bonita aplicación web).
Estoy feliz de compartir mi código y ponerme en contacto con cualquier persona interesada en mejorarlo o probarlo, pero tenga en cuenta que este repositorio no está destinado a distribuir un producto final, mi objetivo es solo rastrear públicamente el desarrollo de una herramienta educativa sin pretensiones, ¡así que espere errores, código sin pulir y funciones faltantes! ;)
Esta lista contiene las funciones que el kit de herramientas (con suerte) proporcionará una vez que se alcance la etapa beta (NOTA: ¡las funciones que aparecen en cursiva dentro del programa aún no están implementadas!).
General: Imagen Original, Editor Hex, Resumen del Archivo, Búsqueda Similar
Metadatos: Volcado EXIF Completo, Estructura de Cabecera
Inspección: Lupa de Realce, Histograma de Canal, Comparación de Referencia
Detalle: Gradiente de Luminancia, Filtro de Borde Eco, Umbral Wavelet, División de Frecuencia
Colores: Gráficos RGB/HSV, Conversión de Espacio, Proyección PCA, Estadísticas de Píxeles
Ruido: Separación de Señal, Desviación Mín/Máx, Valores de Planos de Bits
JPEG: Estimación de Calidad, Análisis de Nivel de Error
Manipulación: Mejora de Contraste, Falsificación Copiar/Mover, Empalme Compuesto, Filtrado Mediano
Clona el repositorio actual en una carpeta local y cambia el directorio actual a ella.
Sherloq usa Python 3.11. La configuración recomendada utiliza uv porque proporciona el mismo flujo de trabajo en Linux, macOS y Windows, puede instalar Python cuando sea necesario y mantiene el entorno del proyecto en la carpeta local .venv.
Instala uv siguiendo la guía de instalación oficial, luego crea el entorno desde la carpeta raíz de Sherloq:
$ uv venv --python 3.11
El repositorio también incluye un archivo .python-version, por lo que los futuros comandos uv usarán Python 3.11 por defecto.
$ uv pip install -r gui/requirements.txt
Algunas herramientas experimentales basadas en IA necesitan paquetes adicionales. Instálalos solo si planeas usar esas herramientas:
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq se puede iniciar desde la raíz del repositorio. El paquete de la aplicación resuelve iconos, modelos y herramientas incluidas a través de rutas centralizadas del proyecto.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
También puedes usar el lanzador de compatibilidad de la raíz del repositorio:
$ python sherloq.py
NOTA para usuarios de Linux: si se muestra este error:
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Ejecuta este comando desde la terminal: sudo apt install -y libxcb-cursor-dev
La aplicación Python Qt ahora reside en el paquete importable gui/sherloq_app:
main.py: punto de entrada de la aplicación Qt y ventana principal.core/: ayudantes de procesamiento de imágenes compartidos, como utilidades JPEG y carga de archivos.ui/: widgets Qt reutilizables, visores, tablas y el árbol de herramientas.tools/: widgets de análisis agrupados por categoría de caja de herramientas (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: acceso centralizado a iconos, modelos y ayudantes nativos incluidos, por lo que el código ya no depende de iniciarse desde .Los activos grandes incluidos y los componentes de investigación de terceros permanecen en gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra y el opcional gui/TruFor_main.
Consulta docs/project-structure.md para obtener un mapa orientado a colaboradores.
Cuando se publique una nueva versión, actualiza la copia de trabajo local con Git o descargando el código fuente más reciente, luego actualiza el entorno desde la carpeta raíz de Sherloq:
$ uv pip install --upgrade -r gui/requirements.txt
Si instalaste las dependencias opcionales de IA, actualízalas también:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui