Как написать программу для подбора логина и пароля

Собственно, на выходе получаем что-то типа sdf_a_safasfasfasdf . Как можно реализовать с этого подбор пароля?

Отслеживать
user361068
задан 6 окт 2020 в 7:49
189 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Ну давайте разберемся как именно генерируется пароль

  1. сначала выбирается сколько слов из словаря будет выбрано для пароля — переменная max (по умолчанию 1)
  2. далее из словаря выбирается слово
  3. слово дублируется 3 раза, причем после последнего дублирования ставится «_»

Правда sdf_a_safasfasfasdf с таким алгоритмом не получится, скорее должно было бы получиться sdfsdfsdf_aa_

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

// формируем очередное звено пароля void prepare(std::string pass, const int level, const int max_level, const std::vector // если сформировано уже максимальное кол-во звеньев — проверить пароль и — выйти if (level >= max_level) < if (gen == pass) std::cout // перебрать все слова в словаре для данного звена пароля: const int pwLen = 3; for (const std::string std::string tmp_res = res; for (int index = 0; index < 3; index ++) res += word + ((index < pwLen — 1) ? «» : «_»); // сформировать следующее звено пароля prepare(tmp_res, pass, level + 1, max_level, dict); >> std::string res = «»; prepare(res, «sdfsdfsdf_aa_xxx_», 0, 3, dict);

Если размер пароля (кол-во слов из словаря) не фиксировано, тогда будет выглядеть чуть по другому:

ГЕНЕРАТОР ПАРОЛЕЙ НА PYTHON ЗА 10 МИНУТ

Надо проверять пароль после генерации всегда, а max_level использовать просто для ограничения максимального размера пароля

// формируем очередное звено пароля void prepare(std::string pass, const int level, const int max_level, const std::vector // проверить пароль if (gen == pass) < std::cout // если сформировано уже максимальное кол-во звеньев — выйти if (level >= max_level) < return; >// перебрать все слова в словаре для данного звена пароля: const int pwLen = 3; for (const std::string std::string tmp_res = res; for (int index = 0; index < 3; index ++) res += word + ((index < pwLen — 1) ? «» : «_»); // сформировать следующее звено пароля prepare(tmp_res, pass, level + 1, max_level, dict); >> std::string res = «»; prepare(res, «sdfsdfsdf_aa_xxx_», 0, 1000, dict);

Для оптимизации надо сделать так, чтобы если пароль найден на каком-то этапе, то дальше не продолжать работу:

// формируем очередное звено пароля bool prepare(std::string pass, const int level, const int max_level, const std::vector // проверить пароль if (gen == pass) < std::cout // если сформировано уже максимальное кол-во звеньев — выйти if (level >= max_level) < return false; >// перебрать все слова в словаре для данного звена пароля: const int pwLen = 3; for (const std::string std::string tmp_res = res; for (int index = 0; index < 3; index ++) res += word + ((index < pwLen — 1) ? «» : «_»); // сформировать следующее звено пароля const bool is_success = prepare(tmp_res, pass, level + 1, max_level, dict); // если пароль был найден — ничего уже не делать if (is_success == true) return true; >return false; >
Отслеживать
ответ дан 6 окт 2020 в 8:11

Читайте также:
Программы для настройки роутера zte

37k 4 4 золотых знака 25 25 серебряных знаков 67 67 бронзовых знаков

Как создать программу для взлома паролей.

Спасибо за быстрый и подробный ответ! Но есть проблема, мой компилятор (использую среду Xcode) не хочет импортировать Ваш код. Я импортирую его в конец своего, и получаю Function definition is not allowed here.

6 окт 2020 в 8:44
6 окт 2020 в 8:46

да, это задание на лабораторную работу. Код можно и используя рекурсивные функции, но к сожалению, я в них не силен. Скорее всего я неправильно объяснил суть задания. Первоначально, надо создать брутфорс, который берет из словаря 3 слова. Между словами вместо пробела ставит «». И сравнивает с введенным паролем (он генерируется по такому же принципу, 3 слова из словаря и «»).

Генератор то есть, но как реализовать брут — не могу понять. Извините если неправильно выразился в первый раз 😉

6 окт 2020 в 9:12

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

#include #include #include #include #include using namespace std; int main(int argc, char* argv[]) < const char* fname = «wordlist.txt»; /* Parse command-line arguments */ int max = 1; int key; if(argc == 2) < max = atoi(argv[1]); >/* Open word list file */ ifstream input; input.open(fname); if(input.fail()) < cerr /* Read to end and load words */ vector wordList; string line; while(getline(input, line)) < wordList.push_back(line); >/* Seed from random device */ random_device rd; default_random_engine gen; gen.seed(rd()); uniform_int_distribution dist(0, wordList.size() — 1); /* Output as many passwords as required */ const int pwLen = 3; string password = «»; for(int i = 0; i < max; i++) < for(int j = 0; j < pwLen; j++) < password += (string)(wordList[dist(gen)] + ((j != pwLen — 1) ? «_» : «»)); >cout cout // если слово не было найдено — выйти if (new_pos == -1) break; pos = new_pos; > // если удалось дойти до конца пароля, значит успех if ((pos == password.size())) < std::cout return 0; >
Отслеживать
ответ дан 6 окт 2020 в 10:53

189 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков

да, это задание на лабораторную работу. Код можно и используя рекурсивные функции, но к сожалению, я в них не силен. Скорее всего я неправильно объяснил суть задания. Первоначально, надо создать брутфорс, который берет из словаря 3 слова. Между словами вместо пробела ставит «».

И сравнивает с введенным паролем (он генерируется по такому же принципу, 3 слова из словаря и «»). Генератор то есть, но как реализовать брут — не могу понять. Извините если неправильно выразился в первый раз 😉 – Boredix 5 минут назад

Читайте также:
Программа настройки пид регулятора

Для удобства вынес в другой комментарий

Итак, теперь задание стало более понятным и более узким

  1. есть словарь слов
  2. из словаря выбирается ТОЛЬКО 3 слова, которые соединяются разделителем (пустой символ? или все таки «_» было в коде?)
  3. сравнивается с тестовым паролем и определяется — могло ли оно быть сгенерировано из словаря согласно установленным правилам

Если так, то код будет простым и без рекурсий:

// заполнить массив слов std::vector wordList; // пароль с которым надо сравнивать const std::string password = «password»; // непосредственно алгоритм брутфорса for (const std::string for (const std::string for (const std::string // собрать слово через разделитель «_» const std::string brutforced = word1 + std::string(«_») + word2 + std::string(«_») + word3; // сравнить с паролем и в случае совпадения — выйти if (password == brutforced) < std::cout > > >

в каком виде код принимается я не знаю — так что область сравнения надо допиливать (надо возвращать значение или писать на экране что-то — в общем зависит от задачи)

Брутфорс

Требуется написать свой Bruteforce т. е. пользователь вводит какой-то пароль и программа методом перебора всех возможных вариантов находит этот пароль. Предполагается, что программа не может отработать и не найти пароль. Ограничение перебора осуществляется пользователем, т.е будут ли включены в перебор цифры, заглавные буквы, символы и т. д.

Рекомендую ограничить длину вводимого пароля до 4-х символов, больше не надо, иначе программа долго будет работать. Еще лучше, если на этапе разработки программы, длина пароля будет 2 — 3 символа. Кроме того, задайте в программе множество допустимых символов пароля. Например, в пароле могут использоваться только цифры и/или буквы, это заметно поможет ускорить процесс отладки программы-брутфорса.

К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.

Следующие статьи помогут вам в решении данной задачи:
Дата: 07.01.2014
Поделиться:

Вы должны войти, чтобы оставить комментарий.

Источник: cppstudio.com

Взламываем пароль методом «Грубой Силы»

Взлом сайта Пентагона методом Brute Force.

Дана библиотека, содержащая защищенную паролем фразу. О пароле известно, что:

  • генерируется новый пароль при каждой инициализации библиотеки;
  • длина пароля от 1 до 5 символов;
  • разрешенные символы в пароле: числа, прописные и строчные буквы английского алфавита.

Известна структура библиотеки:

public class ProtectedBox

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

Применяем грубую силу

Какие только задачи не поднимаются во время проектирования, тестирования и отладки. Сегодня мы рассмотрим довольно простую с точки зрения алгоритмов задачу — перебор всех возможных паролей из жестко определенных диапазонов, такой подход называется Brute Force.

Нам известно что пароль состоит только из цифр и букв английского алфавита, значит мы можем составить специфический словарь символов и работать с ним. Символы проще всего представить специальным примитивным типом char. Для инициализации словаря будем использовать ArrayList, char в Java соответствует класс Character, поэтому типизуем коллекцию им, кстати, такое перевоплощение в Java называется Autoboxing.

Читайте также:
Программа как установить сигнализацию

private static List generateSymbols() < Listsymbols = new ArrayList(); for (char c=’0′; c

Итак, в нашем словаре оказалось 62 символа. Прикинем возможное количество комбинаций(c), оно будет высчитываться по формуле c=l n , где l-длина словаря, n-число символов.

Длина Комбинации
1 62
2 3 844
3 238 328
4 14 776 336
5 916 132 832

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

Построим класс подбора по аналогии с принципом действия счетного механизма старого счетчика.

Циферблат дискового счётчика

Циферблат дискового счётчика

Счетчик имеет несколько барабанов, барабан проходит по кругу и значения повторяются. Каждый барабан этого счетного механизма пройдя круг, цепляет при помощи переключателя следующий барабан и поворачивает его на 1 деление, все остальные барабаны работают аналогично. Другими словами, в счетчике мы поворачиваем только 1 барабан, а значения всех остальных барабанов меняются автоматом. Так же в этой модели мы имеем возможность считать разом значения со всех баранов. Просто идеальная система для нашего алгоритма подбора паролей!

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

Модель барабанного счетчика очень похожа на шаблон проектирования «Цепочка обязанностей».

package ru.jcup.saa.tasks.keygen; import java.util.List; public class Link < //’-1′- пустое значение private int currentIndex = -1; private Listsymbols; private Link next; public Link(List symbols, Link link) < this.symbols = symbols; this.next = link; >//Переключатель public void next() < currentIndex++; if (currentIndex==symbols.size()) < currentIndex=0; if (next!=null) < next.next(); >> > //Записываем сгенерированный пароль в generateKey public void getKey(StringBuilder generateKey) < if (next!=null) < next.getKey(generateKey); >if (currentIndex>-1) < generateKey.append(symbols.get(currentIndex)); >> >

Осталось написать только управляющий класс.

Апдейт от 06.04.2022
Не прошло и 2х лет, как статья получила фидбек. Мне очень приятно видеть неравнодушие в глазах посетителей) В связи с этим, объявляю официальную ветку комментов.

MAPTbIwKA с гранатой в пух и прах разносит автора бложика

MAPTbIwKA с гранатой в пух и прах разносит автора бложика

Тут могли располагаться шибко умные слова, великие мысли учёных или изречения скромных блоггеров «jcup.ru». Душераздирающий текст, что заставит прослезиться палача с каменным сердцем. Текст, прочтённый всего лишь раз, способный изменить читателя навсегда. Но, на самом деле, нам нужно было чем-то занять блок внизу.

Источник: jcup.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru