Я пытаюсь создать грубую силу, которая будет работать с конкретным паролем файлов.

Я не знаю, как заставить этот код работать. Это то, что у меня есть до сих пор. Этот код создает правильные возможные комбинации для пароля, но я не уверен, как реализовать это в атаке грубой силы.

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
bob george 6 Мар 2015 в 11:12

2 ответа

Лучший ответ

Взлом паролей методом грубой силы очень неэффективен, поэтому полезен только в качестве доказательства концепции. У вас есть 4-значный буквенный пароль, что является довольно тривиальным случаем.

Во-первых, вы можете написать:

my @alpha =( "a".."z" );

Генерация слов по мере того, как вы делаете, будет работать, но вы вставите перевод строки, что означает, что любая команда system, которую вы выполняете, не будет работать.

Вы также можете обнаружить, что попытки на ходу улучшат вашу скорость, не в последнюю очередь потому, что вы можете тривиально использовать многопроцессорность для такого рода операций.

Также - вы можете перехватить код возврата для system, чтобы увидеть, когда вы добьетесь успеха. Захват текстового вывода системы не поможет - вам нужно проверить $? - см. 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;
            }
        }
    }
}
0
Sobrique 6 Мар 2015 в 15:06

Я думаю, вы пытаетесь сгенерировать всевозможные комбинации паролей из 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
David W. 6 Мар 2015 в 15:55