文件密码暴力破解测试

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++;
}