2015-03-09 3 views
0

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

$password = "aaaa"; 
while (length $password < 5) { 
print "$password\n"; 
$password++; 
+0

каких файла? Как пароль используется в этом файле? – Thilo

+1

Нет стандартного механизма защиты паролем «файла», поэтому мы не можем сказать вам, как программно вставлять пароль в неуказанную систему, используемую для ее защиты. – Quentin

+0

Это то, что мне сказали, но я не уверен, как его реализовать. $ returnVal = system ("unzip -qq -o -P $ password secret_file_brute.zip>/dev/null 2> &1"); –

ответ

-2

Согласно странице man я нашел, unzip возвращает код выхода 82, когда он не может расшифровать.

sub try { 
    my ($password) = @_; 
    system("unzip -qq -o -P $password secret_file_brute.zip >/dev/null 2>&1"); 
    die("Can't launch unzip: $!\n") if $? == -1; 
    die("unzip killed by signal ".($? & 0x7F)."\n") if $? & 0x7F; 
    my $exit_code = $? >> 8; 
    die("unzip exited with error $exit_code\n") if $exit_code && $exit_code != 82; 
    return !$exit_code; 
} 

Ваш код не генерирует все возможные пароли (например, он не генерирует aaa).

sub brute_force { 
    for (my $password = 'a'; length($password)<5; ++$password) { 
     return $password if try($password); 
    } 

    return undef; 
} 

Последний бит предназначен для отображения результатов.

{ 
    my $password = brute_force(); 
    defined($password) 
     or die("Password not found\n"); 

    print("$password\n"); 
} 
+0

Спасибо, но как бы проверить это на конкретном файле? –

+0

Обновлено на основе ваших других комментариев. – ikegami

0

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

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

Пока вы используете только буквы, вы можете просто увеличить скаляр вместо циклов вложенности. Если вам не нужно использовать другие символы, я уверен, вы могли бы просто использовать массив возможных символов и приращения через этот массив для каждой позиции, хотя давайте игнорировать, что, так как вы, кажется, нужны только те буквы =)

sub brute2() 
{ 
print "Bruteforce Attack...\n"; 
print "Enter password length: "; #Prompt user for maximum length for pass 
chomp(my $plen = (<>)); #Receive input and remove newline character 
print "Password Length is $plen\n"; 
$plen++; 
print "Press any key to continue.\n"; #Execute once they hit any key 
if (<>) 
{ 

    my $pass = "a"; #This code assumes only letters a..z, so we just set here 
    while (length $pass < $plen) #Run check loop until we exaust all possibilities within the maximum length 
    { 

     my $status = system("unzip -pp -o -P $pass secret_file_brute.zip > /dev/null 2>&1"); #System call to compare our password against a zip file, this will set status to the return value 
     print ("Attempting: $pass Return: $status\n"); 
     if ($status == 0) #Return value of 0 means success 
     { 

     print ("Password is: $pass Return is: $status\n"); #Print correct password. I did return value also for debug 
     last; #Break loop since we got correct password 

     } 
     $pass++; #Increment $pass var to next iteration IE "a" to "b", "aa" to "ab", "zzz" to "aaaa" etc... 

    } 

} 
} 
+0

Спасибо за помощь –