banner
毅种循环

毅种循环

请将那贻笑罪过以逐字吟咏 如对冰川投以游丝般倾诉

John暴力破解忘记的Excel密码

我朋友问我有一个很重要的 excel 忘记密码了,能不能找回来了,对他很重要,我记得老早之前 hashcat 是可以破解的,顺便查了一下,记录一下用法。

简单叙述如何使用强大的密码破解工具 John the Ripper (JtR) 来恢复忘记密码的 XLSX 文件,覆盖 John 的几种核心破解模式。

前提条件#

  1. John the Ripper: 确保你已经下载并解压了 John the Ripper。强烈推荐使用社区增强版 "Jumbo John",因为它支持更多的哈希类型和 GPU 加速。https://github.com/openwall/john
  2. 目标文件: 你需要破解密码的 .xlsx 文件。

第一步:从 XLSX 文件中提取哈希#

John a Ripper 无法直接处理 .xlsx 文件,它需要一个特殊格式的 “哈希” 字符串。我们使用 office2john.py 脚本来提取它。

  1. 打开你的终端(Windows 上的 PowerShell 或 CMD)。
  2. 使用 cd 命令进入 John the Ripper 的 run 目录。
  3. 运行以下命令:
# 将 "C:\path\to\your\file.xlsx" 替换为你的 Excel 文件完整路径
python .\office2john.py "C:\path\to\your\file.xlsx" > hash.txt

image

这个命令会生成一个名为 hash.txt 的文件,里面包含了 John a Ripper 需要的加密信息。

image


第二步:选择破解模式并执行#

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 预定义了一些字母,当它们跟在 ? 后面时,就代表了特定的字符集。最常用的有:

占位符代表的字符集解释示例字符
?dDigits数字0, 1, 2, ... 9
?lLower小写字母a, b, c, ... z
?uUpper大写字母A, B, C, ... Z
?sSpecial特殊符号(ASCII)!, @, #, $ ...
?aAll所有可打印的字符(?l+?u+?d+?sa, A, 1, ! ...
?hHex, lower小写的十六进制字符0-9, a-f
?HHex, upper大写的十六进制字符0-9, A-F
?bAll 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 文件#

image

在我们的实战中,我们知道密码是 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-8ASCII
  • 解决方案:
    1. 记事本打开 hash.txt 文件。
    2. 选择 "文件" -> "另存为"。
    3. 在弹出的窗口下方,将 “编码” 从 UTF-16 LE 修改为 UTF-8
    4. 保存并覆盖原文件。

第三步:查看破解结果#

当命令成功执行后,你会看到类似下面的输出:

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。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。