引言
Hashcat 是一个强大且流行的密码恢复工具。破解密码可能是一个非常耗时的过程,有时需要数小时、数天甚至数周。因此,了解如何管理这些长时间运行的任务至关重要。你可能需要暂停一个任务来释放系统资源,或者可能会遇到意外的系统关机。如果没有适当的会话管理,你将不得不从头开始整个过程,浪费宝贵的时间。
在本实验中,你将学习 Hashcat 中会话管理的基础知识。你将练习启动一个命名会话,交互式地暂停和恢复它,以及使用 Hashcat 内置的会话管理功能来停止和恢复它。这些技能对于任何 Hashcat 的实际使用都至关重要。
启动一个长时间运行的破解会话
在此步骤中,你将启动一个密码破解任务并为其指定一个会话名称。为会话命名是管理的第一步也是最重要的一步,因为它告诉 Hashcat 跟踪并保存此特定任务的进度。
我们将使用一个基本的字典攻击。命令结构使用了几个标志:
-m 0: 指定哈希类型。0对应 MD5。-a 0: 指定攻击模式。0对应直接(字典)攻击。--session <name>: 为当前会话分配一个名称。这对于暂停和恢复至关重要。
首先,请确保你位于 ~/project 目录中,该目录是设置脚本创建必要文件(hashes.txt 和 wordlist.txt)的地方。
现在,运行以下命令启动一个名为 my_session 的破解会话:
hashcat -m 0 -a 0 hashes.txt wordlist.txt --session my_session
运行命令后,Hashcat 将初始化并在你的终端中显示一个状态屏幕。此屏幕提供有关破解进度的实时信息。
hashcat (v6.2.x) starting...
...
Session..........: my_session
Status...........: Running
Hash.Name........: MD5
Hash.Target......: 5f4dcc3b5aa765d61d8327deb882cf99
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........: ...
...
Progress.........: 123456/1000001 (12.34%)
...
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
请注意 Session..........: my_session 这一行,它确认了我们的会话名称。Status 是 Running,并且 Progress 条正在前进。在进行下一步之前,让进程运行片刻。
通过按 'p' 暂停会话
在此步骤中,你将学习如何暂停一个活动的 Hashcat 会话。如果你需要暂时将计算机资源分配给其他任务,但又不想丢失破解进度,这将非常有用。
Hashcat 在其状态屏幕的底部提供了一个交互式菜单。你可以看到可用的选项:[s]tatus [p]ause [r]esume [b]ypass [q]uit。
要暂停会话,只需在 Hashcat 终端窗口处于活动状态时,在键盘上按下 p 键即可。你无需按 Enter。
现在按下 p。
你将立即看到屏幕上的 Status 字段从 Running 变为 Paused。
...
Session..........: my_session
Status...........: Paused
...
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
当会话暂停时,Hashcat 会停止所有处理,并且任务的 GPU/CPU 使用率降至零。但是,应用程序仍然在你的终端中处于活动状态,等待进一步的指令。
通过按 'r' 恢复会话
在此步骤中,你将恢复刚刚暂停的会话。
就像你使用 p 键暂停一样,你可以使用 r 键来恢复。这将告诉 Hashcat 从暂停的确切点继续破解过程。
在 Hashcat 终端仍然处于活动状态时,按下 r 键。
Status 字段将从 Paused 变回 Running,你将看到 Progress 和 Speed 指示器再次激活。
...
Session..........: my_session
Status...........: Running
...
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
会话现在正在再次运行,并且没有丢失任何进度。这个暂停/恢复周期可以根据需要重复多次。
停止会话并了解 .restore 文件
在此步骤中,你将学习如何完全停止一个会话,并检查 Hashcat 用于保存其状态的文件。这与暂停不同;停止会完全退出应用程序。如果你需要关闭计算机,就应该这样做。
要优雅地停止会话,请按下 q 键(quit 的缩写)。
现在按下 q。
Hashcat 将停止破解过程并退出,将你返回到命令提示符。
当你使用命名会话时,Hashcat 会自动将其进度保存到一个恢复文件(restore file)中。此文件与你的会话名称相同,并带有 .restore 扩展名。
让我们验证一下这个文件是否已创建。列出当前目录中的文件:
ls -l
你应该在文件列表中看到 my_session.restore。
-rw-r--r-- 1 labex labex 28 Jul 10 10:30 hashes.txt
-rw-r--r-- 1 labex labex 48 Jul 10 10:32 my_session.restore
-rw-r--r-- 1 labex labex 8888898 Jul 10 10:30 wordlist.txt
此文件包含 Hashcat 稍后恢复会话所需的所有信息,包括原始命令行参数和测试过的最后一个密码候选。你可以使用 cat 命令查看其内容:
cat my_session.restore
输出将是一系列包含会话配置和进度的行。此文件是 Hashcat 强大会话管理功能的核心。
使用 --session 和 --restore 标志恢复之前的会话
在最后这个步骤中,你将学习如何恢复一个已完全停止的会话。这对于在重启后或有意停止一个长时间运行的任务后继续工作非常有用。
要恢复会话,你需要使用 --restore 标志以及 --session 标志来指定要恢复的会话。这种方法的一个主要便利之处在于,你无需再次提供原始的哈希类型(hash type)、攻击模式(attack mode)或文件路径。Hashcat 会从 .restore 文件中读取所有这些信息。
运行以下命令来恢复 my_session:
hashcat --session my_session --restore
Hashcat 将重新启动,并自动从 my_session.restore 文件加载状态。你将看到状态屏幕出现,重要的是,Progress 将从中断的地方开始,而不是从头开始。
...
Session..........: my_session
Status...........: Running
...
Progress.........: 123456/1000001 (12.34%) -> (Resuming from where it was stopped)
...
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
你已成功恢复了一个已停止的会话。现在你可以让它运行完成,或者再次按下 q 键退出。
总结
在这个实验中,你已经掌握了 Hashcat 中管理破解会话的基本技能。现在你懂得如何在不担心因中断而丢失进度的情况下处理长时间运行的任务。
你已经学会了:
- 使用
--session标志启动一个命名会话,这是会话管理的基础。 - 通过按下
p来暂停(pause)和按下r来恢复(resume)来交互式地控制正在运行的会话。 - 使用
q来优雅地停止会话,并理解 Hashcat 会自动创建一个.restore文件来保存状态。 - 使用
--session和--restore标志恢复一个已完全停止的会话,从而让你能够高效地继续工作。
掌握这些功能对于在任何非简单的密码破解任务中有效使用 Hashcat 至关重要。


