我朋友問我有一個很重要的 excel 忘記密碼了,能不能找回來了,對他很重要,我記得老早之前 hashcat 是可以破解的,順便查了一下,記錄一下用法。
簡單敘述如何使用強大的密碼破解工具 John the Ripper (JtR) 來恢復忘記密碼的 XLSX 文件,覆蓋 John 的幾種核心破解模式。
前提條件#
- John the Ripper: 確保你已經下載並解壓了 John the Ripper。強烈推薦使用社區增強版 "Jumbo John",因為它支持更多的哈希類型和 GPU 加速。https://github.com/openwall/john
- 目標文件: 你需要破解密碼的
.xlsx
文件。
第一步:從 XLSX 文件中提取哈希#
John a Ripper 無法直接處理 .xlsx
文件,它需要一個特殊格式的 “哈希” 字符串。我們使用 office2john.py
腳本來提取它。
- 打開你的終端(Windows 上的 PowerShell 或 CMD)。
- 使用
cd
命令進入 John the Ripper 的run
目錄。 - 運行以下命令:
# 將 "C:\path\to\your\file.xlsx" 替換為你的 Excel 文件完整路徑
python .\office2john.py "C:\path\to\your\file.xlsx" > hash.txt
這個命令會生成一個名為 hash.txt
的文件,裡面包含了 John a Ripper 需要的加密信息。
第二步:選擇破解模式並執行#
John the Ripper 擁有多種破解模式,針對不同場景選擇合適的模式是成功的關鍵。
John 的核心破解模式#
1. 字典模式 (Wordlist Mode)#
這是最常用的模式。你提供一個包含常用密碼的字典文件(wordlist),John 會逐一嘗試。還可以配合規則(Rules)對字典詞彙進行變形(如 pass
-> P@ss123
),極大提升成功率。
# --wordlist=後接你的字典文件路徑
john --wordlist=password.lst hash.txt
2. 增量模式 (Incremental Mode)#
純粹的暴力破解。它會嘗試所有可能的字符組合,理論上只要時間足夠,一定能破解。但對於稍長的密碼,會非常非常慢。
# 嘗試所有8位以內的小寫字母組合
john --incremental=Lower --max-len=8 hash.txt
3. 掩碼模式 (Mask Mode) - 本次使用的模式#
當你對密碼結構有一定了解時,這是最高效的模式。你可以定義密碼的格式,極大地縮小搜索範圍。
?d
: 代表一位數字 (0-9)?l
: 代表一位小寫字母 (a-z)?u
: 代表一位大寫字母 (A-Z)?s
: 代表一位特殊符號 (!@#$)
示例: 破解一個 6 位純數字密碼。
參考可以查閱:https://in.security/2022/06/20/hashcat-pssw0rd-cracking-brute-force-mask-hybrid/
https://github.com/openwall/john/blob/bleeding-jumbo/doc/RULES
(非常複雜,建議直接問 AI)
john --mask=?d?d?d?d?d?d hash.txt
簡單來說:
? 符號本身不是一個字符,而是一個 “特殊指令” 或 “前綴”,它告訴 John:“請注意,跟在我後面的那個字母不是普通字母,而是一個代表特定字符集的佔位符。”
把它想像成一個填空題:
__ __ __ __ __ __
?d?d?d?d?d?d 這個掩碼就等於在說:
- 在第一個空 __ 裡,填一個數字(digit) (?d)
- 在第二個空 __ 裡,填一個數字(digit) (?d)
- ... 依此類推,填滿六個空。
詳細分解#
讓我們來深入看一下 ? 和它後面字母的組合。
1. 內置的標準佔位符#
John the Ripper 預定義了一些字母,當它們跟在 ? 後面時,就代表了特定的字符集。最常用的有:
佔位符 | 代表的字符集 | 解釋 | 示例字符 |
---|---|---|---|
?d | Digits | 數字 | 0, 1, 2, ... 9 |
?l | Lower | 小寫字母 | a, b, c, ... z |
?u | Upper | 大寫字母 | A, B, C, ... Z |
?s | Special | 特殊符號(ASCII) | !, @, #, $ ... |
?a | All | 所有可打印的字符(?l+?u+?d+?s) | a, A, 1, ! ... |
?h | Hex, lower | 小寫的十六進制字符 | 0-9, a-f |
?H | Hex, upper | 大寫的十六進制字符 | 0-9, A-F |
?b | All 8-bit | 所有可能的 ASCII 字符 (0-255) | (所有字符) |
2. 如何組合它們?#
你可以自由地組合這些佔位符來構建你認為可能的密碼結構。
示例 1:一個首字母大寫,後跟 7 個小寫字母的密碼 (例如 Password)
--mask=?u?l?l?l?l?l?l?l
示例 2:一個 4 位數字的 ATM 密碼,後面跟著兩個大寫字母 (例如 1234AB)
--mask=?d?d?d?d?u?u
3. 如果密碼裡就包含一個普通字母怎麼辦?#
任何沒有 ? 前綴的字符都會被當作普通(或 “字面”)字符來處理。John a Ripper 會認為這個位置的字符是固定不變的。
示例 3:你知道密碼以 pass- 開頭,後面是 4 個數字 (例如 pass-1234)
--mask=pass-?d?d?d?d
在這個例子裡,p, a, s, s, - 都是固定不變的,只有後面的四個 ?d 位置會被 John 暴力破解。這極大地減少了搜索空間!
4. 更高級的用法:自定義字符集#
你甚至可以定義自己的佔位符 ?1, ?2, ?3 等。
示例 4:你知道密碼只有 8 位,且只包含 a, b, c, 1, 2, 3 這幾個字符。
你可以定義一個自定義字符集 ?1,然後重複它 8 次。
john --mask='?1?1?1?1?1?1?1?1' --mask-char-?1='abc123' hash.txt
- <font style="color:rgb(26, 28, 30);">--mask-char-?1='abc123'</font><font style="color:rgb(26, 28, 30);">:這部分定義了</font><font style="color:rgb(26, 28, 30);"> </font><font style="color:rgb(26, 28, 30);">?1</font><font style="color:rgb(26, 28, 30);"> </font><font style="color:rgb(26, 28, 30);">這個佔位符代表的字符集就是</font><font style="color:rgb(26, 28, 30);"> </font><font style="color:rgb(26, 28, 30);">'abc123'</font><font style="color:rgb(26, 28, 30);">。</font>
- <font style="color:rgb(26, 28, 30);">--mask='?1?1?1?1?1?1?1?1'</font><font style="color:rgb(26, 28, 30);">: 這部分告訴 John a Ripper 密碼由8個來自</font><font style="color:rgb(26, 28, 30);"> </font><font style="color:rgb(26, 28, 30);">?1</font><font style="color:rgb(26, 28, 30);"> </font><font style="color:rgb(26, 28, 30);">字符集的字符組成。</font>
? 符號它本身沒有意義,但它賦予了緊跟其後的字母特殊的含義,讓你可以從 “盲目地暴力破解所有可能” 轉變為 “精確地、有策略地暴力破解特定格式”,從而將破解時間從幾年縮短到幾秒鐘。
4. 單一破解模式 (Single Crack Mode)#
John 默認最先嘗試的模式,速度極快。它會利用哈希文件中的用戶名等信息進行簡單的變換和猜測。
# 不加任何模式參數,默認就會啟用
john hash.txt
實戰演練:破解一個 6 位數字密碼的 XLSX 文件#
在我們的實戰中,我們知道密碼是 6 位數字,所以選擇掩碼模式。
理想的命令是:
.\john --mask=?d?d?d?d?d?d hash.txt
常見問題與解決方案#
錯誤 : Error: UTF-16 BOM seen in input file.
#
- 問題: John 無法識別
hash.txt
的文件編碼。 - 原因: 使用 Windows PowerShell 的
>
重定向符創建文件時,默認編碼是UTF-16
,而 John 需要UTF-8
或ASCII
。 - 解決方案:
- 用記事本打開
hash.txt
文件。 - 選擇 "文件" -> "另存為"。
- 在彈出的窗口下方,將 “編碼” 從
UTF-16 LE
修改為UTF-8
。 - 保存並覆蓋原文件。
- 用記事本打開
第三步:查看破解結果#
當命令成功執行後,你會看到類似下面的輸出:
Warning: detected hash type "Office", but the string is also recognized as "office-opencl"
Use the "--format=office-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES])
Cost 1 (MS Office version) is 2007 for all loaded hashes
Cost 2 (iteration count) is 50000 for all loaded hashes
Will run 32 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
933728 (微信登記1 (1).xlsx)
1g 0:00:00:29 DONE (2025-09-05 19:45) 0.03344g/s 20067p/s 20067c/s 20067C/s 616778..351115
結果解讀:
- 破解的密碼:
933728
- 花費時間:
0:00:00:29
,即 29 秒。
如果之後想再次查看已破解的密碼,可以運行:
.\john --show hash.txt
至此,結束。
PS:
外面第三方軟件有很多,我找了一下找到了一个 Passper for Excel.exe 的軟件,看了一下應該也是調用的 John,支持 GUI 圖形化,建議有需要直接使用這個,搜索相關 Passper for Excel crack。