先日、戯れに Jonh the Ripper を使ってみた。 単語リストを使ったパスワードクラックができるのだが、 単語を組み合わせたクラックはできないみたいなので、 与えられた単語リストの全組合せを生成する Perl スクリプトを作ってみた:
#!/usr/bin/env perl
use strict;
use warnings;
my @wordseed = @ARGV;
sub wordmix
{
my ($wordpre, @wordlist) = @_;
my $n = scalar(@wordlist);
for (my $i=0; $i < $n; $i++) {
my @wordlistremained = @wordlist;
my $word = $wordpre . splice(@wordlistremained, $i, 1);
print "$word\n";
wordmix($word, @wordlistremained);
}
}
wordmix('', @wordseed);
一応できた (と思う) が、どうも美しさに自信がない。 この手の (数学的な?) アルゴリズムの実装は苦手かも…。 どうやって実装していいかなかなか思いつかず、30分くらいかかってしまった。 以下、実行例:
$ ./wordmix foo bar hoge hige >wordlist.txt
$ sudo john -wordfile:wordlist.txt /etc/shadow




