PDFのパスワードがわからなくなったらHashcatを使おう!

ツール

NotebookLMに過去の給与明細を全部ぶち込んで、これまでの収入を丸裸にしよう!
と思った矢先、入社してすぐのPDFのが開けない問題にぶち当たった。。。

最初フリーのPDFパスワード解析ソフトを使おうとしたんだけど、あまりに遅く断念。
そこでChatGPTになにかいい方法がないか聞くとHashcatが超高速だと教えてもらう。

指示されたとおりにHashcatをインストールし、10桁の総当りでパスワード解析してみると100秒ほどで見つからなかったと出てきた。教えてもらった設定だと1-10桁の総当りではなく10桁だけしか調べてないらしい。
じゃあ8桁だなとトライ。

一瞬でパスワードがでた!!!まさか入社日の日付だったとは・・・

皆様もパスワードがわからないPDFがあったらHashcatを使いましょう。

ちなみに自分はRTX5080を使いました。

自分がChatGPTで完結してしまっている時点で、このブログの記事が役立つことほとんどないんだろなーと思いつつも嬉しさの日記ということで記録しておく。

WindowsだけでHashcatでPDFパスワードを解析する手順

注意:この記事は自分が権限を持つPDFのパスワードを忘れた場合の復旧手順メモです。第三者のPDFに対する利用はやめましょう。


この記事でやること

  • Windowsだけで「PDF → ハッシュ抽出 → Hashcatで解析」まで完結させる
  • GPU(NVIDIA)を使って高速に解析する
  • よくあるエラー(Separator unmatched等)の回避も含める

前提:HashcatはPDFを直接解析できない

HashcatはPDFファイルをそのまま入力して解析するのではなく、PDF内部の暗号検証情報を取り出したハッシュ形式(例:$pdf$...)を入力としてパスワード候補を試します。

つまりWindowsだけで完結する流れはこうです:

  1. PDF → ハッシュ抽出(John the Ripper Jumboなど)
  2. Hashcatで解析(辞書・マスク・総当り)
  3. 結果確認(–show)

必要なもの(Windowsのみ)

  • Windows 10 / 11
  • NVIDIA GPU(あると爆速。なくても動くが遅い)
  • Hashcat(Windows版:binaries)
  • John the Ripper Jumbo(Windows版)(PDFハッシュ抽出用)

おすすめのフォルダ構成

例:

  • C:\Tools\hashcat-7.1.2\(Hashcat本体)
  • C:\Tools\john\(John Jumbo)
  • C:\Work\pdf\(作業フォルダ:PDFとハッシュを置く)

最終的にこうなればOK:

  • C:\Work\pdf\target.pdf
  • C:\Work\pdf\pdf_hashcat.hash

1) Hashcat(Windows版)を入れてGPU認識を確認する

Hashcat公式からhashcat binariesをダウンロードして展開します(sourcesではありません)。

PowerShellで動作確認:

cd C:\Tools\hashcat-7.1.2 .\hashcat.exe -I

出力に NVIDIA GeForce RTX … が出ればOKです。

※ AMD HIP SDK関連の警告が出ても、CUDAデバイスが表示されていれば通常は問題ありません。


2) John the Ripper JumboでPDFハッシュを抽出する

HashcatはPDFからハッシュを作れないことが多いので、Windows側にJohn Jumboを入れてpdf2johnを使います。

PDFを作業フォルダへ置きます:

  • C:\Work\pdf\target.pdf

PowerShellで抽出(例):

cd C:\Tools\john\run perl .\pdf2john.pl C:\Work\pdf\target.pdf > C:\Work\pdf\pdf.hash

抽出結果の先頭はだいたいこんな形式になります:

target.pdf:$pdf$2*3*128*...

3) Hashcatが読める形式に整形する(重要)

filename:(例:target.pdf:)が付いたままだとHashcatが弾くことがあります。そこでコロン以降だけを取り出して別ファイルにします。

(Get-Content C:\Work\pdf\pdf.hash) -replace '^[^:]+:','' | Set-Content C:\Work\pdf\pdf_hashcat.hash

確認:

Get-Content C:\Work\pdf\pdf_hashcat.hash | Select-Object -First 1

期待する形:

$pdf$2*3*128*...

4) ハッシュモードを決める(PDFは10500が多い)

PDFの代表例:

  • 10500:PDF 1.4 – 1.6(Acrobat 5 – 8)
  • 10700:PDF 1.7 Level 8(Acrobat 10+ AES-256)

わからない場合は、まず自動判定に頼るのも手です(ただし確実ではない):

cd C:\Tools\hashcat-7.1.2 .\hashcat.exe --show C:\Work\pdf\pdf_hashcat.hash

※見つかっていない場合は何も出ません(正常)。


5) ベンチで速度を確認(所要時間の見積もり)

.\hashcat.exe -b -m 10500

表示される Speed(例:101.2 MH/s)が実測速度です。桁数総当りの時間見積もりができます。


6) 解析を実行する(例:数字8桁・9桁・10桁)

GPUが複数見える環境では、速いGPUだけに固定すると安定します。

  • -D 2:GPUのみ
  • -d 1:デバイス1番(あなたの環境に合わせて調整)
  • -w 3:ワークロード強め(画面が重くなることがあります)

数字8桁

.\hashcat.exe -m 10500 -a 3 -D 2 -d 1 -w 3 C:\Work\pdf\pdf_hashcat.hash ?d?d?d?d?d?d?d?d

数字9桁

.\hashcat.exe -m 10500 -a 3 -D 2 -d 1 -w 3 C:\Work\pdf\pdf_hashcat.hash ?d?d?d?d?d?d?d?d?d

数字10桁

.\hashcat.exe -m 10500 -a 3 -D 2 -d 1 -w 3 C:\Work\pdf\pdf_hashcat.hash ?d?d?d?d?d?d?d?d?d?d

進捗を出す

.\hashcat.exe -m 10500 -a 3 -D 2 -d 1 -w 3 C:\Work\pdf\pdf_hashcat.hash ?d?d?d?d?d?d?d?d?d?d --status --status-timer=10

7) 見つかったパスワードを確認(–show)

.\hashcat.exe -m 10500 --show C:\Work\pdf\pdf_hashcat.hash

成功すると hash:password 形式で表示されます:

$pdf$...:PASSWORD_HERE

8) パスワードが分かった後(解除PDFを作るなら)

PDFを開ければ十分ならここで終了。解除版PDFを作りたい場合は qpdf が便利です。

(wingetが使える場合)インストール:

winget install qpdf

解除(パスワードを入力して復号PDFを保存):

qpdf --password=PASSWORD_HERE --decrypt "C:\Work\pdf\target.pdf" "C:\Work\pdf\target_unlocked.pdf"

よくある詰まりポイント

1) “Separator unmatched” などでハッシュが読めない

filename: が付いたままのことが多いです。整形して $pdf$... だけにしてください(上の手順「3) 整形」)。

2) --show が何も出ない

見つかっていないだけなら正常です。攻撃を走らせた後に再度 --show を確認してください。

3) GPUが使われていない

.\hashcat.exe -I でGPUが見えているか確認し、見えているなら -D 2 -d 1 でGPUを指定します。


まとめ

  • WindowsだけでもHashcatでPDF解析は可能
  • ただし最初にPDF → ハッシュ抽出が必要(John Jumbo等)
  • GPUが使えると桁数総当りが現実的になる