perl社工密码字典生成器
生活随笔
收集整理的這篇文章主要介紹了
perl社工密码字典生成器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#!/usr/bin/perl -w
use Math::Combinatorics qw(permute);
#引入排列模塊if (@ARGV == 0){die "錯誤:No parameter!Enter \"?\" for help.\n";
}
#若無參數(shù),提示錯誤并退出if (@ARGV == 1){if ($ARGV[0] eq '?'){&help;}else{die "Error:At least 2 parameter!\n"}
}
#若只有一個參數(shù),判斷是否為“?”。若是則調用help函數(shù),否則提示錯誤并退出my @parameter_array = @ARGV;
die "Error:Missing \"-o\" parameter!\n" unless(grep(/^-o$/,@parameter_array));
#若參數(shù)中沒有“-o”,提示錯誤并退出
my @words_array;
my @numbers_array;
my $filename;while(@parameter_array){
#處理每一個參數(shù)my $parameter = shift @parameter_array;if($parameter eq '-w'){my $para = shift @parameter_array;&checkword($para);push @words_array,$para;#將“-w”后的字符串加入數(shù)組@words_array中}elsif($parameter eq '-d'){my $para = shift @parameter_array;&checknum($para);push @numbers_array,$para;#將“-d”后的數(shù)字加入到數(shù)組@numbers_array中}elsif($parameter eq '-o'){my $para = shift @parameter_array;$filename = $para;#將“-o”后的文件名賦值給$filename變量}else{die "Error:Parameter near \"$parameter\"\n";#若有其他類型的參數(shù)或者格式不正確則提示錯誤并退出}
}my @everyword_listarray_ref_array;
foreach(@words_array){
#將每一個字符串參數(shù)生成全部大小寫數(shù)組,并將該數(shù)組的引用存放在數(shù)組@everyword_listarray_ref_array中my $all_case_array_ref = &creat_all_case($_);push(@everyword_listarray_ref_array,$all_case_array_ref);
}
foreach(@numbers_array){
#將每一個數(shù)字參數(shù)放在單獨的數(shù)組中,并將該數(shù)組的引用存放在數(shù)組@everyword_listarray_ref_array中my @number_array = ($_);my $number_array_ref = \@number_array;push(@everyword_listarray_ref_array,$number_array_ref);
}open(PASSLIST,">$filename");
foreach(permute(@everyword_listarray_ref_array)){
#permute返回的是所有排列的數(shù)組的引用的數(shù)組array_permu(@$_);#對每一種數(shù)組排列調用函數(shù)
}
close PASSLIST;sub array_permu{
#用來實現(xiàn)數(shù)組間的組合my $aa = shift @_;foreach(@$aa){push(@arr,$_);array_permu(@_) if @_;unless(@_){print PASSLIST join('',@arr).$/;}pop @arr;}}
sub creat_all_case{
#生成所有大小寫的數(shù)組,返回該數(shù)組的引用my $word = shift @_;my @all_case_array;while($word){push(@all_case_array,$word);$word = &add1($word);}my $all_case_array_ref = \@all_case_array;return $all_case_array_ref;
}sub add1{
#實現(xiàn)字母+1my ($words) = (@_);if($words =~ /^[A-Z]+$/){return 0}my @words_array = split('',$words);my $jinwei = 1;foreach (@words_array){if($jinwei == 1) {if($_ =~ /^[a-z]$/){$_ = uc $_;$jinwei = 0;}elsif($_ =~ /^[A-Z]$/){$_ = lc $_;$jinwei = 1;}}}$words = join('',@words_array);return $words;
}sub checkword{
#檢查是否有其他字符my $word = shift @_;if ($word =~ /[^a-z]/){die "Error:Incorrect format near \"$word\"\n";}
}sub checknum{
#檢查是否有其他字符my $num = shift @_;if ($num =~ /[^0-9]/){die "Error:Incorrect format near \"$num\"\n";}
}
sub help{system "clear";print qq(Social Engineering Password Dictionary Builder(V1.0) - by adidalaUsage: ./creatdict [? | -w xxx | -d xxx] -o xxxParameter?: To show this page-w: A word,it will generate all combinations of case(Optional Repeatable)-d: A number(Optional Repeatable)-o: Output file of password dictionary(Essential)Example:./creatdict -w a -w b -d 1 -o pass1.txtthen will generate a file named pass1.txt and contains:ab1aB1Ab1AB1a1ba1BA1bA1Bba1bA1Ba1BA1b1ab1AB1aB1A1ab1aB1Ab1AB1ba1bA1Ba1BA);exit;
}
總結
以上是生活随笔為你收集整理的perl社工密码字典生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【持续更新】java多线程面试题整理
- 下一篇: bp验证码爆破插件二改