文件密码暴力破解测试
Brute force attack test on password for file
我正在尝试创建一种适用于特定文件密码的暴力破解方法。
我不确定如何让这段代码起作用。这是我到目前为止所拥有的。此代码生成正确的密码可能组合,但我不确定如何将其实施为暴力攻击。
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");
暴力破解密码效率非常低,因此除了作为概念证明外没有什么用处。
您有一个 4 个字符的字母密码,这是一个相当简单的案例。
首先 - 你可以写:
my @alpha =( "a".."z" );
像您一样生成单词是可行的,但是您将插入一个换行符,这意味着您使用的任何 system
命令 运行 都将无效。
您还可能会发现边做边尝试会提高您的速度,尤其是因为您可以简单地使用多处理来进行此类操作。
此外 - 您可以捕获 system
的 return 代码以查看何时成功。捕获系统的 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;
}
}
}
}
我认为您正在尝试使用 26 个拉丁字符生成所有可能的密码组合。正确的?为什么不使用 increment 运算符?
$password = "a";
for (;;) {
say "$password";
$password++;
}
$password
将从 a
变为 z
,然后从 aa
变为 zz
,然后从 aaa
变为 zzz
, 等等。从而从 26 个拉丁字母字符生成每个可能的密码组合。
如果您只对四个字符组合感兴趣:
$password = "aaaa";
while ( length $password < 5 ) {
say "$password";
$password++;
}
我正在尝试创建一种适用于特定文件密码的暴力破解方法。
我不确定如何让这段代码起作用。这是我到目前为止所拥有的。此代码生成正确的密码可能组合,但我不确定如何将其实施为暴力攻击。
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");
暴力破解密码效率非常低,因此除了作为概念证明外没有什么用处。 您有一个 4 个字符的字母密码,这是一个相当简单的案例。
首先 - 你可以写:
my @alpha =( "a".."z" );
像您一样生成单词是可行的,但是您将插入一个换行符,这意味着您使用的任何 system
命令 运行 都将无效。
您还可能会发现边做边尝试会提高您的速度,尤其是因为您可以简单地使用多处理来进行此类操作。
此外 - 您可以捕获 system
的 return 代码以查看何时成功。捕获系统的 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;
}
}
}
}
我认为您正在尝试使用 26 个拉丁字符生成所有可能的密码组合。正确的?为什么不使用 increment 运算符?
$password = "a";
for (;;) {
say "$password";
$password++;
}
$password
将从 a
变为 z
,然后从 aa
变为 zz
,然后从 aaa
变为 zzz
, 等等。从而从 26 个拉丁字母字符生成每个可能的密码组合。
如果您只对四个字符组合感兴趣:
$password = "aaaa";
while ( length $password < 5 ) {
say "$password";
$password++;
}