NotebookLMに過去の給与明細を全部ぶち込んで、これまでの収入を丸裸にしよう!
と思った矢先、入社してすぐのPDFのが開けない問題にぶち当たった。。。
最初フリーのPDFパスワード解析ソフトを使おうとしたんだけど、あまりに遅く断念。
そこでChatGPTになにかいい方法がないか聞くとHashcatが超高速だと教えてもらう。
指示されたとおりにHashcatをインストールし、10桁の総当りでパスワード解析してみると100秒ほどで見つからなかったと出てきた。教えてもらった設定だと1-10桁の総当りではなく10桁だけしか調べてないらしい。
じゃあ8桁だなとトライ。
一瞬でパスワードがでた!!!まさか入社日の日付だったとは・・・
皆様もパスワードがわからないPDFがあったらHashcatを使いましょう。
ちなみに自分はRTX5080を使いました。
自分がChatGPTで完結してしまっている時点で、このブログの記事が役立つことほとんどないんだろなーと思いつつも嬉しさの日記ということで記録しておく。
- WindowsだけでHashcatでPDFパスワードを解析する手順
- この記事でやること
- 前提:HashcatはPDFを直接解析できない
- 必要なもの(Windowsのみ)
- おすすめのフォルダ構成
- 1) Hashcat(Windows版)を入れてGPU認識を確認する
- 2) John the Ripper JumboでPDFハッシュを抽出する
- 3) Hashcatが読める形式に整形する(重要)
- 4) ハッシュモードを決める(PDFは10500が多い)
- 5) ベンチで速度を確認(所要時間の見積もり)
- 6) 解析を実行する(例:数字8桁・9桁・10桁)
- 7) 見つかったパスワードを確認(–show)
- 8) パスワードが分かった後(解除PDFを作るなら)
- よくある詰まりポイント
- まとめ
WindowsだけでHashcatでPDFパスワードを解析する手順
注意:この記事は自分が権限を持つPDFのパスワードを忘れた場合の復旧手順メモです。第三者のPDFに対する利用はやめましょう。
この記事でやること
- Windowsだけで「PDF → ハッシュ抽出 → Hashcatで解析」まで完結させる
- GPU(NVIDIA)を使って高速に解析する
- よくあるエラー(Separator unmatched等)の回避も含める
前提:HashcatはPDFを直接解析できない
HashcatはPDFファイルをそのまま入力して解析するのではなく、PDF内部の暗号検証情報を取り出したハッシュ形式(例:$pdf$...)を入力としてパスワード候補を試します。
つまりWindowsだけで完結する流れはこうです:
- PDF → ハッシュ抽出(John the Ripper Jumboなど)
- Hashcatで解析(辞書・マスク・総当り)
- 結果確認(–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.pdfC:\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が使えると桁数総当りが現実的になる
