ContraLuz

Metodologia e limites

Como a análise funciona, o que cada teste verifica e o que fica fora do alcance da ferramenta.

Princípio

Um PDF guarda duas coisas diferentes: os caracteres do texto e as instruções para desenhar a página. Uma pessoa lê o desenho. Um programa, inclusive um sistema de inteligência artificial, lê os caracteres. Quando as duas leituras divergem, há conteúdo que só a máquina recebe.

O ContraLuz faz as duas leituras e compara. Para cada trecho da camada de texto, a ferramenta desenha a página e mede se aquele trecho deixou tinta no lugar em que deveria estar. Texto que existe no arquivo e não aparece no desenho é relatado, com a página, a causa técnica e o conteúdo.

A ferramenta relata fatos do arquivo. Ela não avalia intenção, autoria nem consequência jurídica.

Os dez testes

1. Texto sem tinta na página

A página é desenhada em alta resolução sobre fundo branco. Para cada trecho com três ou mais letras ou números, a ferramenta calcula a caixa que o trecho ocupa, identifica a cor predominante dentro dela e conta os pontos que se afastam dessa cor. Menos de 1,2% de pontos destoantes indica ausência de tinta. A causa é então classificada pela leitura das instruções de desenho:

  • cor do texto igual à do fundo, como branco sobre branco;
  • modo de renderização invisível, o modo 3 da especificação do PDF;
  • opacidade zero;
  • texto coberto por imagem ou forma desenhada depois dele. Aqui a ferramenta confere se a cor declarada do texto aparece em algum ponto da caixa.

2. Contraste quase nulo

Trechos em que há alguma diferença de cor em relação ao fundo, mas pequena demais para leitura. Exemplo: cinza muito claro sobre branco.

3. Fonte minúscula

Trechos com menos de 2 pontos de altura. Abaixo de 1 ponto o resultado é classificado como indício forte.

4. Texto fora da página

Trechos desenhados fora da área visível. A ferramenta compara todos os trechos presentes nas instruções de desenho com os que caem dentro da área exibida. Programas simples de extração de texto costumam ler esse conteúdo normalmente.

5. Caracteres Unicode invisíveis

Contagem de caracteres de largura zero, controles de direção de escrita, seletores de variação e caracteres do bloco de etiquetas (U+E0000 a U+E007F). Mensagens escritas com etiquetas são decodificadas e exibidas. Caracteres de inversão forçada de direção são relatados à parte.

6. Metadados

Leitura dos campos do dicionário de informações (título, autor, assunto, palavras-chave, campos personalizados) e do bloco XMP. Campos com linguagem dirigida a IA ou com tamanho incomum são relatados. Todos os campos ficam disponíveis para conferência no relatório.

7. Anotações e campos ocultos

Comentários, campos de formulário e outras anotações que tenham texto e estejam marcados como ocultos, sem exibição ou com área nula. Anotações visíveis são relatadas quando trazem linguagem dirigida a IA.

8. Camadas desligadas

Grupos de conteúdo opcional que nascem ocultos. O conteúdo de uma camada desligada continua no arquivo.

9. Anexos e scripts

Lista de arquivos embutidos e de ações em JavaScript. O conteúdo dos anexos não é analisado e nenhum script é executado.

10. Linguagem dirigida a IA

Busca, em português e inglês, por frases que se dirigem a um sistema automatizado ou tentam dar ordens a ele. Em texto oculto, basta um padrão. Em texto visível, o critério é mais exigente, porque uma petição pode citar ou discutir o assunto de forma legítima.

Graus do resultado

GrauQuando aparece
Indício forteTexto sem tinta, fonte abaixo de 1 ponto, mensagem em etiquetas Unicode, ou qualquer conteúdo oculto com linguagem dirigida a IA.
IndícioContraste quase nulo, texto fora da página, fonte entre 1 e 2 pontos, anotação oculta, camada desligada, inversão de direção.
AtençãoAnexos, scripts, poucos caracteres invisíveis, metadado longo.
InformativoCamada de texto invisível compatível com documento digitalizado com OCR.

Só os dois primeiros graus entram na contagem de indícios do topo do relatório.

Falsos positivos

Conteúdo oculto tem explicações comuns que não envolvem má conduta. Antes de qualquer conclusão, considere:

  • Documento digitalizado com OCR: a camada de texto pesquisável é invisível por construção. A ferramenta reconhece o padrão e o classifica como informativo, mas não confere se o texto corresponde à imagem.
  • Resíduo de editor ou de conversão: programas de edição e geradores de PDF deixam trechos brancos, espaços reservados e caracteres de largura zero.
  • Texto recortado: páginas cortadas a partir de um formato maior mantêm texto fora da área visível.
  • Marcas d'água, carimbos e tarjas: podem cobrir texto legítimo. Tarja preta sobre texto é exatamente um caso de texto coberto.
  • Recursos de acessibilidade: texto alternativo e marcações para leitores de tela.

Limites conhecidos

  • Somente PDF. Arquivos de Word, planilhas e imagens não são analisados.
  • Texto dentro de imagens não é lido. Um PDF formado só por imagens não tem camada de texto para comparar.
  • Texto oculto posicionado exatamente sobre texto visível pode passar, porque há tinta no local.
  • Texto coberto por imagem só é apontado quando a cor do texto é conhecida e difere claramente da imagem.
  • O conteúdo de anexos embutidos não é examinado.
  • PDF protegido por senha não é aberto.
  • Instruções escritas de forma visível e disfarçada no próprio texto dependem do teste de linguagem, que cobre padrões conhecidos em português e inglês.
  • Técnicas novas de ocultação podem não ser detectadas.

A ausência de indícios significa apenas que os testes desta versão não encontraram nada. Não é atestado de integridade do documento.

Funcionamento local

A análise é feita pelo navegador de quem usa, com a biblioteca pdf.js incluída no próprio site. O arquivo é lido na memória da aba e descartado quando a aba fecha ou outro arquivo é aberto.

  • Não há envio do arquivo, do texto extraído nem do resultado.
  • Não há cookies, cadastro, publicidade nem ferramentas de medição de audiência.
  • As páginas declaram uma política de segurança de conteúdo que impede conexões com outros servidores.
  • Para conferir: carregue a página, desligue a internet e faça a análise. Ela funciona do mesmo modo.

O relatório traz o SHA-256 do arquivo, calculado no dispositivo, para identificar com exatidão qual arquivo foi analisado.

Validação

Cada versão do motor é testada com um conjunto de documentos fictícios, um para cada técnica: texto branco, texto quase branco, fonte minúscula, texto fora da página, modo invisível, texto coberto por forma, texto coberto por imagem, comando repetido em rodapé, metadados, Unicode invisível, texto branco legítimo sobre faixa escura e página digitalizada com OCR. Os dois últimos existem para confirmar que a ferramenta não acusa o que é legítimo. Uma versão do motor só é publicada depois de passar por todo o conjunto. O arquivo peticao-exemplo.pdf, usado no botão de teste da página inicial, reúne quatro dessas técnicas.

Referências

  • CONSELHO NACIONAL DE JUSTIÇA. Resolução n. 615/2025. Diretrizes para o uso de inteligência artificial no Poder Judiciário.
  • SAGIN, Daniel. Quando a petição vira armadilha: o caso Parauapebas, o prompt injection e o que toda advogada e advogado precisa saber sobre IA no Judiciário. OAB Mato Grosso, 2026.
  • PhantomLint: Principled Detection of Hidden LLM Prompts in Structured Documents. arXiv:2508.17884, 2025.
  • ISO 32000. Document management: Portable document format.
  • OWASP. Top 10 for Large Language Model Applications: LLM01 Prompt Injection.
  • MOZILLA. PDF.js, biblioteca de leitura de PDF, licença Apache 2.0.