私はJtRルールセットのドキュメントに注ぎ込み、ほとんど進歩していません。私はそれを使用して、特定の単語リストからさまざまな順列を作成する方法を理解しています。しかし、私は XKCD 936 スタイルのパスフレーズに対してそれらを使用する方法(可能な場合)を理解しようとしています
私はキャラクタークラスを見てきました:
?w matches whitespace: space and horizontal tabulation characters
?a matches letters [a-zA-Z]
?a?w?a?w?a?w?a
4つの単語グループに一致するように機能しますか?それは空白文字を含む4文字と一致すると思います-単語全体をそれと一致させる方法がわかりません。提案?文字の置換や何もないというのは良い考えです。
あるいは、私は単にワードリストを取り、4つのグループを生成し、JtRなしでそれらをハッシュ/チェックする必要がありますか?
乾杯
[〜#〜]免責事項[〜#〜]:私はJtRユーザーでもPerlプログラマでもありません。以下のこの回答は、ニュースグループからのいくつかの回答といくつかのJtRドキュメントを組み合わせた Google-F だけでの長年のトレーニングの産物です。
John the Ripper(JtR)ルール 複数の入力語をサポートしていません。
唯一の例外は single crack mode です。ここで、演算子1
、2
、および+
は、他のコマンドは、姓と名など、単語のペアに対してテストするときに、最初の単語、2番目の単語、または両方の単語にそれぞれ適用されます。
または、外部スクリプト(Wordの組み合わせの処理)の出力をjohn --stdin
またはファイル(およびJtR
でワードリストとして使用)にリダイレクトすることもできます。入力引数の数とともに可能な組み合わせの数が指数関数的に増加するため、そうすることは明らかにプロセスを遅くします。したがって、おそらく本当に短いWordリストで試してみる価値があるだけです。
以下は、ニーズに合わせて採用できる(またはそのまま使用できる)Perlスクリプトです。
2つの単語の組み合わせ:
#!/usr/bin/Perl
while (<>) {
chop;
$w[$#w + 1] = $_;
}
foreach $a (@w) {
foreach $b (@w) {
print "$a$b\n";
print "$a $b\n";
}
}
3つの単語の組み合わせ:
#!/usr/bin/Perl
while (<>) {
chop;
$w[$#w + 1] = $_;
}
foreach $a (@w) {
foreach $b (@w) {
$ab = "$a$b";
$a_b = "$a $b";
foreach $c (@w) {
print "$ab$c\n";
print "$a_b $c\n";
}
}
}
4つの単語の組み合わせ:
#!/usr/bin/Perl
while (<>) {
chop;
$w[$#w + 1] = $_;
}
foreach $a (@w) {
foreach $b (@w) {
$ab = "$a$b";
$a_b = "$a $b";
foreach $c (@w) {
$abc = "$ab$c";
$a_b_c = "$a_b $c";
foreach $d (@w) {
print "$abc$d\n";
print "$a_b_c $d\n";
}
}
}
}