hashcatをWindowsとGPUで動かし、ZIPファイルのパスワードを解析!(2024/07/17)
hashcatの公式サイトで公開されているWindows用のバイナリ(exeファイル)は、かなり前のものであるため、最新のCUDA12.5が使えるように、ベータ版をダウンロードした。(https://hashcat.net/beta/)
0.事前準備
NVIDIAドライバのインストール(最新のもの)
CUDA Toolkitのインストール(当時の最新バージョンは12.5.1)
OpenCL Runtimes for Intelのインストール
1.Hashファイルの作成
Hashファイルの生成には、一時的にOpenwallのJohn the ripperを使います。
cd path\to\john-1.9.0-jumbo-1-win64\run
zip2john.exeにより、ハッシュを生成します。
今回は変換元がZIPファイルですので、ご注意ください。
「>」のマークを忘れないでください。
zip2john (ファイル名).zip > (ファイル名).txt
また、John the ripperにより生成したHashファイルを、hashcatで用いる場合は、ファイルの冒頭や末尾を一部削除する必要があります。
(ZIPのハッシュの場合は、冒頭のみ。)
☆ZIPのハッシュの場合☆
(削除前)
---:$pkzip$---
(削除後)
$pkzip$---
2.CUDA、OpenCLとの接続確認
次のコマンドを入力して、hashcatがCUDAとOpenCLを認識していることを確認します。
CUDAが認識されない場合は、8章のエラー対応についてをご確認ください。
hashcat -I
hashcat (v6.2.6-813-g686bc227c) starting in backend information mode
CUDA Info:
==========
CUDA.Version.: 12.5
Backend Device ID #1 (Alias: #2)
Name...........: NVIDIA RTX A2000 Laptop GPU
Processor(s)...: 20
Clock..........: 1357
Memory.Total...: 4095 MB
Memory.Free....: 3289 MB
Local.Memory...: 99 KB
PCI.Addr.BDFe..: 0000:01:00.0
OpenCL Info:
============
OpenCL Platform ID #1
Vendor..: NVIDIA Corporation
Name....: NVIDIA CUDA
Version.: OpenCL 3.0 CUDA 12.5.78
Backend Device ID #2 (Alias: #1)
Type...........: GPU
Vendor.ID......: 32
Vendor.........: NVIDIA Corporation
Name...........: NVIDIA RTX A2000 Laptop GPU
Version........: OpenCL 3.0 CUDA
Processor(s)...: 20
Clock..........: 1357
Memory.Total...: 4095 MB (limited to 1023 MB allocatable in one block)
Memory.Free....: 3968 MB
Local.Memory...: 48 KB
OpenCL.Version.: OpenCL C 1.2
Driver.Version.: 555.99
PCI.Addr.BDF...: 01:00.0
3.GPUによるパスワード解析
早速、GPUによるパスワード解析を行います。
オプションについては、他のウェブサイトを参考いただきたいですが、
ブルートフォース攻撃(総当たり攻撃)の一例として、英大小文字+数字の6文字の場合の例を、ここに載せています。
hashcat -a 3 -w 4 -m 17220 -d 1 (ファイル名).txt ?1?1?1?1?1?1 -1=?l?u?d
-a 3: アタックモードを指定します。-a 3はブルートフォースアタックを意味します。ブルートフォースアタックでは、すべての可能なパスワードの組み合わせを試してパスワードを見つけます。
-w 4: ワークロードプロファイルを指定します。-wオプションはワークロードを設定するもので、1から4までの値を取ります。4は最大のパフォーマンスを意味し、最も高い負荷で動作します。値が大きいほどハードウェアの負荷が高くなります。
-m 17220: ハッシュタイプを指定します。17220は、PKZIP (ZIPファイル)のハッシュモードを表します。詳細なハッシュモードのリストはHashcatの公式ドキュメントで確認できます。
-d 1: 使用するデバイスを指定します。-dオプションはデバイスのIDを設定します。複数のGPUを使用する場合、特定のデバイスを選択するために使用します。例えば、-d 1は最初のGPU(通常はGPU 0)を意味します。
-1 ?l?u?d: カスタム文字セットを定義します。-1オプションはカスタム文字セットを定義するために使用されます。ここでは、小文字の英字(?l)、大文字の英字(?u)、数字(?d)を含む文字セットを定義しています。
?1?1?1?1?1?1: パスワードのマスクを指定します。この例では、6文字のパスワードを生成し、それぞれの位置にカスタム文字セット1(?1)を使用します。カスタム文字セット1には、小文字、大文字、数字が含まれます。
解析が完了すると、次の画面が表示されます。パスワードの解析に成功した場合は、StatusにCracked、失敗した場合は、StatusにExhaustedと表示されます。
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 17220 (PKZIP (Compressed Multi-File))
Hash.Target......: $pkzip2$1*1*2*0*3f*40*bd7d757b*0*2a*8*3f*bd7d*a040*...kzip2$
Time.Started.....: Wed Jul 17 14:00:48 2024 (10 secs)
Time.Estimated...: Wed Jul 17 14:00:58 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?1?1?1?1?1?1 [6]
Guess.Charset....: -1 =?l?u?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 2423.2 MH/s (264.80ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 24081203200/62523502209 (38.52%)
Rejected.........: 0/24081203200 (0.00%)
Restore.Point....: 5898240/15752961 (37.44%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1024 Iteration:0-1024
Candidate.Engine.: Device Generator
Candidates.#1....: saKKoi -> hj4mc8
Hardware.Mon.#1..: Temp: 57c Util:100% Core:1627MHz Mem:5500MHz Bus:8
Started: Wed Jul 17 14:00:45 2024
Stopped: Wed Jul 17 14:01:00 2024
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 17220 (PKZIP (Compressed Multi-File))
Hash.Target......: $pkzip2$1*1*2*0*3f*40*bd7d757b*0*2a*8*3f*bd7d*a040*...kzip2$
Time.Started.....: Wed Jul 17 14:12:58 2024 (1 sec)
Time.Estimated...: Wed Jul 17 14:12:59 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?1?1?1?1?1 [5]
Guess.Charset....: -1 =?l?u?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 911.1 MH/s (30.83ms) @ Accel:1024 Loops:63 Thr:32 Vec:1
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 992436543/992436543 (100.00%)
Rejected.........: 0/992436543 (0.00%)
Restore.Point....: 15752961/15752961 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-63 Iteration:0-63
Candidate.Engine.: Device Generator
Candidates.#1....: sXyWx -> ==YqI
Hardware.Mon.#1..: Temp: 54c Util: 99% Core:1762MHz Mem:5500MHz Bus:8
なお、パスワードの解析に成功すると、potfileファイルが生成されます。
解析済みのHashファイルに対して、再び解析を行う場合は、potfileを削除してください。
4.エラー対応について(しなくても動くことはある)
カーネルの実行タイムアウトが無効になっていない。
対処方法
テキストエディタを開く: メモ帳などのテキストエディタを開きます。
以下の内容をコピーする: 以下の内容をテキストエディタにコピーします。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"TdrLevel"=dword:00000000
ファイルとして保存: このファイルを.reg拡張子で保存します。例えば、disable_tdr.regという名前で保存します。
.regファイルの実行: 保存した.regファイルをダブルクリックして実行します。これにより、レジストリ設定が変更されます。
システムの再起動: レジストリの変更を有効にするために、システムを再起動します。
CUDA SDK Toolkitがインストールされていない。または、正しくインストールされていない。
対処方法
CUDA SDK Toolkitのバージョンが合っていません。
ベータ版のhashcatでは、CUDA Toolkit 12.5.1でも動きましたが、
公式サイトのhashcat 6.2.6では、CUDA Toolkit 11.~が最適です。
他のバージョンのCUDA Toolkitをインストールしている場合は、アンインストールしてください。
この記事が気に入ったらサポートをしてみませんか?