首页 > 解决方案 > 如何在 bash 脚本中逐行获取 Crunch 输出?

问题描述

我找到了一个旧multibit.key钱包,但它是加密的,我想尝试暴力破解它,因为我知道密码的前 6 或 7 个字符。我正在生成具有固定开头的单词,并且最终会有所不同以尝试找到此钱包的密码。但是,当我运行 crunch 程序时,bash 脚本正在等待它结束,然后开始读取输出的每一行,并且由于它生成千兆字节的数据,程序最终被杀死。我想这样做,它在单词列表生成器生成的每个单词处迭代循环crunch,到目前为止我的代码如下。我必须改变什么才能这样做?

#!/bin/bash
echo Usage: apply-guesses.sh [key file]
echo Key file: $1
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 $1 -out recovered.key -pass pass:$password
   if [ $? -eq 0 ];
     then
       echo "Success!";
       break;
     else
       echo "Failed";
   fi
   echo ------
done

标签: bashbitcoinbrute-forcecrunch

解决方案


我没有任何经验,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构造,我们就看不到缓冲/延迟:

while read -r s
do
    echo $s
done < <(generate)              # output lines are generated right away ...
1
2
3
   # 3 second pause ...

推荐阅读