使用单词列表暴力加密分区

Pro*_*y0n 6 encryption password-recovery

大约一个月前,我使用磁盘工具加密了一个外部硬盘。现在好像忘记密码了。我根据一组规则形成了它,因此我生成了一个包含约 400,000 个候选词的单词列表(使用 Python 脚本)。我非常有信心我丢失的密码就在其中,但我真的不想手动尝试所有密码。

所以问题是:有没有什么工具可以让我的单词列表自动尝试?或者如果没有,我应该如何编写这样的脚本?

我之前在 GPG 上使用过一个类似的工具,它叫做nasty

(如果有人对我极其简单的排列脚本感兴趣,可以在Pastebin上找到它。)

hto*_*que 8

的返回值

echo "passphrase" | sudo cryptsetup luksOpen /dev/sda1 encrypted
Run Code Online (Sandbox Code Playgroud)

是:

  • 0,如果有这个密码的密钥
  • 234,如果没有这个密码的密钥

编写一个 bash 脚本应该不会太难,它会遍历您的单词列表,尝试每个密码短语并检查返回值。

例子:

#!/bin/bash

DEVICE="/dev/sda1"

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root." 1>&2
   exit 1
fi

while read line; do

    echo "$line" | cryptsetup luksOpen "$DEVICE" encrypted 2>/dev/null

    # success
    if [[ $? -eq 0 ]]; then
        cryptsetup luksClose encrypted
        echo "Passphrase: $line"
        exit 0
    fi

done < "$1"

echo "Passphrase not contained in word list."
exit 1
Run Code Online (Sandbox Code Playgroud)

保存,更改设备,使可执行文件,运行sudo ./find-password /path/to/wordlist并等待。

注意:这很。我不知道是不是因为我在 SD 卡上尝试过这个,但是测试四个错误的密码需要 5 秒钟(400,000 个可能的密码需要近 6 天)。

更新:似乎受 CPU 限制。如果您拆分单词列表并执行类似的操作

(sudo ./find-password words.0 &) ; (sudo ./find-password words.1 &)
Run Code Online (Sandbox Code Playgroud)

每次尝试将使用两个内核和几乎一半的时间。