O que um PDF registra sobre de onde veio

Cinco famílias de sinais leem o que um PDF diz sobre a própria história: quantas vezes foi salvo, qual ferramenta o escreveu e se seus dois registros de si mesmo concordam.

Um PDF carrega a própria papelada — uma cadeia de revisões, dois conjuntos de metadados, uma string de produtor e um par de identificadores. Estas cinco famílias leem essa papelada e a conferem contra ela mesma. Nenhuma delas olha para a página; elas perguntam o que o arquivo diz sobre como veio a existir, e se essas afirmações são coerentes.

Parte do guia de sinais — cinco das dezoito famílias que o motor reporta.

Sinais, não veredictos. Todo achado aqui é um fato estrutural sobre um arquivo. "Este documento foi modificado depois de gerado" é verdadeiro ou falso sobre os bytes; "este documento é fraudulento" é um julgamento sobre uma pessoa, e o Tamperlens não o faz. A API não retorna nenhum campo de veredicto booleano, por construção.

incremental-updates

média alta
O que detecta
Que o arquivo contém mais de uma revisão — bytes foram anexados depois que o documento foi escrito pela primeira vez e terminado com %%EOF. O mecanismo de atualização incremental do PDF anexa novos objetos, uma nova seção de referências cruzadas e um novo trailer em vez de reescrever o arquivo, de modo que estados anteriores do documento continuam fisicamente presentes. O parser percorre a cadeia /Prev de trás para frente e determina quais números de objeto cada revisão introduziu e quais ela sobrescreveu.
A escalada depende do que mudou, não de quantas vezes. Se uma revisão posterior substitui um número de objeto que já existia em uma revisão anterior, e esse objeto carrega dados de página, de stream de conteúdo ou de imagem, então a aparência renderizada do documento mudou após a geração. Objetos de anotação e de metadados não escalam a severidade.
Evidência retornada
revisions, updatesAfterCreation, eofOffsets, startxrefValues, revisionChainBroken, um detalhamento por revisão (changedPerRevision: quais objetos cada revisão escreveu e quais deles ela sobrescreveu, com o tipo de cada um) e contentObjectsOverwritten.
Causas legítimas
Extremamente comuns — esta é a família com mais chance de disparar em um arquivo honesto. Aplicar uma assinatura digital é uma atualização incremental — é assim que a assinatura preserva os bytes assinados. O mesmo vale para preencher um campo de AcroForm, adicionar uma anotação, um comentário ou uma nota adesiva, aplicar uma tarja em algumas ferramentas, e certos passes de linearização e otimização. Sistemas de gestão de documentos rotineiramente adicionam uma revisão na ingestão. Um extrato que o cliente abriu, assinou e salvou de novo não é uma falsificação.
A armadilha inversa: uma única revisão não significa que o arquivo nunca foi editado. Uma ferramenta que reescreve o documento inteiro achata o histórico, e então esta família fica em silêncio enquanto metadata-mismatch, producer-fingerprint ou font-anomalies carregam o achado em seu lugar.
Lógica de severidade
Silenciosa com uma revisão. média para qualquer revisão adicional. alta quando ao menos um objeto sobrescrito é do tipo page, content ou image.

metadata-mismatch

média alta
O que detecta
Desacordo entre os dois repositórios de metadados independentes que um PDF pode carregar: o dicionário Info do trailer e um pacote XMP incorporado. Quatro campos são comparados — producer, creator/creator-tool, data de criação e data de modificação. Uma única ferramenta escrevendo o arquivo uma única vez preenche os dois de forma consistente; editores de consumo com muita frequência atualizam um e deixam o outro desatualizado.
A comparação é deliberadamente tolerante, para que uma simples deriva de versão não vire um achado. As strings de ferramenta são normalizadas para caracteres alfanuméricos minúsculos e contam como concordantes quando uma é substring da outra, de modo que iText 7.2.5 e iText concordam. Timestamps concordam dentro de um minuto, porque os dois repositórios arredondam de formas diferentes. Um campo é pulado por completo quando está ausente de qualquer um dos repositórios, e a família nem sequer roda a menos que ambos os repositórios estejam presentes.
Evidência retornada
Um array mismatches (campo, valor do Info, valor do XMP), as strings brutas de producer/creator dos dois repositórios, os dois pares de datas, infoEditorTool / xmpEditorTool (qual editor de consumo conhecido cada repositório nomeia, se algum) e editorRevealedByMismatch.
Causas legítimas
Pipelines de publicação em múltiplos estágios produzem esse padrão de forma legítima e constante: um aplicativo de design escreve o XMP, um distiller escreve o dicionário Info, um pós-processador atualiza um dos dois. Alguns geradores server-side escrevem o XMP uma vez e nunca o renovam. O Quartz do macOS e vários drivers de impressão em PDF são conhecidos por deixar os repositórios divergentes. Uma divergência pura e simples é uma pergunta, não uma acusação.
Lógica de severidade
média para qualquer divergência. Escala para alta apenas em um caso específico: a divergência está em um campo producer ou creator e os dois repositórios nomeiam editores de consumo conhecidos diferentes — incluindo o caso em que um nomeia um editor e o outro não nomeia nenhum. Nessa situação, a divergência é a única razão pela qual a ferramenta de edição fica visível, o que é materialmente diferente de duas bibliotecas de servidor discordando entre si.

date-anomalies

baixa média
O que detecta
Timestamps que um gerador funcionando corretamente não poderia ter produzido. Quatro achados distintos, avaliados sobre os quatro campos de data disponíveis (Info /CreationDate e /ModDate, XMP xmp:CreateDate e xmp:ModifyDate):
mod-before-creation — o timestamp de modificação precede o timestamp de criação dentro do mesmo repositório (os dois repositórios são comparados como pares separados; a divergência entre repositórios é tratada por metadata-mismatch). future-date — um timestamp mais de um dia no futuro. impossible-timezone — um deslocamento UTC declarado além de ±14:00, que não corresponde a nenhum fuso horário real. unparseable-date — uma string que não segue nem a sintaxe PDF D:YYYYMMDDHHmmSSOHH'mm' nem a ISO-8601.
Evidência retornada
Um array findings — cada um com um tipo, o campo ou par de campos envolvido, o valor problemático e uma nota de uma linha — mais as quatro strings de data brutas exatamente como aparecem no arquivo.
Causas legítimas
Datas malformadas são, em grande parte, uma questão de qualidade do gerador: muitos produtores de nicho e legados emitem datas que não podem ser interpretadas, e é por isso que um relatório contendo apenas datas ininterpretáveis é rebaixado em vez de tratado como manipulação. Datas futuras podem vir de um relógio de sistema genuinamente errado, e é por isso que o limiar é de um dia inteiro em vez de um segundo. Modificação anterior à criação é o mais difícil de explicar de forma legítima, mas de fato ocorre com ferramentas que copiam a data de criação de um documento de origem enquanto escrevem uma data de modificação nova.
Lógica de severidade
baixa quando todos os achados são unparseable-date. média nos demais casos. O título reflete o achado mais forte: um par com modificação anterior à criação é nomeado explicitamente, relatórios só de datas malformadas dizem isso, e todo o resto reporta inconsistência interna.

producer-fingerprint

info baixa média
O que detecta
Uma ferramenta operada por uma pessoa aparecendo na cadeia de produção do documento. Quatro campos de origem são verificados — Info /Producer, Info /Creator, pdf:Producer e xmp:CreatorTool — contra uma lista curada de impressões digitais em cinco categorias: editores e conversores online (iLovePDF, Sejda, Smallpdf, PDFescape, PDF24, PDFfiller, DocHub, Soda PDF, PDF2Go, Convertio, Zamzar e outros), editores de PDF de desktop (PDF-XChange, Foxit, Nitro, PDFelement, Wondershare, Acrobat Pro interativo), pós-processadores de OCR (ABBYY, Readiris), editores de imagem e design (Photoshop, Illustrator, GIMP, Inkscape, Canva, Figma, Affinity) e pipelines de re-salvamento de escritório e impressão (LibreOffice, Word, Microsoft Print to PDF, Quartz PDFContext, CutePDF, doPDF, PrimoPDF).
Cada impressão digital carrega uma origem, e a origem decide tudo: uma ferramenta de autoria (Word, Canva, Google Docs, um driver de impressão, um passe de OCR) é onde a existência do documento começa, então nomeá-la não diz nada sobre se algo mudou depois. Um editor de PDF (iLovePDF, Sejda, PDF-XChange, o editor interativo do Acrobat Pro) recebe um PDF existente como entrada e escreve um novo — uma afirmação sobre o histórico do arquivo, não sobre sua autoria. A correspondência ignora maiúsculas e minúsculas sobre a string normalizada para caracteres alfanuméricos, então pontuação e números de versão não a derrotam.
Um ramo separado trata do caso oposto: nenhuma ferramenta produtora declarada em nenhum dos repositórios.
Evidência retornada
matches (qual campo, o valor bruto, o rótulo da ferramenta correspondida, sua categoria e sua origem), as listas deduplicadas tools e editorTools, a origin resolvida, as quatro strings brutas, revisions e fullPageImagePages — a lista de páginas é apenas evidência e não move mais a severidade.
Causas legítimas
Enormes — esta é a família que mais precisa de calibração local. Razões legítimas para uma ferramenta de consumo aparecer: o cliente baixou o extrato e o salvou de novo no Preview ou no Acrobat para combinar páginas; usou uma ferramenta online para mesclar dois extratos em um único upload, ou para comprimir um arquivo abaixo de um limite de upload; imprimiu em PDF a partir do internet banking porque não havia botão de download; o próprio emissor usa LibreOffice ou um driver de impressão no seu pipeline — instituições pequenas genuinamente usam. ABBYY e outras ferramentas de OCR aparecem de forma rotineira e legítima em fluxos de digitalização.
O caso do producer ausente é ainda mais fraco: remover metadados é um passo normal de higiene de privacidade, e alguns geradores minimalistas simplesmente nunca escrevem o campo. Ele remove um fato corroborante em vez de fornecer um.
Lógica de severidade
Nenhuma correspondência, com um producer declarado: silenciosa. baixa quando nenhuma ferramenta produtora é declarada em lugar algum. Para uma correspondência, dois fatos e nada mais: a origem da ferramenta e se o arquivo tem mais de uma revisão. Uma ferramenta de autoria é info em um arquivo de revisão única e baixa em um arquivo salvo de novo; um editor de PDF é baixa em um arquivo de revisão única e média em um arquivo salvo de novo. Esta família não alcança mais alta: a string do producer é um autorrelato da ferramenta que escreveu o arquivo — um fraudador pode defini-la como quiser, e um documento honesto a define como Word. Imagem de página inteira também não a escala mais; um raster de página inteira marca um documento que é uma imagem (um design do Canva, uma digitalização), não um documento que foi editado.

id-inconsistency

info média
O que detecta
Divergência no array /ID do trailer. A especificação PDF atribui aos dois elementos funções diferentes: o primeiro é um identificador permanente definido quando o documento é criado e nunca deve mudar; o segundo é reescrito pelo aplicativo produtor a cada salvamento. Em um gravador conforme à especificação, a divergência entre eles é o registro legível por máquina do próprio formato de que o arquivo foi salvo de novo após a criação — mas muitos gravadores reais simplesmente geram os dois elementos do zero na primeira gravação, então a divergência sozinha não é esse registro. A Tamperlens lê o /ID do trailer mais recente que carrega um, e reporta o /ID de cada trailer como evidência.
Evidência retornada
idOriginal e idCurrent em hexadecimal, trailerCount, revisions e allTrailerIds, para que você veja o identificador evoluir através das revisões.
Causas legítimas
Qualquer coisa que legitimamente salve o documento de novo atualiza o segundo elemento — assinar, preencher formulários, anotar. O sinal diz "salvo de novo", nada mais. Duas fraquezas adicionais que vale conhecer: alguns geradores minimalistas omitem o /ID por completo, e uma ferramenta que reescreve o arquivo inteiro pode definir os dois elementos com o mesmo valor novo, apagando o vestígio completamente. Um par idêntico, portanto, não é evidência de um documento intocado.
Lógica de severidade
Par idêntico: silenciosa. Par divergente: média apenas quando a própria estrutura do arquivo concorda que ele foi escrito mais de uma vez. Em um arquivo de revisão única a divergência é reportada como info — um arquivo escrito uma única vez não pode ter sido "salvo de novo", e medida contra populações de documentos não curadas, a maioria dos pares divergentes está exatamente nesses arquivos. Nenhum array /ID: info — sua ausência remove a verificação em vez de indicar uma mudança. Achados info não contribuem em nada para a pontuação e são reportados para que a observação continue auditável.

Veja o relatório no seu próprio arquivo

O verificador gratuito roda todas as famílias desta página e mostra a evidência completa — sem conta, sem nada armazenado. Para rodar no seu próprio fluxo, veja o guia rápido da API ou crie uma conta para uma chave com 50 documentos grátis por mês.

O Tamperlens reporta sinais de risco, não veredictos de autenticidade. Sinais podem ter causas legítimas; combine-os com sua própria lógica de decisão.

O resto do guia