Я пытаюсь создать грубую силу, которая будет работать с конкретным паролем файлов.
Я не знаю, как заставить этот код работать. Это то, что у меня есть до сих пор. Этот код создает правильные возможные комбинации для пароля, но я не уверен, как реализовать это в атаке грубой силы.
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");
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;
}
}
}
}
Я думаю, вы пытаетесь сгенерировать всевозможные комбинации паролей из 26 латинских символов. Правильно? Почему бы не использовать оператор приращения ?
$password = "a";
for (;;) {
say "$password";
$password++;
}
$password
перейдет от a
к z
, затем от aa
к zz
, затем от aaa
к zzz
и т. Д. Таким образом генерируются все возможные комбинации паролей из 26 латинских буквенных символов.
Если вас интересуют только четыре комбинации символов:
$password = "aaaa";
while ( length $password < 5 ) {
say "$password";
$password++;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.