
Automatisierte Steganalyse-Plattform, die versteckte Daten in Bildern mithilfe von 16 parallelen Analysatoren, Bit-Ebenen-Visualisierung und einem In-App-Wiki für CTF- und forensische Untersuchungen erkennt.
# Aperi'Solve
[](https://aperisolve.com/)












[](https://inventory.raw.pm/tools.html#Aperi'Solve)
<p align="center">
<a href="https://www.aperisolve.com">
<img src="https://assets.kitploit.com/production/public/readmes/129/6ed4965b9771573193cfc55fe47f2e90294f70d4ee71c71cff064d5a6470f352.png" alt="Aperi'Solve-Screenshot" />
</a>
</p>
Jetzt ausprobieren: **https://www.aperisolve.com**
Unterstütze Aperi'Solve:
<a href="https://github.com/sponsors/Zeecka">
<img src="https://img.shields.io/badge/Sponsor-Zeecka-ea4aaa?logo=githubsponsors&logoColor=white&style=for-the-badge" alt="Sponsor Aperi'Solve on GitHub" />
</a>
---
Aperi'Solve ist eine Open-Source-Webplattform zur Steganalyse, die automatische Analysen von Bildern durchführt, um versteckte Daten mit gängigen Steganographie-Werkzeugen und -Techniken zu erkennen und zu extrahieren.
## Hauptfunktionen
- Jede Bitebene (LSB und andere Ebenen) pro Bildkanal (R/G/B/Alpha) visualisieren.
- Farb-Remapping (zufällige Paletten-Neuzuordnungen mit 8 generierten Varianten)
- Führt 16 Analyzer parallel aus und zeigt deren Ausgabe, mit Erfolgs-/Kein-Ergebnis-Abzeichen pro Werkzeug und Ein-Klick-Download extrahierter Dateien:
- [binwalk](https://github.com/ReFirmLabs/binwalk) (eingebettete Archive)
- [exiftool](https://exiftool.org/) (Metadaten und Geolokalisierung)
- [file](https://manned.org/file.1) (MIME-Typ- und Formaterkennung)
- [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html) (Bildinformationen und Eigenschaften)
- [foremost](https://foremost.sourceforge.net/) (durch Carving extrahierte Dateien)
- [jsteg](https://github.com/lukechampine/jsteg) (JPEG-LSB-Extraktion)
- [jpseek / jphide](https://github.com/h3xx/jphs) (JPEG-Steganographie-Extraktion, mit Passwort)
- [openstego](https://www.openstego.com/) (Extraktion mit Passwort)
- [outguess](https://www.rbcafe.com/software/outguess/) (Extraktion mit Passwort, Tiefenanalyse)
- [pcrt](https://github.com/sherlly/PCRT) (PNG-Prüfung und -Reparatur)
- [pngcheck](https://www.libpng.org/pub/png/apps/pngcheck.html)
- [steghide](https://steghide.sourceforge.net/) (Extraktion mit Passwort)
- [strings](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/strings.html)
- [zsteg](https://github.com/zed-0xff/zsteg) (LSB-Text-/Datenextraktion)
- **In-App-Wiki** ([`/wiki`](https://www.aperisolve.com/wiki/)): ein Steganographie-Handbuch im HackTricks-Stil
— eine Triage-Methodik, ein Entscheidungsbaum-Spickzettel,
Technikseiten pro Medium (Bild, Audio, Text, Dateien) und ein Leitfaden pro
Analyzer, alles als Markdown verfasst.
- **Internationalisierung**: UI verfügbar in Englisch, Französisch, Spanisch, Deutsch,
Russisch, Chinesisch und Portugiesisch unter sprachpräfixierten URLs (`/fr/`, `/es/`, …).
- Worker-Queue-Architektur zur Auslagerung schwerer/langsamer Analyzer (Redis + Hintergrund-Worker).
- Inhaltsadressierter Ergebnis-Cache, HTTP-Caching und Ratenbegrenzung pro Endpunkt.
- Ergebnisse werden vorübergehend gespeichert, um sie später anzusehen und herunterzuladen, und anschließend von einem geplanten Job automatisch bereinigt.
## Einen Analyzer hinzufügen
Einen Analyzer hinzuzufügen erfordert nur eine Datei: Leite von `SubprocessAnalyzer` ab, setze ein paar
Klassenattribute (`name`, `has_archive`, `needs_password`, `deep_only`,
`display_order`) und installiere das Werkzeug im `Dockerfile`. Die Worker-Ausführungsliste, die Download-Allowlist und die Frontend-Reihenfolge werden automatisch abgeleitet.
Siehe [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md).
## Schnellstart (Docker)
Falls du deine eigene Version von https://www.aperisolve.com/ hosten möchtest.
> Erforderlich: Docker + Docker Compose.
```bash
git clone https://github.com/Zeecka/AperiSolve.git
cd AperiSolve
cp .env.example .env
docker compose up -d
```
Rufe dann die URL auf: http://localhost:5000/
Werbung und Analysen sind standardmäßig deaktiviert; jede Integration (`CUSTOM_EXTERNAL_SCRIPT`, `GOOGLE_ADS_TXT`, `SITE_BASE_URL`, Sentry) ist über Umgebungsvariablen aktivierbar, die in [`.env.example`](https://github.com/zeecka/aperisolve/blob/main/.env.example) dokumentiert sind. Die App fügt selbst kein Werbe-Markup ein: `CUSTOM_EXTERNAL_SCRIPT` lädt das AdSense-Skript, und die Platzierung wird Auto-Anzeigen überlassen.
## Architektur
Der Stack läuft als Docker-Compose-Dienste:
- **web** — Flask-App, bereitgestellt von gunicorn (Jinja-Vorlagen + Vanilla-JS-Frontend).
- **worker** — ein RQ-Worker, der die Analyzer für jede Einreichung ausführt und auf einen Thread pro Werkzeug aufteilt.
- **cron** — ein RQ-Cron-Scheduler, der die Aufbewahrungsbereinigung außerhalb des Anforderungspfads ausführt.
- **initdb** — ein Einmal-Dienst, der die Tabellen erstellt und die IHDR-CRC-Wiederherstellungsdatenbank vorab befüllt.
- **postgres** — speichert Bildmetadaten und Einreichungsstatus.
- **redis** — RQ-Broker (DB 0) und Speicher für Ratenbegrenzung (DB 1).
- **rqdashboard** — Queue-Überwachung, gebunden an localhost:9181.
Diese Trennung hält schwere Werkzeuge (binwalk, foremost, zsteg, usw.) isoliert
und verhindert, dass der Web-Worker blockiert wird. Identische Einreichungen werden über
einen Inhalts-Hash dedupliziert, und abgeleitete Bilder werden mit langlebigen, unveränderlichen HTTP-
Headern gecacht, sodass wiederholter Datenverkehr günstig ist.
## Dokumentation
- [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md) — einen neuen Analyzer hinzufügen.
- [docs/deploy.md](https://github.com/zeecka/aperisolve/blob/main/docs/deploy.md) — der tag-basierte Produktions-Deploy-Ablauf.
- [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md) — Entwicklungs-Setup, Tests, Wiki-Seiten und Übersetzungen.
## Tests
```bash
uv sync --extra dev
uv run pytest -q # unit tests (no services needed)
# end-to-end analyzer tests through the running app:
docker compose -f compose.dev.yml up -d
uv run pytest tests/test_webapp_analyzers.py -v
```
## Roadmap
Siehe [Issues](../../issues).
## Mitwirken
Siehe [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md).
## Sicherheit
> [!WARNING]
> Wenn du ein Sicherheitsproblem entdeckst, melde es bitte privat an den Repository-Inhaber, anstatt ein öffentliches Issue zu eröffnen.
## Danksagungen
Dank an Spender:
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [Ed Guillory](#)
- [Silje Hollås](#)
Dank an Mitwirkende:
- [Zeecka](https://www.zeecka.fr/) - **(Autor)**
- [aradhyacp](https://github.com/aradhyacp)
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [abneeeees](https://github.com/abneeeees)
Dank an die Open-Source-Community:
[binwalk](https://github.com/ReFirmLabs/binwalk), [exiftool](https://exiftool.org/), [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html), [foremost](https://foremost.sourceforge.net/), [jsteg](https://github.com/lukechampine/jsteg), [jphide/jpseek](https://github.com/h3xx/jphs), [openstego](https://www.openstego.com/), [outguess](https://www.rbcafe.com/software/outguess/), [pcrt](https://github.com/sherlly/PCRT), [pngcheck](https://www.libpng.org/pub/png/apps/pngcheck.html), [steghide](https://steghide.sourceforge.net/), [strings](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/strings.html), [zsteg](https://github.com/zed-0xff/zsteg), ...