0

以下のような構文を持つ ./testpassword という名前のバイナリがあります

./testpassword pass PASSWORD_GOES_HERE

パスワードが正しい場合、出力は

pass=correct

間違った出力が以下のようになる場合

pass=incorrect

私は Linux とスクリプトの初心者ですが、ここのメンバーの助けを借りて、以下のようなサンプル シェル スクリプトを作成しました。

    cat passwords.txt | while read x ; do echo -n "$x: " && ./testpassword pass $x ;
done

ここで、passwords は txt 形式の単語リストです。

これはうまく機能し、端末を監視すると、次のような出力が表示されます(単語リストのすべての行で続きます)

jordyt: pass=incorrect
dawder: pass=incorrect
LOL12345: pass=incorrect
warcraft: pass=incorrect
solidussnake: pass=incorrect
0005: pass=correct

したがって、この場合、0005 が私のパスワードであることはわかっています。私の質問は、パスワードが見つかったときにプログラムを停止したり、どこかにパスワードを自動的に表示したりすることは可能ですか? 画面から離れようとすると、画面がパスワードの試行と下へのスクロールを続けるため、パスワードが何であったかを見失います

私が行っていた以前の方法は、このシェルスクリプトのパスワード ブルートフォーシングのようなものでした。立ち去って後で戻ってきて、パスワードがクラックされていることを確認してから、プログラムをctrl + cすることができたので、それはうまくいきました。クラックされたパスワードに対応するワードリストの行番号を手動で検索する必要があった後

4

2 に答える 2

0

./testpassword pass $x次のようにして、の実行を変数に保存できます。

cat passwords.txt | while read x ; do result=`./testpassword pass $x` ; echo -n "$x: $result" ; done

次に、$result を文字列 "pass=correct" と比較し、次の方法で文字列が見つかった場合はループを中断できます。

if [[ "$result" == *pass=correct ]]; then break; fi

すべてをまとめる:

cat passwords.txt | while read x ; do result=`./testpassword pass $x` ; echo -n "$x: $result" ; if [[ "$result" == *pass=correct ]]; then break; fi ; done
于 2012-09-27T06:39:11.313 に答える
0

スクリプトを変更してtestpassword、成功した場合は 0 を返し、失敗した場合は他の値を返すようにします。その後、次のようにループを書き換えることができます。

cat passwords.txt | while read x; do
    echo -n "$x: " && ./testpassword pass $x && break
done
于 2012-09-27T06:39:20.270 に答える