探索 John the Ripper Jumbo 的強大功能——這是一款用途廣泛的密碼破解工具。本文提供了詳細的安裝與設定逐步指南,並特別著重於如何善用 GPU 加速,以大幅提升密碼復原與稽核的效率。
本技術說明檔僅供合法資安測試使用,僅限於您擁有合法授權或已取得書面測試同意之網路與系統環境。 在台灣,未經授權入侵他人電腦或網路系統屬刑事犯罪,依《刑法》第 360 條可能處三年以下有期徒刑。 請勿將任何教學步驟套用於未經授權的網路或系統。 本內容僅用於企業內部滲透測試、資安稽核與教育訓練,若用於非法用途,一切法律責任與風險由使用者自行承擔。
開始安裝前,請先確認系統已安裝所需工具:
nvidia-opencl-dev 套件ocl-icd-opencl-dev 套件# Ubuntu/Debian:安裝基本建置工具與 OpenCL 開發函式庫
sudo apt-get install build-essential git libssl-dev zlib1g-dev ocl-icd-opencl-dev
# NVIDIA GPU 額外套件
sudo apt-get install nvidia-opencl-dev
git clone https://github.com/openwall/john-the-ripper.git
cd john-the-ripper/src
執行 ./configure,讓系統自動偵測環境與硬體功能。JtR Jumbo 可透過 OpenCL 支援 NVIDIA 與 AMD GPU,啟用 OpenCL 亦同時涵蓋 CUDA GPU 支援:
# 標準組態(自動偵測 OpenCL)
./configure
# 或明確啟用 OpenCL 支援
./configure --enable-opencl
完成組態後,使用以下指令編譯(-j4 表示使用 4 個 CPU 核心,加速編譯):
make -s clean && make -sj4
編譯完成後,john 執行檔會出現在 john-the-ripper/run 目錄中。請先切換至該目錄:
cd ../run
以下兩個指令可用於驗證安裝:
# 列出偵測到的 OpenCL 裝置(確認 GPU 是否正確被識別)
./john --list=opencl-devices
# 執行效能基準測試,觀察各格式的破解速度
./john --test
若 --list=opencl-devices 成功顯示你的 GPU 名稱與規格,代表 GPU 加速環境已準備就緒。
利用 GPU 的平行運算能力,可大幅縮短密碼破解所需時間。以下列出關鍵注意事項與實務範例:
使用 JtR GPU 加速最常見的錯誤是:GPU 加速的格式名稱必須明確包含 -opencl 後綴。若未指定含 -opencl 的格式,JtR 會一律使用 CPU 版本,GPU 將完全閒置。
# ❌ 錯誤:使用 CPU 格式(GPU 不會被啟用)
./john --format=raw-md5 --wordlist=rockyou.txt hashes.txt
# ✅ 正確:使用 OpenCL 格式(啟用 GPU 加速)
./john --format=raw-md5-opencl --wordlist=rockyou.txt hashes.txt
列出所有支援 OpenCL 加速的格式:
./john --list=formats | grep opencl
./john --format=raw-md5-opencl --wordlist=rockyou.txt --rules -dev=0 hashes.txt
參數說明:
| 參數 | 說明 |
|---|---|
--format=raw-md5-opencl | 指定 OpenCL 加速的雜湊格式(務必包含 -opencl 後綴) |
--wordlist=rockyou.txt | 啟用字典攻擊模式,並以 rockyou.txt 作為字典來源 |
--rules | 套用常見密碼變形規則(大小寫替換、後加數字等) |
-dev=0 | 指定使用 GPU 裝置 #0(注意:單破折號,並且等號後不可加 gpu 字串) |
若系統有多張 GPU,可同時指定裝置編號與 --fork 參數:
# 使用 GPU 0 與 GPU 1,各別 fork 一個進程(總共 2 個並行進程)
./john --format=sha512crypt-opencl --wordlist=rockyou.txt -dev=0,1 --fork=2 hashes.txt
查詢可用 GPU 裝置編號:
./john --list=opencl-devices
--rules 會耗時較長,但 GPU 加速大致成比例提升,整體仍對大規模字典攻擊具有高度實務價值。--session=name,中斷後再用 --restore=name 恢復,避免重來從頭開始。--fork: 若有多張 GPU,務必同時指定 -dev=0,1,... 與對應的 --fork=N,否則僅會使用單一 GPU。