Windows上でもPDFファイルのパスワードを総当たりで解析できるフリーソフト「PDFCrack」
セキュリティのためにPDFファイルにパスワードをかけたが、そのパスワードが一体何だったのかわからなくなってしまい途方に暮れてももう大丈夫。このフリーソフト「PDFCrack」を使えば辞書ファイルを利用したり、あるいは片っ端から総当たりでパスワードを試すことによって、正しいパスワードを解析して教えてくれます。文字の種類や文字数を制限したり、途中で中断してあとから続きをさせるといったことも可能なので、非常に有用です。解析できるパスワードはオーナーパスワード(いわゆる編集権限として印刷・内容の変更・内容の抽出に対してかけられたパスワード)とユーザーパスワード(閲覧に対してかけられたパスワード、開けようとするとパスワードが尋ねられるタイプ)の2種類となっており、ベンチマークも可能です。
もともとはLinux用のオープンソースのソフトなのですが、有志の手によってWindowsで動作するバージョンも提供されています。
というわけで、今回は実際にWindowsで動作するバージョンを使ってPDFファイルのパスワードを突破してみました。手順は以下から。
PDFCrack
http://pdfcrack.sourceforge.net/
PDFCrack - A Password Recovery Tool for PDF-files(Windows version)
http://blog.rubypdf.com/pdfcrack/
まずは上記サイトからZIPファイルをダウンロードします
解凍したファイル中のこの2種類のファイル「pdfcrack.exe」と「cygwin1.dll」動作に必要な本体。同じ場所に置いておきましょう。今回はDドライブ直下にそのままコピーしておくことにしました。
次に、コマンドプロンプトを起動します
「pdfcrack.exe」をドラッグ&ドロップします
するとこのようにして入力されます。次に、スペースキーを1回押して、半角スペースを入力します。
それから解析したいPDFファイルをドラッグ&ドロップします。
するとこうなります。
あとはEnterキーを押せばユーザーパスワードの総当たり解析が始まるというわけ。
解析中は一定時間ごとにこのようにして途中経過が表示されます。
解析は完全にCPU速度と比例するため、できるだけすばやく解析させるには、ほかの余計なソフトを終了させたり、タスクマネージャでCPUの優先度を引き上げるのが効果的です。
そのため、CPUによってどれだけの速度で解析ができるのかを計測するベンチマークモードがあります。pdfcrack.exeの場所、解析対象のPDFファイル名を入力後に「--bench」と入力して実行すれば計測が始まります。
また、解析中に「Ctrl+C」キーを押すことで、中断することが可能で、「savedstate.sav」という名前で保存されます。今回の場合は「C:\Documents and Settings\Administrator」の中に保存されました。
これがその途中経過を保存したファイル。
続きから開始するには、pdfcrack.exeの場所、解析対象のPDFファイル名を入力後に「--loadState="savedstate.savのフルパス"」と入力して実行すれば計測が始まります。これもドラッグ&ドロップすれば割と簡単です。
中断した続きから開始されている場合は、解析開始時にこのような文字列が表示されます。これによって、PCが1台しかなくても、空き時間だけに集中して解析させることが可能です。
パスワードを発見するとこのようにして表示されます。デフォルトではユーザーパスワードを発見するようになっています。
ユーザーパスワード発見したら、pdfcrack.exeの場所、解析対象のPDFファイル名を入力後に「--password="ユーザーパスワード"」と入力して実行すれば、高速化が行われ、すさまじい速度でオーナーパスワードも発見することが可能になります。
なお、各種コマンドはこんな感じ
--bench:ベンチマークモード
--charset=STRING:STRINGの部分を使いたい文字種類と入れ替えることで、その文字種だけを使って総当たりを行います。「--charset=0123456789」とすれば、0から9までの各種数字を使うということになります。
---wordlist=FILE:FILEの部分を辞書ファイルのフルパスにすれば、その辞書ファイル内の単語で総当たり戦を行います。辞書ファイルはネットを探せば転がっているのでそれを使えば簡単です。よく使う単語の組み合わせであれば最速です。
--minpw=INTEGR:INTEGRの部分を数字にすれば、その文字数以下の組み合わせは飛ばします。例えば4桁以下ではないことがわかっているなら「--minpw=4」とすることで、5文字の組み合わせから総当たりしてくれるようになります。
--maxpw=INTEGR:INTEGRの部分を数字にすれば、その文字数に達した時点で総当たりを中止します。例えば12桁目で解析を止めるには「--maxpw=12」とすればいいわけです。
--loadState=FILE:解析中にCtrl+Cキーで中断した際に生成されるsavedstate.savを使って、続きから解析を始めます。
--owner:デフォルトではユーザーパスワードを総当たりで探しますが、これを指定すればオーナーパスワードを総当たりで探します。
--user:ユーザーパスワードを総当たりで探します。
--password=STRING:STRINGの部分をユーザーパスワードにすることで、オーナーパスワード発見までの時間を劇的に短縮可能になります。
--quiet:途中経過を表示せずに解析します
--permutate:辞書ファイル使用時などに最初の頭文字を大文字に変換します
--version:バージョン表示
これであとはネットワーク間による複数台PCを使った分散連携解析、要するにP2P型の解析ができれば完璧なのですが、さすがにそこまでの機能はないようです。しかし、通常の目的であれば十分実用に耐えるものだと感じました。
・関連記事
Windowsのパスワードをわずか数分で解析する「Ophcrack」の使い方 - GIGAZINE
パスワードで保護されたExcelシートを解除するフリーのアドイン「Excel Password Remover 2008」 - GIGAZINE
パスワードを突破するまでの速度一覧 - GIGAZINE
Firefoxのマスターパスワードを回復するフリーソフト「FireMaster」 - GIGAZINE
パスワード付きZIP圧縮ファイルを解析するフリーソフトあれこれ - GIGAZINE
Windows98のセキュリティシステムをバイパスして突破する方法 - GIGAZINE
メンバー登録が必要なサイトを登録せずに利用する「BugMeNot」 - GIGAZINE
・関連コンテンツ