
Plataforma automatizada de esteganálise que detecta dados ocultos em imagens usando 16 analisadores paralelos, visualização de camadas de bits e uma wiki integrada para investigações de CTF e forense digital.
# 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 tela do Aperi'Solve" />
</a>
</p>
Experimente agora: **https://www.aperisolve.com**
Apoie o 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 é uma plataforma web de esteganálise de código aberto que realiza análise automatizada de imagens para detectar e extrair dados ocultos usando ferramentas e técnicas comuns de esteganografia.
## Principais recursos
- Visualize cada camada de bits (LSB e outras camadas) por canal de imagem (R/G/B/Alpha).
- Remapeamento de cores (remapeamentos aleatórios de paleta com 8 variantes geradas)
- Executa 16 analisadores em paralelo e exibe suas saídas, com badges de
sucesso/sem resultado por ferramenta e download dos arquivos extraídos com um clique:
- [binwalk](https://github.com/ReFirmLabs/binwalk) (arquivos embutidos)
- [exiftool](https://exiftool.org/) (metadados e geolocalização)
- [file](https://manned.org/file.1) (detecção de tipo MIME e formato)
- [GraphicsMagick identify](http://www.graphicsmagick.org/identify.html) (informações e propriedades da imagem)
- [foremost](https://foremost.sourceforge.net/) (arquivos recuperados por carving)
- [jsteg](https://github.com/lukechampine/jsteg) (extração de LSB de JPEG)
- [jpseek / jphide](https://github.com/h3xx/jphs) (extração de esteganografia JPEG, com senha)
- [openstego](https://www.openstego.com/) (extração com senha)
- [outguess](https://www.rbcafe.com/software/outguess/) (extração com senha, análise profunda)
- [pcrt](https://github.com/sherlly/PCRT) (verificação e reparo de PNG)
- [pngcheck](https://www.libpng.org/pub/png/apps/pngcheck.html)
- [steghide](https://steghide.sourceforge.net/) (extração com senha)
- [strings](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/strings.html)
- [zsteg](https://github.com/zed-0xff/zsteg) (extração de texto/dados LSB)
- **Wiki integrada** ([`/wiki`](https://www.aperisolve.com/wiki/)): um manual de
esteganografia no estilo HackTricks — uma metodologia de triagem, uma folha de
consulta com árvore de decisão, páginas de técnicas por meio (imagem, áudio,
texto, arquivos) e um guia por analisador, tudo escrito em Markdown.
- **Internacionalização**: interface disponível em inglês, francês, espanhol, alemão,
russo, chinês e português em URLs com prefixo de idioma (`/fr/`, `/es/`, …).
- Arquitetura de fila de trabalho para descarregar analisadores pesados/lentos (Redis + workers em segundo plano).
- Cache de resultados endereçado por conteúdo, cache HTTP e limitação de taxa por endpoint.
- Os resultados são armazenados temporariamente para consulta e download posteriores e, em seguida,
removidos automaticamente por uma tarefa agendada.
## Adicionando um analisador
Adicionar um analisador é um único arquivo: crie uma subclasse de `SubprocessAnalyzer`, defina alguns
atributos de classe (`name`, `has_archive`, `needs_password`, `deep_only`,
`display_order`) e instale a ferramenta no `Dockerfile`. A lista de execução
do worker, a lista de permissões de download e a ordem no frontend são todas
derivadas automaticamente. Veja [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md).
## Início rápido (Docker)
Caso queira hospedar sua própria versão de https://www.aperisolve.com/.
> Necessário: Docker + Docker Compose.
```bash
git clone https://github.com/Zeecka/AperiSolve.git
cd AperiSolve
cp .env.example .env
docker compose up -d
```
Em seguida, acesse a URL: http://localhost:5000/
Anúncios e analytics estão desativados por padrão; todas as integrações
(`CUSTOM_EXTERNAL_SCRIPT`, `GOOGLE_ADS_TXT`, `SITE_BASE_URL`, Sentry) são
opt-in por meio de variáveis de ambiente documentadas em [`.env.example`](https://github.com/zeecka/aperisolve/blob/main/.env.example).
O aplicativo nunca injeta marcação de anúncios por conta própria: `CUSTOM_EXTERNAL_SCRIPT` carrega o
script do AdSense e o posicionamento fica a cargo dos Auto ads.
## Arquitetura
A stack é executada como serviços do Docker Compose:
- **web** — aplicativo Flask servido por gunicorn (templates Jinja + frontend em JavaScript puro).
- **worker** — um worker RQ que executa os analisadores para cada envio,
distribuindo para uma thread por ferramenta.
- **cron** — um agendador cron RQ que executa a limpeza de retenção fora do
caminho de requisição.
- **initdb** — um serviço de execução única que cria as tabelas e pré-popula o
banco de dados de recuperação de CRC do IHDR.
- **postgres** — armazena metadados das imagens e o status dos envios.
- **redis** — broker RQ (DB 0) e armazenamento do limitador de taxa (DB 1).
- **rqdashboard** — monitoramento de filas, vinculado a localhost:9181.
Essa separação mantém as ferramentas pesadas (binwalk, foremost, zsteg, etc.) isoladas
e evita bloquear o worker web. Envios idênticos são deduplicados por
um hash de conteúdo, e as imagens derivadas são armazenadas em cache com cabeçalhos HTTP imutáveis de
longa duração, então o tráfego repetido é barato.
## Documentação
- [docs/adding-analyzer.md](https://github.com/zeecka/aperisolve/blob/main/docs/adding-analyzer.md) — adicionar um novo analisador.
- [docs/deploy.md](https://github.com/zeecka/aperisolve/blob/main/docs/deploy.md) — o fluxo de deploy em produção orientado por tags.
- [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md) — configuração de desenvolvimento, testes, páginas da wiki e traduções.
## Testes
```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
Veja [Issues](../../issues).
## Contribuindo
Veja [CONTRIBUTING.md](https://github.com/zeecka/aperisolve/blob/main/CONTRIBUTING.md).
## Segurança
> [!WARNING]
> Se você descobrir um problema de segurança, reporte-o em particular ao proprietário do repositório em vez de abrir uma issue pública.
## Créditos
Agradecimentos aos doadores:
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [Ed Guillory](#)
- [Silje Hollås](#)
Agradecimentos aos contribuidores:
- [Zeecka](https://www.zeecka.fr/) - **(autor)**
- [aradhyacp](https://github.com/aradhyacp)
- [Philip Zimmermann](https://github.com/Philip-Zimmermann)
- [abneeeees](https://github.com/abneeeees)
Agradecimentos à comunidade de código aberto:
[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), ...