
Um conjunto de ferramentas forenses de imagem digital de código aberto
Um conjunto de ferramentas forenses de imagem digital open source
"Análise Forense de Imagem é a aplicação da ciência da imagem e expertise no domínio para interpretar o conteúdo de uma imagem e/ou a própria imagem em questões legais. As principais subdisciplinas da Análise Forense de Imagem com aplicações na aplicação da lei incluem: Fotogrametria, Comparação Fotográfica, Análise de Conteúdo e Autenticação de Imagem." (Scientific Working Group on Imaging Technologies)
Sherloq é um projeto de pesquisa pessoal sobre implementação de um ambiente totalmente integrado para forense de imagem digital. Não é destinado como uma ferramenta automática que decide se uma imagem é falsificada ou não (essa ferramenta provavelmente nunca existirá...), mas como um companheiro na experimentação de vários algoritmos encontrados em artigos de pesquisa e workshops recentes.
Embora muitas soluções comerciais tenham preços de varejo altos e muitas vezes reservadas apenas para agências de aplicação da lei e governamentais, este conjunto de ferramentas visa ser um framework extensível e um ponto de partida para qualquer pessoa interessada em fazer experimentos nesta aplicação particular de processamento digital de sinais.
Acredito firmemente que segurança por obscuridade é a maneira errada de oferecer qualquer tipo de serviço forense (ou seja, "Usando este software proprietário, garanto que esta foto é pura... e você tem que confiar em mim!"). Seguindo a filosofia open-source, todos deveriam ser capazes de experimentar várias técnicas por conta própria, adquirir conhecimento e compartilhá-lo com a comunidade... ainda melhor se contribuírem com melhorias de código! :)
A primeira versão foi escrita em 2015 usando C++11 para construir um utilitário de linha de comando com muitas opções, mas logo se tornou muito pesado e pouco interativo. Essa versão podia ser compilada com CMake após instalar as bibliotecas OpenCV, Boost e AlgLib. Esta primeira prova de conceito oferecia cerca de 80% das funcionalidades planejadas (veja abaixo a lista completa).
Embora também incluísse novos algoritmos, a versão de 2017 adicionou principalmente uma GUI multi-janela baseada em Qt para fornecer uma melhor experiência do usuário. Múltiplas análises podiam ser exibidas na tela e um visualizador rápido de zoom/rolagem foi implementado para facilitar a navegação na imagem. Esse projeto podia ser compilado com Qt Creator com Qt 5 e OpenCV 3 e cobria cerca de 70% das funcionalidades planejadas.
Avançando para 2020, quando decidi portar tudo para Python (PySide2 + Matplotlib + OpenCV) para facilitar o desenvolvimento e a implantação. Embora esta iteração esteja apenas começando e eu ainda tenha que portar todo o código anterior para a nova plataforma, acredito que esta será a forma final do projeto (desde que alguém não se voluntarie para desenvolver uma bela aplicação web!).
Estou feliz em compartilhar meu código e entrar em contato com qualquer pessoa interessada em melhorá-lo ou testá-lo, mas lembre-se de que este repositório não se destina a distribuir um produto final, meu objetivo é apenas acompanhar publicamente o desenvolvimento de uma ferramenta educacional despretensiosa, então espere bugs, código não polido e funcionalidades faltando! ;)
Esta lista contém as funções que o kit de ferramentas (esperançosamente) fornecerá quando o estágio beta for alcançado (NOTA: funções exibidas em itálico no programa ainda não foram implementadas!).
Geral: Imagem Original, Editor Hex, Resumo do Arquivo, Pesquisa Similar
Metadados: Dump Completo EXIF, Estrutura do Cabeçalho
Inspeção: Lupa de Aprimoramento, Histograma de Canal, Comparação de Referência
Detalhes: Gradiente de Luminância, Filtro de Borda Eco, Limiar Wavelet, Divisão de Frequência
Cores: Gráficos RGB/HSV, Conversão de Espaço, Projeção PCA, Estatísticas de Pixel
Ruído: Separação de Sinal, Desvio Mín/Máx, Valores de Plano de Bits
JPEG: Estimativa de Qualidade, Análise de Nível de Erro
Falsificação: Aprimoramento de Contraste, Falsificação Copiar/Mover, Composição (Splicing), Filtragem Mediana
Clone o repositório atual para uma pasta local e mude o diretório atual para ele.
Sherloq usa Python 3.11. A configuração recomendada usa uv porque fornece o mesmo fluxo de trabalho no Linux, macOS e Windows, pode instalar Python quando necessário e mantém o ambiente do projeto na pasta local .venv.
Instale o uv seguindo o guia de instalação oficial, depois crie o ambiente a partir da pasta raiz do Sherloq:
$ uv venv --python 3.11
O repositório também inclui um arquivo .python-version, então os futuros comandos uv usarão Python 3.11 por padrão.
$ uv pip install -r gui/requirements.txt
Algumas ferramentas experimentais baseadas em IA precisam de pacotes adicionais. Instale-os apenas se planeja usar essas ferramentas:
$ uv pip install -r gui/requirements_ai_solutions.txt
O Sherloq pode ser iniciado a partir da raiz do repositório. O pacote da aplicação resolve ícones, modelos e ferramentas empacotadas através de caminhos centralizados do projeto.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
Você também pode usar o lançador de compatibilidade da raiz do repositório:
$ python sherloq.py
NOTA para usuários Linux: se este erro for exibido:
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Execute este comando no terminal: sudo apt install -y libxcb-cursor-dev
A aplicação Python Qt agora reside no pacote importável gui/sherloq_app:
main.py: ponto de entrada da aplicação Qt e janela principal.core/: auxiliares compartilhados de processamento de imagem, como utilitários JPEG e carregamento de arquivos.ui/: widgets Qt reutilizáveis, visualizadores, tabelas e a árvore de ferramentas.tools/: widgets de análise agrupados por categoria de caixa de ferramentas (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: acesso centralizado a ícones, modelos e auxiliares nativos empacotados, para que o código não dependa mais de ser iniciado a partir de .Ativos empacotados grandes e componentes de pesquisa de terceiros permanecem em gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra e o opcional gui/TruFor_main.
Veja docs/project-structure.md para um mapa orientado a contribuidores.
Quando uma nova versão for lançada, atualize a cópia de trabalho local com Git ou baixando o código-fonte mais recente, depois atualize o ambiente a partir da pasta raiz do Sherloq:
$ uv pip install --upgrade -r gui/requirements.txt
Se você instalou as dependências opcionais de IA, atualize-as também:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui