如何在 bash 脚本中逐行获取 Crunch 输出?
How to get Crunch output line by line in bash script?
我找到了一个旧的 multibit.key
钱包,但它是加密的,我想尝试暴力破解它,因为我知道密码的前 6 或 7 个字符。我正在生成具有固定开头的单词,最后才有所不同以尝试找到该钱包的密码。但是,当我 运行 c运行ch 程序时,bash 脚本正在等待它结束,然后开始读取输出的每一行,并且由于它生成了千兆字节的数据,程序结束被杀了。我想以这种方式在 crunch
wordlist 生成器生成的每个单词处迭代循环,到目前为止我的代码如下。为此,我必须更改什么?
#!/bin/bash
echo Usage: apply-guesses.sh [key file]
echo Key file:
for password in $(crunch 12 12 abcdefghjiklmnopqrstuvwxyz -t PASSWORD_BEGIN@@@@@); do
echo ------
echo Attempting: $password...
openssl enc -d -p -aes-256-cbc -md md5 -a -in -out recovered.key -pass pass:$password
if [ $? -eq 0 ];
then
echo "Success!";
break;
else
echo "Failed";
fi
echo ------
done
我对 crunch
没有任何经验,但我假设它会立即开始生成输出。为了本练习,我将使用以下函数模拟一些输出:
$ generate() { printf "1\n2\n3\n"; sleep 3; }
看起来像是使用 for
构造的某种缓冲,直到结束,例如:
for s in $(generate)
do
echo $s
done
# 3 second pause ...
1
2
3
但是如果我们切换到可比较的 while
构造,我们将看不到 buffering/delays:
while read -r s
do
echo $s
done < <(generate) # output lines are generated right away ...
1
2
3
# 3 second pause ...
我找到了一个旧的 multibit.key
钱包,但它是加密的,我想尝试暴力破解它,因为我知道密码的前 6 或 7 个字符。我正在生成具有固定开头的单词,最后才有所不同以尝试找到该钱包的密码。但是,当我 运行 c运行ch 程序时,bash 脚本正在等待它结束,然后开始读取输出的每一行,并且由于它生成了千兆字节的数据,程序结束被杀了。我想以这种方式在 crunch
wordlist 生成器生成的每个单词处迭代循环,到目前为止我的代码如下。为此,我必须更改什么?
#!/bin/bash
echo Usage: apply-guesses.sh [key file]
echo Key file:
for password in $(crunch 12 12 abcdefghjiklmnopqrstuvwxyz -t PASSWORD_BEGIN@@@@@); do
echo ------
echo Attempting: $password...
openssl enc -d -p -aes-256-cbc -md md5 -a -in -out recovered.key -pass pass:$password
if [ $? -eq 0 ];
then
echo "Success!";
break;
else
echo "Failed";
fi
echo ------
done
我对 crunch
没有任何经验,但我假设它会立即开始生成输出。为了本练习,我将使用以下函数模拟一些输出:
$ generate() { printf "1\n2\n3\n"; sleep 3; }
看起来像是使用 for
构造的某种缓冲,直到结束,例如:
for s in $(generate)
do
echo $s
done
# 3 second pause ...
1
2
3
但是如果我们切换到可比较的 while
构造,我们将看不到 buffering/delays:
while read -r s
do
echo $s
done < <(generate) # output lines are generated right away ...
1
2
3
# 3 second pause ...