一款功能強大的開源密碼破解工具,以其高效能和多樣化的攻擊模式而聞名。它不僅是世界上最快的密碼破解工具之一,還內建了獨特的「in-kernel」規則引擎,可以更有效地應用密碼變換規則。
主要特色
- 免費與開源: 可免費使用,並採用 MIT 授權。
- 跨平台支援: 支援 Linux, Windows 和 macOS 等多種作業系統。
- 多種攻擊模式: 提供多種攻擊模式,如字典攻擊、組合攻擊、暴力破解等,以應對不同情況。
- 多種雜湊類型: 支援多達數百種不同的雜湊類型,涵蓋了常見的 MD5, SHA1, NTLM, Bcrypt, WordPress 等。
常用參數說明
攻擊模式 (Attack Modes, -a)
這是在 Hashcat 中選擇密碼破解方式的重要參數:
-a 0(Straight): 字典攻擊模式,或稱「直譯模式」。它會直接使用字典檔(如rockyou.txt)中的每一個單詞來嘗試破解。-a 1(Combination): 組合攻擊模式,將兩個字典檔中的單詞進行組合。-a 2(Toggle Case): 變換大小寫攻擊模式,用於改變單詞的大小寫組合。-a 3(Brute-Force): 暴力破解模式,透過窮舉所有可能的字元組合來破解密碼。
雜湊類型 (Hash Type, -m)
此參數用來指定你想要破解的雜湊類型,每種雜湊都有其對應的編號:
0 = MD550 = HMAC-MD5100 = SHA1400 = WordPress1000 = NTLM1400 = SHA2563200 = Bcrypt
支援的Mode可參考:https://hashcat.net/wiki/doku.php?id=example_hashes
實用攻擊範例
Straight Attack (字典攻擊)
字典攻擊是最基本的攻擊模式,它直接使用預先準備好的密碼字典檔進行匹配。
運作方式: Hashcat 會讀取一個包含常見密碼的字典檔,然後逐一嘗試。
範例:
hashcat -a 0 -m <hash type> <hash_encrypt_file> <password directory file>
<hash_encrypt_file>:存放待破解雜湊值的檔案。<password directory file>:密碼字典檔路徑,例如:- 在 Kali Linux 中:
/usr/share/wordlists/rockyou.txt(此檔案通常為壓縮檔,需先解壓縮:gzip -d /usr/share/wordlists/rockyou.txt.gz) - 線上資源: 許多網站提供免費的密碼字典檔,例如:
https://samsclass.info/123/proj10/500_passwords.txt
- 在 Kali Linux 中:
使用Rule-based Attack
- 說明:規則攻擊是字典攻擊的延伸,它會根據指定的規則對字典中的單詞進行變換,以生成更多的候選密碼,提升破解成功率。
- 運作方式: Hashcat 從字典檔中讀取單詞,然後應用規則(如大小寫轉換、添加數字或符號、反轉順序等)來生成新的密碼組合。
- 範例:
- 使用 rockyou-30000.rule 規則檔增加字典 wordlist.txt 的密碼量並對md5做密碼測試。
hashcat -m 0 -a 0 -r /usr/share/hashcat/rules/rockyou-30000.rule hashes.txt /path/to/wordlist.txt
refer
https://uwnthesis.wordpress.com/2013/08/07/kali-how-to-crack-passwords-using-hashcat/
Brute-Force Attack (暴力破解)
暴力破解是透過窮舉所有可能的字元組合來破解密碼,當不知道密碼長度或字元類型時,它會非常有用。
運作方式:
- Mask (遮罩): 透過遮罩來定義密碼的字元集和長度。
--increment參數: 可選參數,用於讓 Hashcat 嘗試不同長度的密碼,從最短長度一直增加到最長長度。--pw-min <length>/--increment-min <length>: 設定密碼最小長度。--pw-max <length>/--increment-max <length>: 設定密碼最大長度。
內建字元集:
?l:小寫字母 (a-z)?u:大寫字母 (A-Z)?d:數字 (0-9)?s:特殊符號?a:所有可見的 ASCII 字元 (?l?u?d?s)
範例:
- 破解一個六位數的純數字密碼:(這個命令會嘗試所有從
000000到999999的組合。)# echo e10adc3949ba59abbe56e057f20f883e > hash.txt # hashcat -m 0 -a 3 -i hash.txt ?d?d?d?d?d?d
- 破解一個由四個小寫字母和兩個數字組成的密碼:(這個命令會嘗試所有例如
abcd12,abxy99這樣的組合。)# hashcat -m 0 -a 3 hashes.txt ?l?l?l?l?d?d
- 破解一個長度為 1 到 5 位,包含所有可見字元的密碼:
# hashcat -m 0 -a 3 hashes.txt ?a?a?a?a?a --increment --increment-min=1 --increment-max=5
客製化字元集
?1, ?2, ?3, ?4,可以個別用 -1 (–custom-charset1), -2 (–custom-charset2), -3 (–custom-charset3), -4 (–custom-charset4) 先行定義字母 pattern
範例:
- 破解長度7位,字元集包含?l小寫字母, ?u大寫字母,?d數字,以及特殊符號!@#$%
hashcat -a 3 sha1_test.txt '?1?1?1?1?1?1?1' --custom-charset1='?l?u?d!@#$%'
refer
https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#why_should_i_use_a_mask_attack_i_just_want_to_brute_these_hashes
其他參數
管理參數
--session 會話管理用法
1. 建立會話並中斷
開始破解任務,指定會話名稱為my_task sudo hashcat -m 0 -a 3 hashes.txt ?d?d?d?d --session=my_task
運行中按 Ctrl+C 中斷,hashcat 會自動保存進度到 my_task.restore
2. 恢復會話
恢復之前中斷的會話sudo hashcat --restore --session=my_task
或者直接用原命令,hashcat 會自動檢測並恢復sudo hashcat -m 0 -a 3 hashes.txt ?d?d?d?d --session=my_task
3. 會話管理
# 查看現有會話ls *.restore
# 刪除會話檔案(無法恢復)rm my_task.restore
# 檢查會話狀態hashcat --session=my_task --status
效能參數
-n <thread_number>: 設定執行緒數。--backend-vector-width
常用設定為1或4,視硬體支援調整。向量寬度指同時處理的數據元素數,寬度越大理論效率越高,但硬體兼容性和穩定性要考慮。大部分GPU設為4效果較好。--kernel-accel(內核加速)
代表GPU內核每次送入的工作塊數量,設定過大會導致GPU負載過重或溫度升高。建議初始值從1024開始,再逐步減半(512、256)觀察GPU利用率,避免超過95%。--kernel-loops(內核循環)
是每次GPU內核啟動時的迴圈次數。設定高能減少CPU和GPU間頻繁切換,提高運算效率,但太大可能浪費資源。常見值是256-1024,需要依GPU性能調節。-w(工作負載等級)
1為最低負載,4為最高負載,會影響 GPU 風扇轉速及整體效率。若溫控好可用4,否則降低到3或2。-O(優化模式)
啟用後加速破解速度,但會限制最大密碼長度(通常最大10字元左右)。使用前請確定密碼長度需求。
Hashcat 輸出解析表
設定長度 5 位全字元集 (?a?a?a?a?a) 的窮舉爆破,總共 7,737,809,375 組密碼,在單張 GPU(383.9 MH/s)上跑了約 20 秒全部嘗試完,但沒有找到正確密碼,因此狀態是 Exhausted,各項說明解釋如下。
| 欄位/項目 | 原始輸出 | 說明 |
|---|---|---|
| Status | Exhausted | 已經將設定的密碼空間全部嘗試完,沒有找到匹配的密碼。 |
| Hash. Mode | 10 (md5($pass.$salt)) | 使用的 hash 模式是 -m 10,計算方式為 MD5(密碼 + salt)。 |
| Hash. Target | e5249bbc558elfc5d71744ab9216e46:WhRgV4HXYjySt1aw | 前面是 hash 值,冒號後面是 salt 值。 |
| Time. Started | Tue Aug 12 19:10:41 2025 (20 secs) | 攻擊開始時間與持續時間(20 秒)。 |
| Time. Estimated | Tue Aug 12 19:11:01 2025 (0 secs) | 預估結束時間與剩餘時間(已完成)。 |
| Kernel. Feature | Pure Kernel | 使用純演算法核心(不是優化 kernel)。 |
| Guess. Mask | ?a?a?a?a?a [5] | 嘗試的 mask 為長度 5 的全字元集(?a = 大小寫、數字、符號,95 種字元)。 |
| Guess. Queue | 5/6 (83.33%) | 此次任務中第 5 個 mask(共 6 個)正在執行,完成度 83.33%。 |
| Speed.#1 | 383.9 MH/s (0.31ms) @ Accel:64 Loops:11 Thr:64 Vec:1 | 單張 GPU 每秒嘗試 3.839 億組密碼,批處理延遲 0.31 毫秒,其他為 GPU 工作設定值。 |
| Recovered | 0/1 (0.00%) Digests | 目標共 1 筆 hash,已破解 0 筆。 |
| Progress | 7737809375/7737809375 (100.00%) | 已完成所有可能組合(95^5 = 7,737,809,375),完成率 100%。 |
| Rejected | 0/7737809375 (0.00%) | 沒有任何候選密碼被篩掉。 |
| Restore. Point | 81450625/81450625 (100.00%) | 斷點儲存的進度也已完成。 |
| Candidate. Engine | — | 顯示候選產生器資訊(未特別輸出細節)。 |
| Salt | 0 Amplifier:88-95 Iteration:0-11 | Hashcat 內部對 salt 與計算批次的描述(與破解邏輯有關,不影響你設定 mask)。 |
| Candidates.#1 | ](z}~ -> 3 | 範例顯示剛跑過與即將嘗試的候選密碼。 |
Hashcat Status 狀態對照表
| 狀態名稱 | 說明 |
|---|---|
| Cracked | 已找到目標密碼(至少一個 hash 被破解)。 |
| Exhausted | 已經嘗試完設定的密碼空間,但沒有找到任何正確密碼。 |
| Aborted | 使用者手動中斷(Ctrl+C 或系統訊號終止)。 |
| Quit | 使用者輸入 q 或 QUIT 命令結束。 |
| Running | 正在執行破解(持續嘗試中)。 |
| Paused | 使用者輸入 p 暫停,或因其他原因暫停(例如 GPU 過熱)。 |
| Resumed | 從暫停狀態繼續執行。 |
| Checkpoint | 正在儲存進度檔(–restore 可用來續跑)。 |
| Bypass | 略過某些已經標記的 hash(通常是已經破解的)。 |
| Stopped | 任務完成或被終止(包含正常結束與錯誤結束)。 |
| Error | 執行過程中發生錯誤(例如檔案讀取失敗、GPU 初始化錯誤等)。 |