
Ein Open-Source-Toolset für die digitale Bildforensik
Eine Open-Source-Werkzeugsammlung für die forensische Bildanalyse
"Forensische Bildanalyse ist die Anwendung von Bildwissenschaft und Fachwissen zur Interpretation des Inhalts eines Bildes und/oder des Bildes selbst in rechtlichen Angelegenheiten. Zu den wichtigsten Unterdisziplinen der forensischen Bildanalyse mit Anwendungen für Strafverfolgungsbehörden gehören: Photogrammetrie, fotografischer Vergleich, Inhaltsanalyse und Bildauthentifizierung." (Scientific Working Group on Imaging Technologies)
Sherloq ist ein persönliches Forschungsprojekt zur Implementierung einer vollständig integrierten Umgebung für die digitale Bildforensik. Es ist nicht als automatisches Werkzeug gedacht, das entscheidet, ob ein Bild gefälscht ist oder nicht (dieses Werkzeug wird es wahrscheinlich nie geben...), sondern als Begleiter zum Experimentieren mit verschiedenen Algorithmen aus den neuesten Forschungspapieren und Workshops.
Während viele kommerzielle Lösungen hohe Verkaufspreise haben und oft nur Strafverfolgungsbehörden und Regierungsstellen vorbehalten sind, zielt diese Werkzeugsammlung darauf ab, sowohl ein erweiterbares Framework als auch ein Ausgangspunkt für alle zu sein, die sich für Experimente in dieser besonderen Anwendung der digitalen Signalverarbeitung interessieren.
Ich bin fest davon überzeugt, dass Security-by-Obscurity der falsche Weg ist, um irgendeine Art von forensischem Dienst anzubieten (z.B. "Mit dieser proprietären Software garantiere ich Ihnen, dass dieses Foto makellos ist... und Sie müssen mir vertrauen!"). Der Open-Source-Philosophie folgend, sollte jeder in der Lage sein, verschiedene Techniken selbst auszuprobieren, Wissen zu erlangen und es mit der Gemeinschaft zu teilen... noch besser, wenn sie mit Code-Verbesserungen beitragen! :)
Die erste Version wurde 2015 in C++11 geschrieben, um ein Kommandozeilenwerkzeug mit vielen Optionen zu bauen, aber bald erwies es sich als zu umständlich und nicht sehr interaktiv. Diese Version konnte mit CMake kompiliert werden, nachdem die Bibliotheken OpenCV, Boost und AlgLib installiert wurden. Dieser erste Proof of Concept bot etwa 80% der geplanten Funktionen (siehe unten für die vollständige Liste).
Die Version 2017 enthielt zwar auch neuartige Algorithmen, fügte aber hauptsächlich eine Qt-basierte Multi-Fenster-GUI hinzu, um eine bessere Benutzererfahrung zu bieten. Mehrere Analysen konnten auf dem Bildschirm angezeigt werden, und ein schneller Zoom/Scroll-Viewer wurde für eine einfachere Bildnavigation implementiert. Dieses Projekt konnte mit Qt Creator mit Qt 5 und OpenCV 3 kompiliert werden und deckte etwa 70% der geplanten Funktionen ab.
Schneller Vorlauf bis 2020, als ich mich entschied, alles nach Python (PySide2 + Matplotlib + OpenCV) zu portieren, um die Entwicklung und Bereitstellung zu erleichtern. Obwohl diese Iteration gerade erst begonnen hat und ich noch den gesamten vorherigen Code auf die neue Plattform portieren muss, denke ich, dass dies die endgültige "Form" des Projekts sein wird (solange sich nicht jemand freiwillig meldet, um eine schöne Webanwendung zu entwickeln!).
Ich freue mich, meinen Code zu teilen und mit jedem in Kontakt zu treten, der daran interessiert ist, ihn zu verbessern oder zu testen, aber bitte bedenken Sie, dass dieses Repository nicht dazu gedacht ist, ein endgültiges Produkt zu verteilen. Mein Ziel ist es lediglich, die Entwicklung eines bescheidenen Bildungswerkzeugs öffentlich zu verfolgen, also erwarten Sie Fehler, unpolierte Code und fehlende Funktionen! ;)
Diese Liste enthält die Funktionen, die das Toolkit (hoffentlich) bereitstellen wird, sobald die Beta-Phase erreicht ist (HINWEIS: im Programm kursiv dargestellte Funktionen sind noch nicht implementiert!).
Allgemein: Originalbild, Hex-Editor, Datei-Digest, Ähnlichkeitssuche
Metadaten: EXIF Vollständiger Dump, Header-Struktur
Inspektion: Verbessernde Lupe, Kanalhistogramm, Referenzvergleich
Detail: Luminanzgradient, Echo-Kantenfilter, Wavelet-Schwellwert, Frequenzaufteilung
Farben: RGB/HSV-Diagramme, Raumkonvertierung, PCA-Projektion, Pixelstatistiken
Rauschen: Signaltrennung, Min/Max-Abweichung, Bitebenenwerte
JPEG: Qualitätsschätzung, Fehlerpegelanalyse
Manipulation: Kontrastverstärkung, Copy/Move-Fälschung, Composite-Splicing, Medianfilterung
Klonen Sie das aktuelle Repository in einen lokalen Ordner und wechseln Sie mit dem Befehl cd in dieses Verzeichnis.
Sherloq verwendet Python 3.11. Die empfohlene Einrichtung verwendet uv, da es denselben Workflow auf Linux, macOS und Windows bietet, bei Bedarf Python installieren kann und die Projektumgebung im lokalen .venv-Ordner hält.
Installieren Sie uv gemäß der offiziellen Installationsanleitung, und erstellen Sie dann die Umgebung aus dem Sherloq-Hauptverzeichnis:
$ uv venv --python 3.11
Das Repository enthält auch eine .python-version-Datei, sodass zukünftige uv-Befehle standardmäßig Python 3.11 verwenden.
$ uv pip install -r gui/requirements.txt
Einige experimentelle KI-gestützte Werkzeuge benötigen zusätzliche Pakete. Installieren Sie diese nur, wenn Sie diese Werkzeuge verwenden möchten:
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq kann aus dem Hauptverzeichnis des Repositorys gestartet werden. Das Anwendungspaket löst Symbole, Modelle und gebündelte Werkzeuge über zentrale Projektpfade auf.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
Sie können auch den Kompatibilitätsstarter im Repository-Hauptverzeichnis verwenden:
$ python sherloq.py
HINWEIS für Linux-Benutzer: Wenn dieser Fehler angezeigt wird:
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.
Führen Sie diesen Befehl im Terminal aus: sudo apt install -y libxcb-cursor-dev
Die Python-Qt-Anwendung befindet sich jetzt im importierbaren Paket gui/sherloq_app:
main.py: Qt-Anwendungseinstiegspunkt und Hauptfenster.core/: gemeinsame Bildverarbeitungs-Helfer wie JPEG-Dienstprogramme und Dateiladen.ui/: wiederverwendbare Qt-Widgets, Viewer, Tabellen und der Werkzeugbaum.tools/: Analyse-Widgets, gruppiert nach Werkzeugkasten-Kategorie (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: zentraler Zugriff auf Symbole, Modelle und gebündelte native Helfer, sodass Code nicht mehr vom Start aus abhängt.Große gebündelte Ressourcen und Forschungskomponenten von Drittanbietern bleiben unter gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra und optionalem gui/TruFor_main.
Siehe docs/project-structure.md für eine mitwirkendenorientierte Übersicht.
Wenn eine neue Version veröffentlicht wird, aktualisieren Sie die lokale Arbeitskopie mit Git oder durch Herunterladen des neuesten Quellcodes, und aktualisieren Sie dann die Umgebung aus dem Sherloq-Hauptverzeichnis:
$ uv pip install --upgrade -r gui/requirements.txt
Wenn Sie die optionalen KI-Abhängigkeiten installiert haben, aktualisieren Sie auch diese:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui