perl社工密码字典生成器

perl社工密码字典生成器
#!/usr/bin/perl -wuse Math::Combinatorics qw(permute);#引入排列模块if (@ARGV == 0){die "错误:No parameter!Enter "?" for help.";}#若无参数提示错误并退出if (@ARGV == 1){if ($ARGV[0] eq '?'){&help;}else{die "Error:At least 2 parameter!"}}#若只有一个参数,判断是否为“?”。若是则调用help函数,否则提示错误并退出my @parameter_array = @ARGV;die "Error:Missing "-o" parameter!" unless(grep(/^-o$/,@parameter_array));#若参数中没有“-o”,提示错误并退出my @words_array;my @numbers_array;my $filename;while(@parameter_array){#处理每一个参数my $parameter = shift @parameter_array;if($parameter eq '-w'){my $para = shift @parameter_array;&checkword($para);push @words_array,$para;#将“-w”后的字符串加入数组@words_array中}elsif($parameter eq '-d'){my $para = shift @parameter_array;&checknum($para);push @numbers_array,$para;#将“-d”后的数字加入到数组@numbers_array中}elsif($parameter eq '-o'){my $para = shift @parameter_array;$filename = $para;#将“-o”后的文件名赋值给$filename变量}else{die "Error:Parameter near "$parameter"";#若有其他类型的参数或者格式不正确则提示错误并退出}}my @everyword_listarray_ref_array;foreach(@words_array){#将每一个字符串参数生成全部大小写数组,并将该数组的引用存放在数组@everyword_listarray_ref_array中my $all_case_array_ref = &creat_all_case($_);push(@everyword_listarray_ref_array,$all_case_array_ref);}foreach(@numbers_array){#将每一个数字参数放在单独的数组中,并将该数组的引用存放在数组@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返回的是所有排列的数组的引用的数组        array_permu(@$_);#对每一种数组排列调用函数}close PASSLIST;sub array_permu{#用来实现数组间的组合        my $aa = shift @_;        foreach(@$aa){                push(@arr,$_);                array_permu(@_) if @_;unless(@_){                print PASSLIST join('',@arr).$/;}                pop @arr;        }}sub creat_all_case{#生成所有大小写的数组,返回该数组的引用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{#实现字母+1        my ($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"";}}sub checknum{#检查是否有其他字符my $num = shift @_;if ($num =~ /[^0-9]/){die "Error:Incorrect format near "$num"";}}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;}

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部