John the Ripperは数百種類のハッシュと暗号をサポートしているパスワード回復ツールです。ここではCPUやグラフィックボードを使用してZIPや7zファイルに設定したパスワードを解読する方法を紹介します。
実行環境
OS | Windows 11 23H2 |
CPU | AMD Ryzen 5 3600 |
グラフィックボード | NVIDIA GeForce RTX 3060 12GB |
CPUを使用
パスワードはハッシュ化されて保存されており不可逆性のためハッシュ値からパスワードに戻すことは困難です。以下の手順でパスワードを解読します。
- ファイルからハッシュ化されたパスワードを抽出する
- パスワード候補のハッシュ値を計算し、抽出したハッシュ値と一致するものを見つける
ダウンロード
以下のリンクからダウンロードします。
1.9.0-jumbo-1 64-bit Windows binariesの7zかZipファイルをダウンロードして解凍します。
実行
Zipファイルにもいくつか仕様があり、今回は7-Zipでパスワードの設定や解凍を行いました。
コマンドプロンプトでjohn-1.9.0-jumbo-1-win64\run(フォルダ)を開きます。
Zipファイルからパスワードのハッシュ値を抽出して保存する
zip2john ファイルパス > ファイル名.hash
保存したハッシュ値と一致するものを見つける。マスクで4桁(英字小文字、英字大文字、数字、記号)を指定しています。マスクについては以下に記載。
john --mask=?a?a?a?a ファイル名.hash
--fork=CPUのスレッド数
こちらのオプションを指定することでCPUをフルに使用できる
john --mask=?a?a?a?a --fork=12 ファイル名.hash
どこかのキーを押して進捗や終了予定時刻を確認できます。途中で止める場合はqを押してください。解読できたらパスワードが表示されます。
john.potというファイルに解読したハッシュ値とパスワードが保存されています。
マスクについて
解読にいくつかのモードがありますがマスクを指定することでIncremental mode(総当たり)で解読を行います。マスクは以下を組み合わせて桁数やルールを指定します。
- ?l 英字小文字 (a-z)
- ?u 英字大文字 (A-Z)
- ?d 数字 (0-9)
- ?s 特殊文字(記号)
- ?a ?l?u?d?s
以下にマスクの指定方法の例をいくつか紹介します。
--mask=Apple?d?d?d?d
ワード (Apple) + 4桁(数字)--mask=?1?1?1?1?1?1 -1=?l?u?d
6桁(英字小文字、英字大文字、数字)--mask=[A-Ca-c][A-Ca-c]?d?d?d?d
2桁 (ABCabcのどれか) + 4桁(数字)
グラフィックボードを使用
グラフィックボードを利用するには、Cygwinでのビルドが必要になります。また現在CUDAのサポートは廃止されOpenCLでの動作になります。
hashcatで解読することもできます。
Cygwinのインストール
以下のリンクからsetup-x86 64.exeをダウンロードしてください。
インストール時のポイント
Direct Connectionを選択
ダウンロードサイトを選択します。jpドメインのサイトを選択しておけば速いかもしれません。
ここでパッケージを追加できますが後にコマンドラインで行うのでそのままインストールを進めてください。
Cygwinにパッケージの追加
コマンドプロンプト(管理者)でsetup-x86 64.exeのあるフォルダに移動して以下のコマンドを実行してパッケージを追加します。
setup-x86_64.exe -q -P gcc-core -P libgcc1 -P make -P perl
setup-x86_64.exe -q -P libssl-devel -P libbz2-devel
setup-x86_64.exe -q -P libgmp-devel -P zlib-devel
setup-x86_64.exe -q -P libOpenCL-devel -P libcrypt-devel
ソースコードをダウンロード
GitHubから最新のスナップショットをダウンロードします。https://github.com/openwall/john/archive/bleeding-jumbo.zipをダウンロードして解凍してください。
Cygwinでビルド
Cygwin64 Terminalを開きます。
john-bleeding-jumbo/srcに移動します。ディレクトリの移動は、先頭にcygdriveをつけてください(移動先のフォルダをドロップした方が簡単)
cd /cygdrive/c/Users/pcniki/john-bleeding-jumbo/src
ビルドする
./configure && make -s clean && make -sj4
make windows-package
実行
Cygwin64 Terminalで実行します。コマンドなどはCPUの時と同じですが、カレントディレクトリの実行ファイルには./をつける必要があります。
john-bleeding-jumbo/runに移動
cd /cygdrive/c/Users/pcniki/john-bleeding-jumbo/run
対応フォーマットを確認(openclとついているものがグラフィックボードで実行可能)
ZIP-opencl (WinZip) は対応しているがPKZIP-openclには対応していない。
./john --list=formats
グラフィックボードを使用する場合はフォーマットを指定する
./john --format=ZIP-opencl --mask=?a?a?a?a ファイル名.hash
7zファイルのパスワードを解析
ハッシュ値の抽出にはそれぞれのファイルに対応するツールを使います。7zファイルは7z2johnというツールでハッシュ値を抽出できます。
パッケージを追加
PerlのCompress::Raw::Lzma モジュールが不足しているようなのでコマンドプロンプト(管理者)で以下のコマンドでパッケージを追加します。
setup-x86_64.exe -q -P perl-Compress-Raw-Lzma
実行
Cygwin64 Terminalで実行します。
7z2johnの実行ファイルには.plという拡張子をつけてください。
./7z2john.pl ファイルパス > ファイル名.hash
openclに対応しています。
./john --format=7z-opencl --mask=?a?a?a?a ファイル名.hash