
Piattaforma automatizzata di steganalisi che rileva dati nascosti nelle immagini utilizzando 16 analizzatori paralleli, visualizzazione a livelli di bit e un wiki integrato per indagini CTF e forensi.
# 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>
Provalo ora: **https://www.aperisolve.com**
Supporta 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 è una piattaforma web di steganalisi open-source che esegue analisi automatizzate sulle immagini per rilevare ed estrarre dati nascosti utilizzando strumenti e tecniche comuni di steganografia.
## Caratteristiche principali
- Visualizza ogni layer di bit (LSB e altri layer) per canale dell'immagine (R/G/B/Alpha).
- Rimappatura dei colori (rimappature casuali della palette con 8 varianti generate)
- Esegue 16 analizzatori in parallelo e mostra il loro output, con badge per strumento di successo/nessun risultato e download con un clic dei file estratti:
- [binwalk](https://github.com/ReFirmLabs/binwalk) (archivi incorporati)
- [exiftool](https://exiftool.org/) (metadati e geolocalizzazione)
- [file](https://manned.org/file.1) (rilevamento del tipo MIME e formato)
- [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html) (informazioni e proprietà dell'immagine)
- [foremost](https://foremost.sourceforge.net/) (file recuperati)
- [jsteg](https://github.com/lukechampine/jsteg) (estrazione LSB JPEG)
- [jpseek / jphide](https://github.com/h3xx/jphs) (estrazione steganografia JPEG, con password)
- [openstego](https://www.openstego.com/) (estrazione con password)
- [outguess](https://www.rbcafe.com/software/outguess/) (estrazione con password, analisi approfondita)
- [pcrt](https://github.com/sherlly/PCRT) (controllo e riparazione PNG)
- [pngcheck](https://www.libpng.org/pub/png/apps/pngcheck.html)
- [steghide](https://steghide.sourceforge.net/) (estrazione con password)
- [strings](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/strings.html)
- [zsteg](https://github.com/zed-0xff/zsteg) (estrazione testo/dati LSB)
- **Wiki integrata** ([`/wiki`](https://www.aperisolve.com/wiki/)): un manuale di steganografia in stile HackTricks — una metodologia di triage, un cheat-sheet ad albero decisionale, pagine tecniche per supporto (immagine, audio, testo, file), e una guida per analizzatore, tutte scritte in Markdown.
- **Internazionalizzazione**: interfaccia disponibile in inglese, francese, spagnolo, tedesco, russo, cinese e portoghese sotto URL con prefisso lingua (`/fr/`, `/es/`, …).
- Architettura a coda di worker per scaricare gli analizzatori pesanti/lenti (Redis + worker in background).
- Cache dei risultati con indirizzamento al contenuto, caching HTTP e limitazione della velocità per endpoint.
- Risultati memorizzati temporaneamente per consultazione e download successivi, poi puliti automaticamente da un job schedulato.
## Aggiungere un analizzatore
Aggiungere un analizzatore è un singolo file: sottoclasse `SubprocessAnalyzer`, imposta alcuni attributi di classe (`name`, `has_archive`, `needs_password`, `deep_only`, `display_order`), e installa lo strumento nel `Dockerfile`. La lista di esecuzione del worker, la whitelist dei download e l'ordine nel frontend sono tutti derivati automaticamente. Vedi [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md).
## Avvio rapido (Docker)
Nel caso tu voglia ospitare la tua versione di https://www.aperisolve.com/.
> Richiesto: Docker + Docker Compose.
```bash
git clone https://github.com/Zeecka/AperiSolve.git
cd AperiSolve
cp .env.example .env
docker compose up -d
```
Poi visita l'URL: http://localhost:5000/
Pubblicità e analytics sono disabilitati per impostazione predefinita; ogni integrazione (`CUSTOM_EXTERNAL_SCRIPT`, `GOOGLE_ADS_TXT`, `SITE_BASE_URL`, Sentry) è opt-in tramite variabili d'ambiente documentate in [`.env.example`](https://github.com/zeecka/aperisolve/blob/main/.env.example). L'app non inietta mai markup pubblicitario da sola: `CUSTOM_EXTERNAL_SCRIPT` carica lo script AdSense e il posizionamento è lasciato agli annunci automatici.
## Architettura
Lo stack viene eseguito come servizi Docker Compose:
- **web** — app Flask servita da gunicorn (template Jinja + frontend vanilla JS).
- **worker** — un worker RQ che esegue gli analizzatori per ogni invio, distribuendo su un thread per strumento.
- **cron** — un job schedulato RQ che esegue la pulizia della retention fuori dal percorso delle richieste.
- **initdb** — un servizio one-shot che crea le tabelle e precompila il database di recupero IHDR CRC.
- **postgres** — memorizza metadati delle immagini e stato degli invii.
- **redis** — broker RQ (DB 0) e storage per limitatore di velocità (DB 1).
- **rqdashboard** — monitoraggio delle code, vincolato a localhost:9181.
Questa separazione mantiene gli strumenti pesanti (binwalk, foremost, zsteg, ecc.) isolati ed evita di bloccare il worker web. Invii identici sono deduplicati tramite un hash del contenuto, e le immagini derivate vengono memorizzate nella cache con intestazioni HTTP immutabili a lunga durata, quindi il traffico ripetuto è economico.
## Documentazione
- [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md) — aggiungere un nuovo analizzatore.
- [docs/deploy.md](https://github.com/zeecka/aperisolve/blob/main/docs/deploy.md) — il flusso di deploy in produzione basato su tag.
- [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md) — setup di sviluppo, test, pagine wiki e traduzioni.
## Test
```bash
uv sync --extra dev
uv run pytest -q # unit tests (no services needed)
# test end-to-end degli analizzatori attraverso l'app in esecuzione:
docker compose -f compose.dev.yml up -d
uv run pytest tests/test_webapp_analyzers.py -v
```
## Roadmap
Vedi [Issues](../../issues).
## Contribuire
Vedi [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md).
## Sicurezza
> [!WARNING]
> Se scopri un problema di sicurezza, segnalalo privatamente al proprietario del repository invece di aprire una issue pubblica.
## Crediti
Grazie ai donatori:
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [Ed Guillory](#)
- [Silje Hollås](#)
Grazie ai contributori:
- [Zeecka](https://www.zeecka.fr/) - **(autore)**
- [aradhyacp](https://github.com/aradhyacp)
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [abneeeees](https://github.com/abneeeees)
Grazie alla comunità open-source:
[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), ...