Removendo a senha de arquivos PDF

Arquivos PDF com senha não podem ser indexados pelos modernos (e nem pelos antigos) sistemas de procura de arquivos em desktop, também não são úteis como desculpa para não serem distribuídos indiscriminadamente. Então por que algumas empresas insistem em vender documentos PDF com senha?

O mundo digital é maravilhoso. Dos velhos e saudosos LP (saudosos pra quem), passando pelas fitas K7, CDs e finalmente chegando “ao estado da arte” os arquivos digitais MP3 e outros que não necessitam de uma mídia física para serem vendidos.

O mesmo ocorreu com os filmes que vieram de imensos rolos de “negativos” passando para meio magnético em vários tamanhos, VCD, DVDs, Bluray e também os maravilhosos MPEG e todas as suas variações.

Com documentos em texto ocorre o mesmo. Há muito tempo que o formato PDF (Portable Document Format) tem sido adotado como padrão “de fato”. Antes mesmo de ser oficialmente considerado como tal pela ISO, milhares ou talvez milhões de empresas o tem adotado para distribuir documentos em meio digital.

Algumas editoras inclusive já vendem livros e revistas neste formato. Ao invés do leitor comprar um exemplar impresso em papel que é difícil de armazenar e se deteriora facilmente com o tempo ele adquire o direito de fazer o download de um arquivo no formato PDF diretamente no site da editora e então poderá lê-lo em seu computador, leitores de e-book, tablet, iPod ou qualquer dispositivo apto à isto.

Claro que há sempre aquelas pessoas que preferem o conforto de ter um livro impresso em mãos e por isso acho que não cedo esta forma de mídia deixará de existir, mas para aqueles que apreciam a tecnologia e não querem ter uma escoliose ou outro problema de coluna transportando um dicionário Michaelis e mais um livro de Neuroanatomia ou de direito tributário eis que o PDF é a nossa salvação. Com ele é possível ter toda a sua biblioteca na mochila e tudo pesando menos de 1.5KG.

O grande problema é algumas editoras insistem em vender os PDFs com senha. A desculpa é que assim você não distribuiria de graça os arquivos que você comprou, já que na hora do download o arquivo é gerado com a sua senha de cadastro no site e onde tem diversas informações que certamente você não gostaria de compartilhar.

A verdade é que esta desculpa é falsa e não tem fundamento, já que existem algumas alternativas para isso. Conforme veremos abaixo existem alguns meios de se remover esta senha. Veja entretanto que meu propósito com este texto não é  “quebrar a senha” com métodos de força bruta, já que isto é ilegal. Nem incitar o leitor a distribuir arquivos com direitos de cópia protegidos de maneira ilegal.

O que me proponho neste trabalho é mostrar como tirar a senha de um aquivo seu em que você saiba a senha para leitura permitindo assim que o indexador de arquivos do sistema possa le-los e indexá-los assim como o faz com todos os demais arquivos permitindo realizar busca no seu conteúdo sem ter que abrir um a um.

Remover a senha para distribuição ilegal de documentos com direitos de autor,  passível de punição, seja contratual ou legal de acordo com as normas do seu contrato e/ou da legislação local.

Sabendo destas informações eis ai três métodos para remoção de senha;

Solução 1: Senha temporária

Antes de baixar o PDF você poderá mudar a sua senha no site para algo simples  como 123456, baixar o arquivo e depois voltar a sua senha para algo mais difícil.

Se a intenção era evitar a distribuição ilegal do arquivo a proteção acabou de ser quebrada com recursos da própria editora. Agora, quando for distribuir o arquivo basta informar a senha que abrirá o arquivo e ninguém ficará sabendo qual é a sua senha real no site.

Obs: Lembre-se que isso é só uma prova de conceito e como já avisei distribuição de material com direitos de autor ilegalmente é crime. Considerando que bons sistemas de venda online devem ter um log de atividades do usuário, a editora poderá identificar a sua má intenção ao perceber que você mudou de senha exclusivamente para baixar os arquivos.

Solução 2: Imprimir para PDF

O problema da solução 1 é que alguns sites podem exigir uma senha mais complexa ou ter um procedimento burocrático demais para alterá-la. Sabendo disso uma outra alternativa é usar um velho conhecido recurso de “imprimir para PDF”.

Atualmente existem vários programinhas que fazem isto no ambiente Windows, pra Linux isso já é praticamente nativo. Neste caso basta abrir o arquivo PDF informando a senha e em seguida mandar imprimir. Na tela de configuração de impressão apenas, mude a impressora para ao invés de imprimir na impressora real você use o gerador de PDFs e pronto, você terá o arquivo PDF sem a senha.

Como existem vários programas que funcionam como impressora virtual de PDFs e fica difícil dar um passo a passo sobre como fazer, mas em geral é apenas isso, selecionar a impressora virutal na tela de impressão e clicar em OK ou Imprimir.

Um dos problemas desta solução é que os arquivos poderão ser “impressos” em um formato diferente do original. Nos meus testes com isto eu tinha vários PDFs com tamanhos e formatos de página fora do padrão e que passaram a ter o formato A4. Dependendo  das configurações do programa isso seria melhorado ajustando a escala das páginas ou cortando pedaço da página etc mas nem sempre isto é possível nem resolve o problema.  Outro problema deste método é que os arquivos recebem uma nova compactação e com isso, nos meus testes, vários arquivos de 6MB, por exemplo passaram a ter 25MB – quase cinco vezes o tamanho original.

Solução 3: Apenas tirar a senha

Esta solução é apenas para os felizes usuários de sistemas Linux. Este ambiente possui centenas de ferramentas para trabalhar com arquivos em diversos formatos e com PDF não seria diferente. Um dos meus favoritos é o “PDF Toolkit”, um verdadeiro canivete suíço para arquivos PDF.

Entre as funcionalidades desta ferramentta estão:

  • Juntar ou dividir um arquivo PDF
  • Rotacionar páginas dentro de um arquivo
  • Encriptar ou decriptar o arquivo (nosso propósito)
  • Preencher formulários
  • Aplicar uma marca d’água
  • Atualizar permissões e metadados
  • Compactar e Descompactar o arquivo
  • Reparar um arquivo danificado

Cada uma destas funções estão documentadas em sua página de manual e não vou gastar bits descrevendo já que o objetivo desta matéria é apenas remover a senha. Sendo assim, indo direto ao assunto você deve em primeiro lugar instalá-lo em seu sistema caso ainda não o tenha.

Como o pdftk é um programa que roda em linha de comandos espero que você esteja habituado a usar este tipo de iteração com o computador. Em sistemas Debian-Like (família Ubuntu, Knoppix, Kurumin, Xandros etc) basta instalar o pacote “pdftk”.

Você pode fazer isso pelo Synaptic (Sistema / Administração / Gerenciador de Pacotes Synaptic), ou então, pra já começar a “esquentar o sangue na ponta dos dedos”, abrir uma linha de comandos e digitar:

sudo aptitude install pdftk

Para usar o comando basta lembrar da seguinte sintaxe:

pdftk seuarquivocomsenha.pdf input_pw suasenha output novoarquivosemsenha.pdf

Note que após o nome do comando temos o arquivo com senha seguido do parâmetro “input_pw” e da senha que abre o aquivo e por fim o parâmetro “output” acompanhado do nome do arquivo que será criado sem senha.

Sabendo isso, vamos a prática. Considerando um arquivo chamado “magazine009_wonderfulplaces.pdf”, cuja senha para abertura é “minhasenha2009”, pela linha de comandos basta acessar a pasta onde está o arquivo e digitar o seguinte comando:

pdftk magazine009_wonderfulplaces.pdf input_pw minhasenha2009 output magazine009-semsenha.pdf

Um outro exemplo só pra fixar. O arquivo dossiecamoes.pdf foi adquirido com a senha historiaport. O comando abaixo dará conta de criar um novo arquivo sem  a senha:

pdftk dossiecamoes.pdf input_pw historiaport output camoes.pdf

Trabalhando com vários arquivos de uma só vez
Para tirar a senha de vários arquivos de uma só vez você pode usar um pequeno script em linha de comandos como o mostrado abaixo:

(
PASS="senhadosarquivos"
for arq in $(ls -1 *.pdf); do
 echo "Limpando a senha de ${arq}..."
 pdftk ${arq} input_pw ${PASS} output $(basename ${arq} .pdf)_ss.pdf
done
)

Apenas mude a senha na linha “PASS=” para que seja a mesma senha dos seus arquivos. Abra um terminal e entre na pasta onde todos eles estão, agora é só colar o comando acima (incluindo os parênteses) e teclar ENTER no final para que todos os arquivos pdf daquele diretório tenha a sua senha removida.

Embora eu não tenha testado para confirmar, segundo o manual, caso algum arquivo possua senha diferente você será solicitado a informá-la na hora que a tentativa falhar.

Trabalhando em modo gráfico

Para quem não gosta ou tem medo de trabalhar em modo texto, uma alternativa é usar o pequeno script abaixo que roda em bash e usando “os poderes do Zenity” permite a existência de uma interface simplificada para este trabalho.

Ele é bem simples e ao ser iniciado apenas abrirá uma tela para selecionar o arquivo a ter a senha removida, em seguida pedirá a senha do arquivo. Um novo arquivo sem senha será criado no mesmo diretório do arquivo original, mas contendo um ‘_ss’ no final do seu nome, indicando que está é a versão “SemSenha”. Claro que você poderá modificá-lo a vontade, mas isso fica por sua própria conta e risco.

Até onde testei, caso ele não encontre, nem o zenity e nem o pdftk, uma janela de terminal será aberta para que a instalação destas ferramentas seja feita pelo aptitude, basta leras instruções que serão exibidas.

Para o programa funcionar basta colocá-lo em algum diretório que você tenha acesso, dar permissões de execução, caso não tenha (a versão disponibilizada para download já deverá ter) e em seguida dar um duplo clique sobre ele. Se preferir você  poderá criar um atalho na sua área de trabalho para facilitar, ou mesmo transformar em uma extensão para o Nautilus.

Obs: O WordPress – o sistema que uso para manter este blog – costuma trocar as aspas de programação por aspas tipográficas. Isto impede  que o programa abaixo funcione, então, caso você não consiga rodar o script abaixo, verifique se não é este o problema, ou ainda baixe o script compactado que disponibilizo no link abaixo da listagem.

#!/bin/bash
#Removedor de senhas de arquivos PDF
#Usa o Zenity e o pdftk para esta operacao
#Use-o por conta e risco
#
#Welington R. Braga - welrbraga{arroba}yahoo.com
#28-09-2009
#
#
withouttools="0"
#
#Testa se o zenity esta instalado
zenity=$(which zenity)
if [ "${zenity}" == "" ]; then
	withouttools="1"
fi
#
#Testa se o PDFtk está instalado
pdftk=$(which pdftk)
if [ "${pdftk}" == "" ]; then
	withouttools="1"
fi
#
#Se alguma ferramenta nao esta disponivel entao instala
if [ "${withouttools}" == "1" ]; then
	xterm -e "echo 'Ou o zenity, ou o pdftk nao estao instalados em seu sistema. Vou tentar instala-los pra voce agora, OK? Se for solicitado, informe a sua senha no prompt abaixo.';echo "";sudo aptitude update;sudo aptitude install zenity pdftk;echo '';echo 'Acho que o problema esta resolvido. Tecle ENTER para continuarmos';read"
fi
#
arq=$(${zenity} --file-selection --file-filter="Arquivos PDF | *.pdf" --title="Escolha o arquivo PDF com senha")
if [ ! -f "${arq}" ]; then
 zenity --info --text="Nao foi possivel ler o arquivo. Saindo."
 exit
fi
senha=$(${zenity} --entry --hide-text=senha-aqui --text="Digite a senha do arquivo" --title="Senha")
if [ "${senha}" == "" ]; then
 zenity --info --text="Voce nao informou a senha do arquivo. Saindo."
 exit
fi
arqsaida=$(basename "${arq}" .pdf)_ss.pdf
saida=$(dirname "${arq}")/"${arqsaida}"
${pdftk} "${arq}" input_pw "${senha}" output "${saida}" dont_ask
if [ ! -f "${saida}" ]; then
${zenity} --info --text="Sinto muito mas parece que ocorreu um erro ao tentar criar o arquivo sem senha."
else
${zenity} --info --text="Um novo arquivo sem senha foi criado com o nome ${arqsaida}."
fi
#

Clique no link ao lado para baixar o arquivo compactado sem problemas com as aspas – RemoveSenhaPDF.

Atualização (15-08-2010): Problemas com a JVM tem impedido que o pdftk consiga remover a senha. Conforme eu expliquei em um comentário meu (abaixo), para não ter mais aborrecimentos com ela, eu substitui o pdftk pelo qpdf nesta segunda versão do programa RemoveSenhaPDF2.

#!/bin/bash
#Removedor de senhas de arquivos PDF
#Usa o Zenity e o pdftk para esta operacao
#Use-o por conta e risco
#
#Welington R. Braga – welrbraga{arroba}yahoo.com
#28-09-2009
#
#
withouttools=”0″
#
#Testa se o zenity esta instalado
zenity=$(which zenity)
if [ “${zenity}” == “” ]; then
withouttools=”1″
fi
#
#Testa se o PDFtk está instalado
pdftk=$(which pdftk)
if [ “${pdftk}” == “” ]; then
withouttools=”1″
fi
#
#Se alguma ferramenta nao esta disponivel entao instala
if [ “${withouttools}” == “1” ]; then
xterm -e “echo ‘Ou o zenity, ou o pdftk nao estao instalados em seu sistema. Vou tentar instala-los pra voce agora, OK? Se for solicitado, informe a sua senha no prompt abaixo.’;echo “”;sudo aptitude update;sudo aptitude install zenity pdftk;echo ”;echo ‘Acho que o problema esta resolvido. Tecle ENTER para continuarmos’;read”
fi
#
arq=$(${zenity} –file-selection –file-filter=”Arquivos PDF | *.pdf” –title=”Escolha o arquivo PDF com senha”)
if [ ! -f “${arq}” ]; then
zenity –info –text=”Nao foi possivel ler o arquivo. Saindo.”
exit
fi
senha=$(${zenity} –entry –hide-text=senha-aqui –text=”Digite a senha do arquivo” –title=”Senha”)
if [ “${senha}” == “” ]; then
zenity –info –text=”Voce nao informou a senha do arquivo. Saindo.”
exit
fi
arqsaida=$(basename “${arq}” .pdf)_ss.pdf
saida=$(dirname “${arq}”)/”${arqsaida}”
${pdftk} “${arq}” input_pw “${senha}” output “${saida}” dont_ask
if [ ! -f “${saida}” ]; then
${zenity} –info –text=”Sinto muito mas parece que ocorreu um erro ao tentar criar o arquivo sem senha.”
else
${zenity} –info –text=”Um novo arquivo sem senha foi criado com o nome ${arqsaida}.”
fi
#

4 comentários em “Removendo a senha de arquivos PDF”

  1. Caro, prezado e estimado Sr. Welington R. Braga!!

    Venho por esta alertá-lo que esse artigo não se encontra listado na Etiqueta “senha”. Retornei ao seu blog, após lê-lo uma vez, procurando por este arquivo nesta etiqueta e não encontrei!

    Tive que fazer uma outra pesquisa, gastei meus dedos sem precisão. Eu, seu leitor tão fiel…

    Portanto, está me devendo uma Coca-Cola 2L. Abraços.

  2. Valeu @Flávio,

    Adicionei a etiqueta ‘senha’. Realmente foi um descuido meu. Vou me castigar com um dia sem acesso a Internet por esta falha.

    Quanto a Coca-Cola, em favor da sua saúde e do número de visitações ao meu blog, não a enviarei pois se você morrer de úlcera perderei 50% dos meus leitores assíduos (os outros 50% sou eu mesmo 😉 ).

    Mas não se preocupe, seu esforço não foi em vão. Tão logo a tecnologia de envio de alimentos pela Internet esteja 100% funcional eu prometo enviá-lo um suco natural frutas tropicais.

    []’s

  3. Olá brother…
    O cerne do seu script é o -> ${pdftk} “${arq}” input_pw “${senha}” output “${saida}” dont_ask
    Então, estou usando ele assim -> $pdftk AFO-1.pdf input_pw “” output AFO-1-test.pdf
    Direto na linha de comando e tem funcionado com 70%. Do resto retorna o seguinte seguinte:
    ———————————————————————————————————-
    Error: Failed to open PDF file:
    AFO-Aula13.pdf
    OWNER PASSWORD REQUIRED, but not given (or incorrect)
    Errors encountered. No output created.
    Done. Input errors, so no output created.
    ———————————————————————————————————-
    Mesmo em PDFs com senha tem funcionado, mas em outro não.
    Meu objetivo mesmo é só usar o “marcador de texto” de leitores pdf como o “PDF EDITOR”

    Valeu!

    1. E ai @Paulo,

      Eu fiquei algum tempo sem usar o script e notei o problema que não sei porque está ocorrendo. Mas consegui resolver mudando de ferramenta. Ao invés de “pdftk” mudei para o “qpdf” que funciona redondo.

      Para mudar de forma fácil e indolor mude a linha:
      ${pdftk} "${arq}" input_pw "${senha}" output "${saida}" dont_ask
      Para:
      ${qpdf} --decrypt --password="${senha}" "${arq}" "${saida}"

      obs: Cuidado com as aspas que o WordPress substitui pelas tipográficas e o correto para o script funcionar deve ser as normais, ok?

      Depois usando a ferramenta de localizar e substituir do seu editor de textos, substitua todas as ocorrências de “pdftk” por “qpdf” (cerca de 7 ocorrências).

      Feito isso o script deve voltar a funcionar sem problemas.

      Valeu pelo aviso.
      Abç.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.