
Une suite d'outils open-source pour l'investigation numérique d'images.
Une boîte à outils open source d'analyse forensique d'images numériques
"L'analyse d'image forensique est l'application de la science de l'image et de l'expertise du domaine pour interpréter le contenu d'une image et/ou l'image elle-même dans des affaires juridiques. Les principales sous-disciplines de l'analyse d'image forensique avec des applications pour les forces de l'ordre comprennent : la photogrammétrie, la comparaison photographique, l'analyse de contenu et l'authentification d'image." (Scientific Working Group on Imaging Technologies)
Sherloq est un projet de recherche personnel sur l'implémentation d'un environnement entièrement intégré pour l'analyse forensique d'images numériques. Il n'est pas conçu comme un outil automatique qui décide si une image est falsifiée ou non (cet outil n'existera probablement jamais...), mais comme un compagnon pour expérimenter divers algorithmes trouvés dans les articles de recherche et ateliers les plus récents.
Alors que de nombreuses solutions commerciales ont des prix de vente élevés et sont souvent réservées uniquement aux forces de l'ordre et aux agences gouvernementales, cette boîte à outils vise à être à la fois un cadre extensible et un point de départ pour toute personne intéressée par la réalisation d'expériences dans cette application particulière du traitement numérique du signal.
Je crois fermement que la sécurité par l'obscurité est la mauvaise façon d'offrir un quelconque service forensique (c'est-à-dire "En utilisant ce logiciel propriétaire, je vous garantis que cette photo est vierge... et vous devez me faire confiance !"). Suivant la philosophie open source, tout le monde devrait pouvoir essayer diverses techniques par lui-même, acquérir des connaissances et les partager avec la communauté... encore mieux s'ils contribuent avec des améliorations de code ! :)
La première version a été écrite en 2015 en C++11 pour construire un utilitaire en ligne de commande avec de nombreuses options, mais elle s'est vite avérée trop lourde et peu interactive. Cette version pouvait être compilée avec CMake après avoir installé les bibliothèques OpenCV, Boost et AlgLib. Ce premier prototype offrait environ 80 % des fonctionnalités prévues (voir ci-dessous pour la liste complète).
Tout en incluant également des algorithmes novateurs, la version 2017 a principalement ajouté une interface graphique multi-fenêtres basée sur Qt pour offrir une meilleure expérience utilisateur. Plusieurs analyses pouvaient être affichées à l'écran et un visionneur rapide avec zoom/défilement a été implémenté pour une navigation plus facile dans l'image. Ce projet pouvait être compilé avec Qt Creator avec Qt 5 et OpenCV 3 et couvrait environ 70 % des fonctionnalités prévues.
Avance rapide jusqu'en 2020, lorsque j'ai décidé de tout porter en Python (PySide2 + Matplotlib + OpenCV) pour un développement et un déploiement plus faciles. Bien que cette itération ne fasse que commencer et que je n'aie pas encore porté tout le code précédent sur la nouvelle plateforme, je pense que ce sera la forme "finale" du projet (tant que quelqu'un ne se porte pas volontaire pour développer une belle application web !).
Je suis heureux de partager mon code et d'entrer en contact avec toute personne intéressée pour l'améliorer ou le tester, mais veuillez garder à l'esprit que ce dépôt n'est pas destiné à distribuer un produit final, mon objectif est simplement de suivre publiquement le développement d'un outil pédagogique sans prétention, alors attendez-vous à des bugs, du code non poli et des fonctionnalités manquantes ! ;)
Cette liste contient les fonctions que la boîte à outils fournira (espérons-le) une fois le stade bêta atteint (REMARQUE : les fonctions affichées en italique dans le programme ne sont pas encore implémentées !).
Général : Image originale, Éditeur hexadécimal, Empreinte de fichier, Recherche similaire
Métadonnées : Vidage EXIF complet, Structure d'en-tête
Inspection : Loupe améliorante, Histogramme de canal, Comparaison de référence
Détail : Gradient de luminance, Filtre de bord d'écho, Seuil d'ondelettes, Séparation de fréquence
Couleurs : Graphiques RVB/TSV, Conversion d'espace, Projection ACP, Statistiques de pixels
Bruit : Séparation du signal, Écart min/max, Valeurs des plans de bits
JPEG : Estimation de qualité, Analyse de niveau d'erreur
Falsification : Amélioration du contraste, Falsification copier-coller, Assemblage composite, Filtrage médian
Clonez le dépôt actuel dans un dossier local et placez-vous dans ce dossier.
Sherloq utilise Python 3.11. La configuration recommandée utilise uv car il offre le même flux de travail sur Linux, macOS et Windows, peut installer Python si nécessaire et conserve l'environnement du projet dans le dossier local .venv.
Installez uv en suivant le guide d'installation officiel, puis créez l'environnement depuis le dossier racine de Sherloq :
$ uv venv --python 3.11
Le dépôt inclut également un fichier .python-version, de sorte que les futures commandes uv utiliseront Python 3.11 par défaut.
$ uv pip install -r gui/requirements.txt
Certains outils expérimentaux basés sur l'IA nécessitent des paquets supplémentaires. Installez-les uniquement si vous prévoyez d'utiliser ces outils :
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq peut être lancé depuis la racine du dépôt. Le package d'application résout les icônes, les modèles et les outils fournis via des chemins de projet centralisés.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
Vous pouvez également utiliser le lanceur de compatibilité situé à la racine du dépôt :
$ python sherloq.py
NOTE pour les utilisateurs Linux : si cette erreur s'affiche :
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.
Exécutez cette commande dans le terminal : sudo apt install -y libxcb-cursor-dev
L'application Python Qt réside désormais dans le package importable gui/sherloq_app :
main.py : point d'entrée de l'application Qt et fenêtre principale.core/ : assistants de traitement d'image partagés, comme les utilitaires JPEG et le chargement de fichiers.ui/ : widgets Qt réutilisables, visionneuses, tableaux et l'arborescence d'outils.tools/ : widgets d'analyse groupés par catégorie de boîte à outils (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py : accès centralisé aux icônes, modèles et assistants natifs fournis, de sorte que le code ne dépende plus du lancement depuis .Les gros actifs fournis et les composants de recherche tiers restent sous gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra et le gui/TruFor_main facultatif.
Voir docs/project-structure.md pour une carte orientée contributeur.
Lorsqu'une nouvelle version est publiée, mettez à jour la copie de travail locale avec Git ou en téléchargeant la dernière source, puis rafraîchissez l'environnement depuis le dossier racine de Sherloq :
$ uv pip install --upgrade -r gui/requirements.txt
Si vous avez installé les dépendances AI facultatives, rafraîchissez-les également :
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui