John the RipperでZIPファイルのパスワードを解読する

John the Ripper ソフトウェア

John the Ripperは数百種類のハッシュと暗号をサポートしているパスワード回復ツールです。ここではCPUやグラフィックボードを使用してZIPや7zファイルに設定したパスワードを解読する方法を紹介します。

実行環境

OSWindows 11 23H2
CPUAMD Ryzen 5 3600
グラフィックボードNVIDIA GeForce RTX 3060 12GB

CPUを使用

パスワードはハッシュ化されて保存されており不可逆性のためハッシュ値からパスワードに戻すことは困難です。以下の手順でパスワードを解読します。

  1. ファイルからハッシュ化されたパスワードを抽出する
  2. パスワード候補のハッシュ値を計算し、抽出したハッシュ値と一致するものを見つける

ダウンロード

以下のリンクからダウンロードします。

John the Ripper Windowsダウンロード

1.9.0-jumbo-1 64-bit Windows binariesの7zかZipファイルをダウンロードして解凍します。

実行

Zipファイルにもいくつか仕様があり、今回は7-Zipでパスワードの設定や解凍を行いました。

  • PKZIP ZipCryptoで暗号化、Windowsの標準機能で開くことができる
  • WinZip AES256で暗号化、セキュリティが高く解読に時間がかかる

コマンドプロンプトで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
John

どこかのキーを押して進捗や終了予定時刻を確認できます。途中で止める場合は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での動作になります。

Cygwinは、Windows上でUnix/Linux系のツールやコマンドを動作させることができるソフトウェアです。

hashcatで解読することもできます。

Cygwinのインストール

以下のリンクからsetup-x86 64.exeをダウンロードしてください。

インストール時のポイント

Cygwin install Select Your Internet Connection

Direct Connectionを選択

Cygwin install Choose A Download Site

ダウンロードサイトを選択します。jpドメインのサイトを選択しておけば速いかもしれません。

Cygwin install Select Packages

ここでパッケージを追加できますが後にコマンドラインで行うのでそのままインストールを進めてください。

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
タイトルとURLをコピーしました