对于命令行工具,如何使用一个文件的内容以及另一个文件的每一行作为 bash 脚本中的参数?

对于命令行工具,如何使用一个文件的内容以及另一个文件的每一行作为 bash 脚本中的参数?

我查看了其他有帮助的问题,但没有回答我的问题。我正在尝试编写一个可以帮助我完成大学作业的脚本*。我有一个包含哈希值的文件,需要通过“反复试验”来破解该哈希值才能得到最终答案。该指令特别需要 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不存在。这些也是您想要检查的事情。

相关内容