| The_HuliGun |
22.07.2007 12:17 |
uin;pass генератор по маскам (Perl)
Доброго времени суток!
На досуге написал скрипт генератора пар uin;pass. И не стоит сразу кричать, что тема боян, таких генераторов уже туча, и т. д. Я преследовал скорее идею показать посетителям мощь и простоту языка Perl, нежели написать супер практический многофункциональный скрипт. Я хочу, чтобы новички в программировании познакомились з базовыми конструкциями языка, а все, кто еще не знаком с регулярными выражениями увидели их гибкость и простоту в решении практических задач.
PHP код:
#!/usr/bin/perl
$min = 100000;
$max = 999999;
$flag = 0; # Флаг маски
$pass; # Файл с паролями
$t_pass = 0;
$t_pair = 0;
welcome();
$destination = shift @ARGV;
open (OUT,">$destination");
while (($p ne "-f")&&($p ne "-p")&&($p=shift @ARGV))
{
if ($p eq "-i") { $a = shift @ARGV;if ($a =~ m/^\d*$/) {$min = $a }; $a = shift @ARGV; if ($a =~ m/^\d*$/) {$max = $a;}}
if ($p eq "-f") {$pass = shift @ARGV;open(IN,"$pass"); last;}
if ($p eq "-p") { last;}
if ($p eq "-m") { $p = shift @ARGV; if ($p eq "x"){$flag = 1}; if ($p eq "xy"){$flag = 2}; if ($p eq "xyz"){$flag = 3};};
}
if ($pass)
{
while(<IN>)
{
$t_pass++;
chomp;
go($_);
}
finish();
}
if ($p eq "-p")
{
while ($p = shift @ARGV)
{
$t_pass++;
go($p);
}
finish();
}
sub welcome()
{
print"\n UIN;PASS Generator\n";
print"\nUsage: \"perl gen.pl <output file> <options>\"\n";
print"\nOptions:\n";
print"-i Diapazon, example: \"perl gen.pl input.txt -i 10000 20000\"\n";
print"-m Mask, can be x, xy, xyz\n";
print"-f File with passwords in current dir\n";
print"-p Passwords separated by space\n";
print"\nExamples:\n";
print"perl gen.pl uin.txt -m xyz -f pass.txt\n";
print"perl gen.pl uin.txt -i 10000 50000 -p qwerty\n";
print"perl gen.pl uin.txt -m xy -p abc123 monkey grandpa\n";
print"perl gen.pl uin.txt -i 10000 30000 -m xyz -p myicqpass\n";
};
sub go()
{
for ($i = $min; $i <= $max; $i++)
{
if (!$flag) { print OUT "$i;$_[0]\n"; $t_pair++; };
if (($flag == 1)&&($i=~ m/^(\d)\1*$/)) { print OUT "$i;$_[0]\n"; $t_pair++; };
if (($flag == 2)&&($i=~ m/^(\d)\1*(\d)(\1|\2)*$/)) { print OUT "$i;$_[0]\n"; $t_pair++; };
if (($flag == 3)&&($i=~ m/^(\d)\1*(\d)(\1|\2)*(\d)(\1|\2|\4)*$/)) { print OUT "$i;$_[0]\n"; $t_pair++; };
}
};
sub finish()
{
print "\nSuccess!\n";
print "Generated $t_pair pairs with $t_pass pass and writed to $destination";
}
# Если не задана опция -i, тогда интервал по дефолту от 100000 до 999999
Возможности: генерация по маскам x, xy, xyz, использование файла с паролями, ведение статистики по количеству сгенерированных пар. Практичность том, что скрипт позволяет сгенерировать пары на удаленной тачке, если брут производится с дедика или захваченного сервера. ИМХО легче сгенерить файл на месте чем закачивать его на сервер.
|