Além das ferramentas baseadas em GUI mencionadas nas outras respostas, existem algumas ferramentas de linha de comando que podem transformar o código-fonte do PDF original em uma representação diferente que permite inspecionar o (agora arquivo modificado) com um editor de texto. Todas as ferramentas abaixo funcionam em Linux, Mac OS X, outros sistemas Unix ou Windows.
qpdf
(meu favorito)
Use qpdf para descompactar (a maioria) fluxos de ObjStm
objetos e também dissecar objetos em objetos indiretos individuais:
qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf
qpdf
descreve a si mesmo como uma ferramenta que faz "transformações estruturais e preservadoras de conteúdo em arquivos PDF" .
Em seguida, basta abrir e inspecionar o uncompressed-qpdf.pdf
arquivo em seu editor de texto favorito. A maioria dos bytes compactados anteriormente (e, portanto, binários) agora serão texto simples.
mutool
Também existe a mutool
ferramenta de linha de comando que vem com o visualizador de PDF MuPDF (que é um produto irmão do Ghostscript, feito pela mesma empresa, Artifex ). O comando a seguir também descompacta fluxos e os torna mais fáceis de inspecionar por meio de um editor de texto:
mutool clean -d orig.pdf uncompressed-mutool.pdf
podofouncompress
PoDoFo é uma biblioteca FreeSoftware / OpenSource para trabalhar com o formato PDF e inclui algumas ferramentas de linha de comando, incluindopodofouncompress
. Use-o assim para descompactar fluxos de PDF:
podofouncompress orig.pdf uncompressed-podofo.pdf
peepdf.py
PeePDF é uma ferramenta baseada em Python que ajuda você a explorar arquivos PDF. Seu propósito original era pesquisar e dissecar malware baseado em PDF, mas acho útil também investigar a estrutura de arquivos PDF completamente benignos.
Ele pode ser usado interativamente para "navegar" pelos objetos e fluxos contidos em um PDF.
Não vou dar um exemplo de uso aqui, mas apenas um link para sua documentação:
pdfid.py
e pdf-parser.py
pdfid.py
e pdf-parser.py
são duas ferramentas PDF de Didier Stevens escritas em Python.
Sua experiência também ajuda a explorar PDFs maliciosos - mas também acho útil analisar a estrutura e o conteúdo de arquivos PDF benignos.
Aqui está um exemplo de como eu extrairia o fluxo não compactado do objeto PDF no. 5 em um arquivo * .dump:
pdf-parser.py -o 5 -f -d obj5.dump my.pdf
Notas finais
Observe que algumas partes binárias dentro de um PDF não são necessariamente incompressíveis (ou decodificáveis em código ASCII legível por humanos), porque são incorporadas e usadas em seu formato nativo dentro de PDFs. Essas partes do PDF são imagens JPEG, fontes ou perfis de cores ICC.
Se você comparar acima ferramentas e exemplos de linha de comando dadas, você vai descobrir que eles fazem não todos produzem saídas idênticas. O esforço de compará-los por suas diferenças pode ajudá-lo a entender melhor a natureza da sintaxe e do formato do arquivo PDF.