
Автоматизированная платформа стегоанализа, которая обнаруживает скрытые данные в изображениях с помощью 16 параллельных анализаторов, визуализации битовых слоёв и встроенной вики для CTF-соревнований и криминалистических расследований.
# 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" />
</a>
</p>
Попробуйте сейчас: **https://www.aperisolve.com**
Поддержите 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="Поддержите Aperi'Solve на GitHub" />
</a>
---
Aperi'Solve — это открытая веб-платформа для стегоанализа, которая выполняет автоматический анализ изображений для обнаружения и извлечения скрытых данных с помощью распространённых инструментов и техник стеганографии.
## Ключевые возможности
- Визуализация каждого битового слоя (LSB и других слоёв) для каждого канала изображения (R/G/B/Alpha).
- Перераспределение цветов (случайные варианты палитры с 8 сгенерированными вариантами)
- Запускает 16 анализаторов параллельно и отображает их вывод, с бейджами
успеха/отсутствия результата для каждого инструмента и загрузкой извлечённых файлов в один клик:
- [binwalk](https://github.com/ReFirmLabs/binwalk) (встроенные архивы)
- [exiftool](https://exiftool.org/) (метаданные и геолокация)
- [file](https://manned.org/file.1) (определение MIME-типа и формата)
- [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html) (информация и свойства изображения)
- [foremost](https://foremost.sourceforge.net/) (извлечённые файлы)
- [jsteg](https://github.com/lukechampine/jsteg) (извлечение LSB из JPEG)
- [jpseek / jphide](https://github.com/h3xx/jphs) (извлечение стеганографии JPEG, с паролем)
- [openstego](https://www.openstego.com/) (извлечение с паролем)
- [outguess](https://www.rbcafe.com/software/outguess/) (извлечение с паролем, глубокий анализ)
- [pcrt](https://github.com/sherlly/PCRT) (проверка и восстановление PNG)
- [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) (извлечение текста/данных из LSB)
- **Встроенная вики** ([`/wiki`](https://www.aperisolve.com/wiki/)): руководство
по стеганографии в стиле HackTricks — методология триажа, шпаргалка с деревом
решений, страницы техник для каждого носителя (изображение, аудио, текст,
файлы) и руководство по каждому анализатору, написанные в Markdown.
- **Интернационализация**: интерфейс доступен на английском, французском,
испанском, немецком, русском, китайском и португальском языках по URL с
языковым префиксом (`/fr/`, `/es/`, …).
- Архитектура очереди задач для выноса тяжёлых/медленных анализаторов (Redis + фоновые воркеры).
- Кэш результатов по содержимому (content-addressed), HTTP-кэширование и ограничение частоты запросов для каждого эндпоинта.
- Результаты временно хранятся для последующего просмотра и загрузки, а затем автоматически удаляются по расписанию.
## Добавление анализатора
Добавление анализатора сводится к одному файлу: унаследуйте класс `SubprocessAnalyzer`, задайте несколько атрибутов класса (`name`, `has_archive`, `needs_password`, `deep_only`, `display_order`) и установите инструмент в `Dockerfile`. Список запуска воркером, список разрешённых для скачивания файлов и порядок отображения во фронтенде формируются автоматически. См. [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md).
## Быстрый старт (Docker)
Если вы хотите разместить собственную версию https://www.aperisolve.com/.
> Требуется: Docker + Docker Compose.
```bash
git clone https://github.com/Zeecka/AperiSolve.git
cd AperiSolve
cp .env.example .env
docker compose up -d
```
Затем откройте адрес: http://localhost:5000/
Реклама и аналитика отключены по умолчанию; каждая интеграция (`CUSTOM_EXTERNAL_SCRIPT`, `GOOGLE_ADS_TXT`, `SITE_BASE_URL`, Sentry) подключается только по желанию через переменные окружения, описанные в [`.env.example`](https://github.com/zeecka/aperisolve/blob/main/.env.example). Приложение никогда не внедряет рекламную разметку самостоятельно: `CUSTOM_EXTERNAL_SCRIPT` загружает скрипт AdSense, а размещение оставлено на Auto ads.
## Архитектура
Стек запускается как сервисы Docker Compose:
- **web** — Flask-приложение, обслуживаемое gunicorn (шаблоны Jinja + фронтенд на чистом JavaScript).
- **worker** — RQ-воркер, который запускает анализаторы для каждой отправки, распределяя по одному потоку на инструмент.
- **cron** — планировщик RQ cron, который выполняет очистку по сроку хранения вне пути обработки запросов.
- **initdb** — одноразовый сервис, который создаёт таблицы и предварительно заполняет базу восстановления контрольных сумм IHDR CRC.
- **postgres** — хранит метаданные изображений и статус отправок.
- **redis** — брокер RQ (БД 0) и хранилище ограничителя частоты запросов (БД 1).
- **rqdashboard** — мониторинг очередей, привязан к localhost:9181.
Такое разделение изолирует тяжёлые инструменты (binwalk, foremost, zsteg и т.д.) и не даёт блокировать web-воркер. Идентичные отправки дедуплицируются по хешу содержимого, а производные изображения кэшируются с долгоживущими неизменяемыми HTTP-заголовками, поэтому повторный трафик обходится дёшево.
## Документация
- [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md) — добавление нового анализатора.
- [docs/deploy.md](https://github.com/zeecka/aperisolve/blob/main/docs/deploy.md) — процесс продакшен-деплоя на основе тегов.
- [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md) — настройка разработки, тесты, страницы вики и переводы.
## Тестирование
```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
```
## Дорожная карта
См. [Issues](../../issues).
## Участие в разработке
См. [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md).
## Безопасность
> [!WARNING]
> Если вы обнаружили проблему безопасности, сообщите о ней лично владельцу репозитория, а не через публичный issue.
## Благодарности
Спасибо спонсорам:
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [Ed Guillory](#)
- [Silje Hollås](#)
Спасибо участникам:
- [Zeecka](https://www.zeecka.fr/) - **(автор)**
- [aradhyacp](https://github.com/aradhyacp)
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [abneeeees](https://github.com/abneeeees)
Спасибо сообществу открытого ПО:
[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), ...