我查看了其他有帮助的问题,但没有回答我的问题。我正在尝试编写一个可以帮助我完成大学作业的脚本*。我有一个包含哈希值的文件,需要通过“反复试验”来破解该哈希值才能得到最终答案。该指令特别需要 jtr jumbo 版本,因此可能的格式列表很大。我将所有可用格式传递给名为“johnformats”的文件,其中每行包含格式 1。我希望这个脚本运行如下:
$ john hash.txt --format=[cat line 1 from johnformats] > johnout
然后重复最后一个格式值
$ john hash.txt --format=[cat line 204 from johnformats] > johnout
我的脚本如下所示:
#!/bin/bash
johnformats=$1
johnout=$2
exec 4> "$johnout"
while read -ru 3 LINE; do
john "$(cat hash.txt)" --format="$LINE" >&4
done 3< "$johnformats"
使用脚本运行时,哈希不会加载:
stat: cat hash: 没有这样的文件或目录
我尝试了以下完全删除 $hash 的操作,看看它是否有效:
需要密码文件,但未指定
重复 204 次告诉我另一部分有效,但是
约翰 Ripper 语法需要文件中的哈希值。
我只需要弄清楚如何让它为每个 $LINE 使用“散列”的内容。
*注意我的问题不是如何破解它,而是如何为我用来破解它的工具编写脚本。鼓励编写脚本,但不是必需的,并且与作业无关。我还没有记住所有可能的哈希前缀,这将使我免于心皮隧道。
答案1
我不明白增加复杂性的原因。你真正想要的是:
john hash.txt --format=[cat line 1 from johnformats] > johnout
john hash.txt --format=[cat line 2 from johnformats] >> johnout
john hash.txt --format=[cat line 3 from johnformats] >> johnout
等等。
因此,在脚本中,这将是:
#!/bin/bash
johnformats=$1
johnout=$2
while read line ; do
john hash.txt --format="$line" >>$johnout
done < $johnformats
不需要添加附加文件描述符 3 和 4 的复杂性,并且它们所做的事情与作为参数"$(cat hash.txt)"
添加完全不同。hash.txt
当然,错误消息表明hash
被用作参数,而不是hash.txt
上面代码中的 ,并且还表明该文件hash
不存在。这些也是您想要检查的事情。