前に受け取ったパスワード保護されたPDFファイルのパスワードを忘れてしまった!
どこかにメモしたはずなのに見当たらない。もう使わないと思って忘れてた… こういうことありますよね。つい先日、僕も同じ問題があったので、その時の解決策を備忘録として残しておきます。
はじめに
これから紹介する方法は、元々はLinux向けに開発された[pdfcrack]というコマンドラインツールを使う方法です。この方法ならば完全無料でMac、Linux、Windowsいずれのプラットフォームであっても利用できます。
しかしあらかじめ断っておきますが、難点もあります。それは、この方法はかなりとっつきにくく、ある程度コンピュータに精通していないと難しいということです。
「コマンドラインとか絶対ムリ!」
という方はGUIベースの無料ツールがたくさんあるのでそれを検索したほうがよさそうです。
といいながら、余計なお節介かもしれませんが一つだけアドバイスをさせてください…
注意!
ネット上にはウェブサイト上でPDFやZIPファイルのパスワード解除を行ってくれるサービスがたくさんありますが、僕ならオンラインのパスワード解除サイトは絶対に利用しません。
なぜなら、オンラインのサービスを利用するということは、機密が含まれるかもしれないデータを外部の第三者の手に渡すということだからです。第三者がそのファイルをあとでどのように不正利用されたとしても文句はいえません。最悪の場合、業務上の機密を漏洩したなどで責任問題に発展しかねません。
その点[pdfcrack]は、自分のコンピュータ上で処理を行うので安心です。
pdfcrackのインストール方法
Macの場合
一番簡単な方法は、Homebrew経由でインストールする方法です。
そのためにはまず、Homebrewをインストールしておく必要があります。HomebrewはMac用のパッケージマネージャで、これを使うとLinuxで使えるようなさまざまなツールがコマンド一つでインストールできるようになります。
Homebrewを一度インストールしてしまえば、pdfcrack以外にも便利なツールを簡単にインストールできるので、Macを使い込むなら入れておいて損はないと思います。
Homebrewのインストール方法
macOSにHomebrewをインストール: https://qiita.com/pypypyo14/items/4bf3b8bd511b6e93c9f9
公式サイト: https://brew.sh/index_ja
Homebrewがインストールできたらあとは簡単です。ターミナルで
brew install pdfcrack
と入力すればインストールできます。
Linuxの場合
Linuxの場合、標準のレポジトリから普通にインストールできます。ドキドキのハッキングツールかと思いきや公式レポジトリに登録されているあたりがLinuxですね。僕はCentOSだったので以下のように実行しました。
sudo yum install pdfcrack
Windowsの場合
Windowsの場合、EXE形式もあるにはありそうですが、かなりバージョンが古いのと、公式サイトからの公開ではないため、僕ならば念のために以下の方法をとると思いますが、僕自身は手順を試していないので悪しからず…
Windows Subsystem for Linux (WSL)をインストールしてから、上のLinuxの方法でインストールすると思います。WSLはUbuntuだそうなので
sudo apt-get install pdfcrack
になるのでしょうか。
Windows Subsystem for Linuxのインストール方法は以下のページがわかりやすくまとまっています。
【Windows Subsystem for Linuxをインストールしてみよう!】 https://qiita.com/Aruneko/items/c79810b0b015bebf30bb
pdfcrackの使い方
pdfcrackを無事インストールできたら、使い方は簡単です。
ターミナル(コマンドプロンプト)から
pdfcrack -f <解除したいファイルのパス>
と入力すればスタートします。
総当たり方式のため、解除するまでにかなり時間がかかることがあるので気長に待ちましょう。
実行中はこんな風に進捗が表示されます。
Average Speed: 35938.1 w/s. Current Word: 'i0291e' Average Speed: 35935.3 w/s. Current Word: 'lkhp2e' Average Speed: 35874.3 w/s. Current Word: 'r6u42e' Average Speed: 35956.7 w/s. Current Word: 'p29j3e' Average Speed: 35635.2 w/s. Current Word: '0zjz3e' Average Speed: 35837.9 w/s. Current Word: 'y1we4e' Average Speed: 35956.9 w/s. Current Word: '1xbu4e' Average Speed: 35928.8 w/s. Current Word: 'ieq94e' Average Speed: 35902.0 w/s. Current Word: '2f4o5e' Average Speed: 35971.8 w/s. Current Word: 'fkj45e' Average Speed: 35823.7 w/s. Current Word: 'gewj6e'
Average Speed: 35938.1 w/s. Current Word: 'i0291e'
Average Speed: 35935.3 w/s. Current Word: 'lkhp2e'
Average Speed: 35874.3 w/s. Current Word: 'r6u42e'
Average Speed: 35956.7 w/s. Current Word: 'p29j3e'
Average Speed: 35635.2 w/s. Current Word: '0zjz3e'
Average Speed: 35837.9 w/s. Current Word: 'y1we4e'
Average Speed: 35956.9 w/s. Current Word: '1xbu4e'
Average Speed: 35928.8 w/s. Current Word: 'ieq94e'
Average Speed: 35902.0 w/s. Current Word: '2f4o5e'
Average Speed: 35971.8 w/s. Current Word: 'fkj45e'
Average Speed: 35823.7 w/s. Current Word: 'gewj6e'
そして、解析が完了すると以下のようにパスワードが表示されます。
found user-password: 'hello'
解析を早くするヒント
上の方法でも解析できますが、パスワードの複雑さによってはかなりの時間がかかります。そこで、パスワードがある程度推測できる場合、ヒントを与えることで解析をスピードアップできます。
例えばですが、仕事でやりとりされるパスワード付きのファイルは、送信した日付がパスワードになっていたりするので、かなりのヒントになります。
辞書ファイルを使う
パスワードが辞書に載っている単語であると予想できるときは、辞書ファイルを使って解析させることもできます。
Linuxの場合は、辞書ファイルがすでに入っていたりするので以下のような感じで実行できます。
pdfcrack -w /usr/shared/dict/linux.words -f test.pdf
それ以外のプラットフォームの場合、辞書ファイルはオンラインからダウンロードすることもできます。
例:https://www.karamasoft.com/ultimatespell/dictionary.aspx
文字を指定する
パスワードに使われる可能性のある文字があらかじめわかっている場合、以下の方法で指定できます。
pdfcrack --charset="abcdefghijklmnopqrstuvwxyz0123456789" -f test.pdf
上の例の場合、小文字のアルファベットと数字しか使われないと指定しています。
パスワードの長さを指定する
パスワードに使われる可能性のある文字があらかじめわかっている場合、以下の方法で指定できます。
pdfcrack -n 6 -m 8 -f test.pdf
上の例の場合、パスワードは最低でも6文字以上、最高でも8文字以下だと伝えています。
著作権や機密保護等に関する注意
注意!
自分の所有するファイルのパスワードを解除すること自体に問題はありませんが、他者のデータを不正に入手して解析したり、著作権で保護されているコンテンツを公開したり、業務上の秘密保持契約などで守秘義務がある情報を開示したとなれば当然法的に責任を問われます。この点に関してはしっかりと理解した上で、あくまでご自身の所有する、パスワードを忘れてしまったファイルに対して利用してください。