
Plataforma automatizada de estegoanálisis que detecta datos ocultos en imágenes mediante 16 analizadores paralelos, visualización de capas de bits y una wiki integrada para investigaciones CTF y forenses.
# 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="Captura de pantalla de Aperi'Solve" />
</a>
</p>
Pruébalo ahora: **https://www.aperisolve.com**
Apoya a 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="Patrocina Aperi'Solve en GitHub" />
</a>
---
Aperi'Solve es una plataforma web de esteganálisis de código abierto que realiza análisis automatizados sobre imágenes para detectar y extraer datos ocultos mediante herramientas y técnicas de esteganografía comunes.
## Características principales
- Visualiza cada capa de bits (LSB y otras capas) por canal de imagen (R/G/B/Alpha).
- Remapeo de color (remapeos aleatorios de paleta con 8 variantes generadas).
- Ejecuta 16 analizadores en paralelo y muestra su salida, con insignias de
éxito/sin resultado por herramienta y descarga de archivos extraídos con un solo clic:
- [binwalk](https://github.com/ReFirmLabs/binwalk) (archivos embebidos)
- [exiftool](https://exiftool.org/) (metadatos y geolocalización)
- [file](https://manned.org/file.1) (detección de tipo MIME y formato)
- [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html) (información y propiedades de imagen)
- [foremost](https://foremost.sourceforge.net/) (archivos tallados)
- [jsteg](https://github.com/lukechampine/jsteg) (extracción LSB en JPEG)
- [jpseek / jphide](https://github.com/h3xx/jphs) (extracción de esteganografía JPEG, con contraseña)
- [openstego](https://www.openstego.com/) (extracción con contraseña)
- [outguess](https://www.rbcafe.com/software/outguess/) (extracción con contraseña, análisis profundo)
- [pcrt](https://github.com/sherlly/PCRT) (verificación y reparación de PNG)
- [pngcheck](https://www.libpng.org/pub/png/apps/pngcheck.html)
- [steghide](https://steghide.sourceforge.net/) (extracción con contraseña)
- [strings](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/strings.html)
- [zsteg](https://github.com/zed-0xff/zsteg) (extracción de texto/datos LSB)
- **Wiki integrada en la aplicación** ([`/wiki`](https://www.aperisolve.com/wiki/)): un manual de
esteganografía estilo HackTricks — una metodología de triaje, una chuleta de árbol de decisión,
páginas de técnicas por medio (imagen, audio, texto, archivos) y una guía por
analizador, todo escrito en Markdown.
- **Internacionalización**: interfaz disponible en inglés, francés, español, alemán,
ruso, chino y portugués bajo URLs con prefijo de idioma (`/fr/`, `/es/`, …).
- Arquitectura de cola de trabajadores para descargar analizadores pesados/lentos (Redis + trabajadores en segundo plano).
- Caché de resultados direccionada por contenido, caché HTTP y limitación de tasa por endpoint.
- Los resultados se almacenan temporalmente para su posterior navegación y descarga, y luego se limpian
automáticamente mediante un trabajo programado.
## Añadir un analizador
Añadir un analizador es un único archivo: subclase `SubprocessAnalyzer`, define algunos
atributos de clase (`name`, `has_archive`, `needs_password`, `deep_only`,
`display_order`) e instala la herramienta en el `Dockerfile`. La lista de
ejecución del trabajador, la lista blanca de descargas y el orden en el frontend se derivan
automáticamente. Consulta [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md).
## Inicio rápido (Docker)
Por si quieres alojar tu propia versión de https://www.aperisolve.com/.
> Requisito: Docker + Docker Compose.
```bash
git clone https://github.com/Zeecka/AperiSolve.git
cd AperiSolve
cp .env.example .env
docker compose up -d
```
Luego visita la url: http://localhost:5000/
Los anuncios y la analítica están desactivados por defecto; cada integración
(`CUSTOM_EXTERNAL_SCRIPT`, `GOOGLE_ADS_TXT`, `SITE_BASE_URL`, Sentry) es
opt-in mediante variables de entorno documentadas en [`.env.example`](https://github.com/zeecka/aperisolve/blob/main/.env.example).
La aplicación nunca inyecta marcado publicitario por sí misma: `CUSTOM_EXTERNAL_SCRIPT` carga el
script de AdSense y la colocación se deja a los anuncios automáticos.
## Arquitectura
La pila se ejecuta como servicios de Docker Compose:
- **web** — aplicación Flask servida por gunicorn (plantillas Jinja + frontend JavaScript vainilla).
- **worker** — un trabajador RQ que ejecuta los analizadores para cada envío,
distribuyendo el trabajo a un hilo por herramienta.
- **cron** — un programador de cron RQ que ejecuta la limpieza de retención fuera de la
ruta de solicitudes.
- **initdb** — un servicio de una sola ejecución que crea las tablas y precarga la
base de datos de recuperación de CRC IHDR.
- **postgres** — almacena los metadatos de las imágenes y el estado de los envíos.
- **redis** — broker RQ (DB 0) y almacenamiento del limitador de tasa (DB 1).
- **rqdashboard** — monitoreo de colas, vinculado a localhost:9181.
Esta separación mantiene aisladas las herramientas pesadas (binwalk, foremost, zsteg, etc.)
y evita bloquear el trabajador web. Los envíos idénticos se deduplican mediante
un hash de contenido, y las imágenes derivadas se cachean con cabeceras HTTP inmutables de
larga duración, por lo que el tráfico repetido es barato.
## Documentación
- [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md) — añade un nuevo analizador.
- [docs/deploy.md](https://github.com/zeecka/aperisolve/blob/main/docs/deploy.md) — el flujo de despliegue de producción basado en tags.
- [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md) — configuración de desarrollo, pruebas, páginas wiki y traducciones.
## Pruebas
```bash
uv sync --extra dev
uv run pytest -q # pruebas unitarias (no se necesitan servicios)
# pruebas end-to-end de analizadores a través de la aplicación en ejecución:
docker compose -f compose.dev.yml up -d
uv run pytest tests/test_webapp_analyzers.py -v
```
## Hoja de ruta
Consulta [Issues](../../issues).
## Contribuciones
Consulta [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md).
## Seguridad
> [!WARNING]
> Si descubres un problema de seguridad, repórtalo de forma privada al propietario del repositorio en lugar de abrir un issue público.
## Créditos
Gracias a los donantes:
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [Ed Guillory](#)
- [Silje Hollås](#)
Gracias a los contribuyentes:
- [Zeecka](https://www.zeecka.fr/) - **(autor)**
- [aradhyacp](https://github.com/aradhyacp)
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [abneeeees](https://github.com/abneeeees)
Gracias a la comunidad de código abierto:
[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), ...