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.エラー対応について(しなくても動くことはある)

  • カーネルの実行タイムアウトが無効になっていない。

* Device #1: WARNING! Kernel exec timeout is not disabled. This may cause "CL_OUT_OF_RESOURCES" or related errors. To disable the timeout, see: https://hashcat.net/q/timeoutpatch

対処方法

テキストエディタを開く: メモ帳などのテキストエディタを開きます。

以下の内容をコピーする: 以下の内容をテキストエディタにコピーします。

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がインストールされていない。または、正しくインストールされていない。

* Device #1: CUDA SDK Toolkit not installed or incorrectly installed.
CUDA SDK Toolkit required for proper device support and utilization.
For more information, see: https://hashcat.net/faq/wrongdriver
Falling back to OpenCL runtime.

対処方法

CUDA SDK Toolkitのバージョンが合っていません。
ベータ版のhashcatでは、CUDA Toolkit 12.5.1でも動きましたが、
公式サイトのhashcat 6.2.6では、CUDA Toolkit 11.~が最適です。
他のバージョンのCUDA Toolkitをインストールしている場合は、アンインストールしてください。


この記事が気に入ったらサポートをしてみませんか?