WhatsApp Forense v8.9.0 — Manual Técnico
Sistema de Captura Forense Digital

WhatsApp
Forense

Manual Técnico e Guia de Uso — Versão 8.9.0

Plataforma Google Chrome MV3
Desenvolvedor proflavio.com
Versão 8.9.0 — Março/2026

O que é o WhatsApp Forense

O WhatsApp Forense é uma extensão para Google Chrome que realiza a captura forense de conversas do WhatsApp Web, gerando um pacote de evidências digitais com cadeia de custódia criptográfica, adequado para juntada em processos judiciais.

O sistema foi desenvolvido com foco nas necessidades práticas do cotidiano forense brasileiro, para uso por profissionais jurídicos e periciais.

Base Legal e Normativa

Público-alvo

  • Oficiais de Justiça e servidores do Poder Judiciário
  • Advogados que precisam juntar provas digitais em processos
  • Delegados e investigadores de polícia civil
  • Peritos judiciais em informática forense
  • Departamentos jurídicos corporativos

Capacidades do Sistema

O WhatsApp Forense combina múltiplas camadas de proteção criptográfica para produzir evidências digitalmente irrefutáveis.

🔒

Hash SHA-256 por Mensagem

Cada mensagem recebe um hash SHA-256 individual calculado sobre conteúdo, direção, remetente e timestamp. Qualquer alteração produz hash diferente, tornando adulteração matematicamente detectável.

⛓️

Blockchain OpenTimestamps

O hash SHA-256 do pacote JSON é ancorado na rede Bitcoin via OpenTimestamps, criando prova matemática de existência do documento na data e hora do bloco minerado.

🕐

Âncora Temporal NTP Dual

Consulta dois fusos simultâneos no timeapi.io (UTC e UTC-3). Validação cruzada automática confirma diferença de exatamente 3 horas, provando autenticidade de ambas as respostas.

📸

Screenshots Encadeados

Percorre a conversa capturando screenshots progressivos com overlay de hash. Cada imagem referencia o hash da anterior — a cadeia é impossível de fabricar ou reordenar.

🌐

Captura do DOM (HTML Bruto)

Extrai o código-fonte HTML da área de conversa com hash SHA-256. Compara hash t=0 (antes do processamento) com hash final — prova que o DOM não foi editado durante a captura.

🎥

Log Fotográfico de Sessão

Captura a tela completa do Chrome a cada 2 segundos, incluindo a barra de endereço (web.whatsapp.com). Prova que a operação ocorreu no ambiente real — headless browsers não incluem a barra de endereço.

📱

JID Verificado via data-id

Extrai o número do interlocutor do atributo data-id das mensagens no DOM — gerado pelo servidor do WhatsApp, independente do nome de contato salvo na agenda.

🔗

UUID de Sessão Universal

Gera um UUID único que aparece em todos os artefatos (JSON, HTML, log fotográfico, NTP). Vinculação idêntica em contextos de execução separados é impossível de coordenar retroativamente.

🛡️

Guard de Conversa

Verifica antes de cada screenshot se a conversa do lote de mensagens corresponde à conversa visível no header do DOM. Screenshots de outras conversas são descartados automaticamente.

Pacote de Evidências

Cada operação de registro gera um conjunto de arquivos que compõem o pacote forense. Todos devem ser preservados juntos para verificação completa.

ArquivoConteúdo e Finalidade
*.json Pacote principal de evidências. Contém mensagens com hashes, metadados NTP, integridade DOM, session log (metadados), UUID de sessão e cadeia de custódia completa. É este arquivo que é registrado no blockchain.
*.ots Prova de timestamp OpenTimestamps. Contém o hash SHA-256 do JSON ancorado na rede Bitcoin. Necessário para verificação em opentimestamps.org.
*.html Relatório de cadeia de custódia em HTML. Inclui mensagens renderizadas, prints progressivos inline, dados NTP, DOM capturado e instruções de verificação.
*_DOM_CAPTURA.html Código-fonte bruto da área de conversa no momento da captura. Evidência do estado real da interface do WhatsApp Web.
*_print_NNNN.jpg Screenshots progressivos individuais com overlay de hash SHA-256 encadeado. Necessários para verificar a cadeia de prints referenciada no JSON.
*_manifesto.json Manifesto do sistema de screenshots. Lista todos os prints com hashes, encadeamento (previousHash) e as mensagens do lote que disparou cada captura.
wf_console_*.txt Log completo do console com SHA-256. Registra toda a operação em sequência temporal para auditoria independente.
⚠️
Atenção para o e-Proc: Os arquivos .json e .ots não são aceitos pelo sistema e-Proc. Estes arquivos devem ser mantidos à disposição do Juízo e das partes pelo prazo de 30 (trinta) dias a contar da juntada do HTML no processo, podendo ser solicitados para verificação de autenticidade.
ℹ️
Nota técnica (v8.9.0): A partir desta versão, as imagens (sessionLog.imageData e progressiveScreenshots.imageData) são removidas do JSON antes do cálculo do hash SHA-256 e do registro OTS. O JSON lean (~100 KB) é o arquivo verificável. Os prints são salvos como arquivos .jpg separados.

Como Utilizar

Instalação

  1. Descompacte o arquivo .zip da extensão em uma pasta permanente no computador
  2. Abra o Google Chrome e acesse chrome://extensions
  3. Ative o Modo do desenvolvedor (botão no canto superior direito)
  4. Clique em Carregar sem compactação e selecione a pasta descompactada
  5. A extensão aparecerá na barra do Chrome com o ícone de cadeado verde
🔒
Permissão necessária: O Chrome exibirá o aviso "Ler e alterar todos os seus dados em sites que você visita". Esta permissão é necessária para que captureVisibleTab funcione sem necessidade de clicar no ícone antes de cada captura. A extensão só realiza capturas quando a aba ativa é web.whatsapp.com.

Ativação da Licença

  1. Abra o WhatsApp Web no Chrome (web.whatsapp.com)
  2. Clique no ícone da extensão na barra do Chrome
  3. Insira a chave de licença no formato XXXX-XXXX-XXXX-XXXX
  4. Clique em Ativar Licença
  5. A gravação inicia automaticamente após a ativação
🔄
Se aparecer o erro "Recarregue a aba do WhatsApp Web (F5)": isso ocorre quando a extensão foi reinstalada sem fechar a aba. O sistema tentará reinjetar automaticamente o script. Se persistir, pressione F5 na aba do WhatsApp.

Pipeline Completo ao Clicar em REGISTRAR CONVERSA

O botão ✅ REGISTRAR CONVERSA executa automaticamente o seguinte pipeline:

01
📍
Ancoragem da conversa Captura o identificador da conversa no momento exato do clique, antes de qualquer operação assíncrona
02
🕐
Consulta NTP dual Consulta timeapi.io em UTC e UTC-3 com validação cruzada automática
03
🎥
Inicia log fotográfico Captura de tela a cada 2 segundos durante toda a operação
04
📜
Scroll completo e captura de mensagens Percorre a conversa do topo ao fim, capturando todas as mensagens visíveis
05
📸
Screenshots progressivos encadeados Prints com hash SHA-256, overlay de metadados e encadeamento criptográfico
06
🌐
Captura do DOM Extrai código-fonte HTML bruto com hash SHA-256 e comparação t=0 vs t=final
07
⏹️
Encerra log fotográfico Coleta todos os frames com hashes encadeados
08
⛓️
Registro blockchain + downloads Submete hash ao OpenTimestamps e gera todos os arquivos em lote único

Como Verificar a Integridade

Verificação do Registro Blockchain

  1. Acesse opentimestamps.org
  2. Clique em STAMP & VERIFY
  3. Arraste o arquivo *.ots para a área indicada
  4. Arraste o arquivo *.json correspondente
  5. O sistema verificará diretamente na rede Bitcoin, sem intermediários

Quando confirmado, o site exibirá a data e hora do bloco Bitcoin — esta é a âncora temporal irrefutável.

Verificação Local do Hash do JSON

SistemaComando
Windows (PowerShell)Get-FileHash -Algorithm SHA256 "arquivo.json"
Windows (CMD)certutil -hashfile arquivo.json SHA256
Linux / macOSsha256sum arquivo.json
Onlineemn178.github.io/online-tools/sha256_checksum.html

Verificação da Cadeia de Screenshots

  1. Recalcule o SHA-256 de cada arquivo _print_NNNN.jpg
  2. Compare com o campo screenshotHash do print correspondente no manifesto
  3. Verifique se previousScreenshotHash do print N+1 corresponde ao screenshotHash do print N

Limitações Impostas pelo WhatsApp

As limitações abaixo não são deficiências do sistema — são restrições da plataforma WhatsApp Web que afetam qualquer sistema de captura forense da plataforma.

Sistema @lid — Identificação Indireta

Desde 2024, o WhatsApp adotou o sistema Layer ID (@lid) para identificação de contas. O atributo data-id das mensagens passa a conter um identificador interno, não o número de telefone real.

Tipo de contaIdentificação disponível
Contatos pessoais (@c.us)Número de telefone completo — verificado diretamente no DOM
Contas comerciais / recentes (@lid)Identificador interno (LID) — número não disponível no DOM
Grupos (@g.us)ID do grupo — membros identificados pelos seus JIDs individuais
⚖️
Para fins judiciais: O Layer ID é um identificador permanente e único por conta. Em caso de ordem judicial fundamentada no Marco Civil da Internet (Lei 12.965/2014, art. 10), o WhatsApp/Meta pode associar o LID ao número de telefone real. O LID capturado no pacote é suficiente para embasar essa requisição.

Criptografia de Ponta a Ponta

O WhatsApp utiliza criptografia de ponta a ponta. O sistema captura as mensagens já descriptografadas e renderizadas no navegador — único ponto onde o conteúdo está acessível. Não é possível capturar mensagens que nunca foram recebidas no dispositivo em uso.

Mensagens Apagadas

O sistema preserva mensagens apagadas apenas se a gravação estava ativa no momento exato em que a mensagem era visível. Mensagens apagadas antes do início da gravação não são recuperáveis.

Histórico Limitado ao Dispositivo

O WhatsApp Web exibe apenas o histórico disponível no smartphone vinculado. Mensagens excluídas do dispositivo ou não sincronizadas não estarão disponíveis para captura.

Rate Limit de Capturas de Tela

O Chrome impõe limite de 2 capturas por segundo por extensão. O sistema gerencia automaticamente com espaçamento mínimo de 600ms e retry automático para erros transitórios.

Atualizações da Interface do WhatsApp

Mudanças nos seletores CSS ou estrutura do DOM pelo WhatsApp podem afetar temporariamente a identificação de elementos. O sistema possui múltiplos seletores alternativos (fallbacks) para minimizar este impacto.

Como Refutar Alegações de Manipulação

Esta seção destina-se a peritos, advogados e magistrados que precisem verificar a autenticidade do pacote ou responder a questionamentos técnicos da parte contrária.

"O DOM foi editado antes do cálculo do hash"

O hash SHA-256 do código-fonte da página é calculado em t=0, no primeiro milissegundo da sessão, antes de qualquer processamento. O campo domIntegrity.hashBefore registra este hash. Para que a alegação fosse verdadeira, a edição teria ocorrido em menos de 1ms do clique.

"O timestamp foi fabricado após os fatos"

O sistema consultou o servidor timeapi.io em dois fusos simultâneos (Brasília UTC-3 e UTC) com latência registrada em milissegundos. A validação cruzada confirma diferença de exatamente 3 horas — prova de autenticidade de ambos os resultados. O registro blockchain confirma o momento independentemente. Para contestar, seria necessário provar que o servidor retornou dados falsos em dois fusos coordenados simultaneamente com a rede Bitcoin.

"As imagens do log fotográfico foram geradas artificialmente"

As imagens foram capturadas pela API nativa chrome.tabs.captureVisibleTab do Chrome, que fotografa a aba completa incluindo a barra de endereço mostrando web.whatsapp.com. Imagens geradas por canvas, puppeteer ou renderizadores headless não incluem a barra de endereço. O UUID de sessão aparece em todos os frames e no manifesto — vinculação impossível de coordenar em artefatos separados.

"O scroll pode ter pulado mensagens"

O sistema verifica continuidade temporal das mensagens e documenta qualquer intervalo longo na seção domIntegrity.continuity. O log fotográfico mostra o scroll completo em sequência — qualquer lacuna seria visível nas imagens. Intervalos são esperados em conversas normais e não indicam supressão.

"A captura foi feita de outra conversa"

O identificador da conversa é capturado no momento exato do clique em REGISTRAR, antes de qualquer operação assíncrona. O sistema verifica durante toda a captura se a conversa visível no DOM corresponde à selecionada. Screenshots de outras conversas são descartados automaticamente — este evento é registrado no log de console.

"Como verificar o registro blockchain"

Acesse opentimestamps.org → Verify → carregue o arquivo proof.ots incluído no pacote. O sistema verificará diretamente na blockchain Bitcoin, sem intermediários, confirmando que o hash existia na data registrada neste documento.

Arquitetura e Protocolos

Algoritmos e Serviços

ComponenteEspecificação
Hash de mensagensSHA-256 via Web Crypto API
Hash do pacote JSONSHA-256 calculado após strip de imagens (JSON lean)
Hash de screenshotsSHA-256 encadeado (previousHash → hash → próximo frame)
Registro blockchainOpenTimestamps v1 — calendário Bitcoin
Âncora temporaltimeapi.io — UTC e UTC-3 com validação cruzada
Armazenamento temporárioIndexedDB (screenshots) + chrome.storage.local (mensagens)

Estrutura do Pacote JSON

Campo raizConteúdo
packageInfoIdentificadores da sessão, versão, telefone, data de geração
messages[]Array de mensagens com hash individual, texto, direção, timestamp
chainOfCustody[]Blocos da cadeia de custódia com tipo, timestamp e hash de dados
rootHashHash SHA-256 da cadeia de custódia completa
sessionUUIDUUID único gerado no clique — presente em todos os artefatos
sessionLog[]Frames do log fotográfico — metadados e hashes (sem imageData)
progressiveScreenshots[]Metadados dos prints progressivos — hashes encadeados (sem imageData)
domCaptureHash, timestamp e código HTML do DOM capturado
domIntegrityHashes DOM t=0 e t=final com flag unchanged
ntpDataResultados NTP dual com validação cruzada e hash do conjunto
verifiedPhoneJID verificado via data-id DOM com amostra de evidências
captureEnvironmentUser agent, plataforma, idioma, fuso horário, resolução de tela

Requisitos de Sistema

RequisitoEspecificação
NavegadorGoogle Chrome versão 109 ou superior
Sistema OperacionalWindows 10/11, macOS 12+, ou Linux com Chrome
InternetConexão ativa (NTP, OpenTimestamps e validação de licença)
Permissões ChromeactiveTab, storage, downloads, tabs, scripting, <all_urls>
WhatsApp WebConta ativa em web.whatsapp.com com smartphone vinculado

FAQ

O sistema altera o conteúdo das mensagens?
Não. O sistema apenas lê o DOM já renderizado pelo WhatsApp Web. Não há nenhuma escrita, edição ou modificação nas mensagens. O hash SHA-256 calculado sobre o conteúdo capturado garante matematicamente que qualquer adulteração posterior seria detectada.
Por que o arquivo .ots está em estado "pendente"?
O hash foi submetido ao calendário OpenTimestamps, mas ainda não foi incluído em um bloco Bitcoin minerado — processo que leva entre 10 minutos e 2 horas. Recomenda-se aguardar a confirmação antes de juntar o documento em processo judicial. O arquivo .ots pendente já prova a submissão; a confirmação no bloco é o que torna o registro juridicamente inexpugnável.
O número do interlocutor não foi identificado. Por quê?
Quando o contato utiliza o sistema @lid do WhatsApp (introduzido em 2024), o número real não está disponível no DOM — apenas o identificador interno (LID). O LID é permanente e rastreável pelo WhatsApp/Meta mediante ordem judicial. Veja a seção de Limitações para detalhes.
Posso usar a extensão em modo anônimo do Chrome?
Não. Extensões em modo anônimo exigem habilitação manual específica e o sistema de licenças pode não funcionar corretamente. Use sempre em janela normal do Chrome.
A extensão funciona sem conexão com a internet?
Parcialmente. A captura de mensagens e screenshots funciona offline, mas o registro NTP, o registro blockchain (OpenTimestamps) e a validação de licença exigem conexão ativa. Recomenda-se fortemente capturar com internet disponível para garantir o pacote forense completo.
Como verificar que os prints são da conversa correta?
O sistema registra no manifesto o conversationName de cada batch de screenshots, capturado no header visível do DOM no momento da captura. O log de console registra qualquer batch que foi descartado por inconsistência de conversa. O UUID de sessão vincula todos os artefatos ao mesmo momento de captura.

Histórico de Versões

✦ v8.9.0 — Versão Atual
  • Versão unificada em todos os arquivos (manifest, background, popup, content)
  • Guard de conversa no processBatch() — elimina screenshots de conversas erradas
  • Debounce de 300ms no MutationObserver — elimina observer flood no carregamento
  • Strip de imageData do JSON antes do cálculo de hash (103 KB vs 3 MB)
  • captureVisibleTabSafe() com rate limiter de 600ms e retry para erros transitórios
  • <all_urls> no manifest — captura autônoma sem gesto do usuário
  • clearAll() garantido por sessão dentro de startRecording()
  • UUID de sessão em todos os artefatos — vinculação criptográfica
  • NTP dual com validação cruzada automática (Δ=3h esperado)
  • JID verificado via data-id DOM com amostra de evidências
  • Session log fotográfico a cada 2 segundos com encadeamento de hashes
  • Telefone da conversa ancorado no momento do clique (não após o scroll)
  • Remoção de chamada duplicada a captureFullConversation()
  • Auto-reinjeção do content script via scripting API em caso de erro de conexão
  • Fix do loop progressivo em conversas de tela única
  • Heurística temPrintsProgressivos corrigida

🔐
Mais informações e licenciamento: proflavio.com