我正在尝试创建一个可以处理特定文件密码的暴力。
我不确定如何让这段代码工作。这就是我到目前为止所拥有的。此代码为密码生成了正确的可能组合,但我不确定如何将其实现为暴力攻击。
my @alpha = qw(a b c d e f g h i j k l m n o p q r s t u v w x y z);
my $password = @alpha[1];
my @combo = ();
for my $one(@alpha){
for my $two(@alpha){
for my $three(@alpha){
for my $four(@alpha){ push @combo, "$one$two$three$four\n"} }}
我认为不需要在某处使用此命令,secret_file_brute.zip
是我用来测试的文件。
我不确定如何声明$password
变量以及如何在$password
命令之前逐个输入我生成的组合,直到密码匹配为止。
$returnVal = system("unzip -qq -o -P $password
secret_file_brute.zip > /dev/null 2>&1");
答案 0 :(得分:1)
我认为您正在尝试使用26个拉丁字符生成所有可能的密码组合。对?为什么不使用增量运算符?
$password = "a";
for (;;) {
say "$password";
$password++;
}
$password
将从a
转到z
,然后从aa
转到zz
,然后从aaa
转到zzz
因此,从26个拉丁字母字符生成密码的每个可能组合。
如果您只对四种角色组合感兴趣:
$password = "aaaa";
while ( length $password < 5 ) {
say "$password";
$password++;
}
答案 1 :(得分:0)
强力密码破解效率非常低,因此除了作为概念验证之外没有其他用处。 你有一个4字符的字母密码,这是一个相当简单的案例。
首先 - 你可以写:
my @alpha =( "a".."z" );
生成正在执行的单词将起作用,但是您将插入换行符,这意味着您正在运行的任何system
命令都将无效。
您也可能会发现,随时随地进行尝试可以提高您的速度,尤其是因为您可以轻松地使用多处理进行此类操作。
此外 - 您可以捕获system
的返回码以查看成功的时间。捕获系统的 text 输出无济于事 - 您需要检查$?
- 请参阅:http://perldoc.perl.org/functions/system.html
这样的事可能吗?
#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;
my $parallel = 8;
my @alpha = ( "a" .. "z" );
my $manager = Parallel::ForkManager->new($parallel);
my $parent_pid = $$;
for my $one (@alpha) {
for my $two (@alpha) {
for my $three (@alpha) {
for my $four (@alpha) {
$manager->start and next;
system(
"unzip -qq -o -P $one$two$three$four secret_file_brute.zip > /dev/null 2>&1"
);
if ( not $? ) {
print "Password was $one$two$three$four\n";
kill $parent_pid;
}
$manager->finish;
}
}
}
}