|
03.08.2010, 16:13
|
#1
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Теория брута. Часть 3. C# version
> Теория брута. Часть 3 <
Данная статья является продолжением серии статей на тему о том что такое Брутфорс.
В данном гайде речь пойдет о генерации последовательных паролей с целью покрытия всего диапазона возможных комбинаций. Данный вид генерации паролей является классической схемой грубого перебора.
Конечный материал данной статьи (скрин):
Теория: - Грубый перебор представляет собой перебор всех возможных комбинация из указанного словаря заданной длины.
Что это означает?
Для примера возьмем словарь из 3х символов: abc.
Суммарное кол-во комбинаций комбинаций расчитывается по формуле:
(длина словаря) ^ (длина пароля)
^ - возведение в степень.
|
Цитата: |
|
|
|
|
Сообщение от Пример |
|
|
|
|
|
|
|
3 ^ 3 = 27
Список комбинаций:
aaa, aab, aac,
aba, abb, abc,
aca, acb, acc,
baa, bab, bac,
bba, bbb, bbc,
bca, bcb, bcc,
caa, cab, cac,
cba, cbb, cbc,
cca, ccb, ccc
|
|
|
|
|
|
Соответственно, если длина словаря у нас 26 символов(латинский алфавит), а длина пароля 6 символов, то суммарное кол-во комбинаций будет равно: 26 ^ 6 = 308 915 776.
- Алгоритм генерации:
У нас имеется массив чисел, который имеет размерность такуюже как и длина пароля.
К примеру у нас пароль длиной 3 символа:
Массив у нас выглядит так [0, 0, 0] массив индексов
Так же мы имеем наш словарь: abc (длина 3)
Соответственно значения, которые может принимать индекс (0-2).
Логика алгоритма проста. В цикле мы инкрементируем(+1 делаем) последний элемент массива с индексами и выполняем 2 проверки.
После инкрементирования мы получаем элемент из словаря по индексу для каждого элемента массива и записываем в одну строку.
1ая проверка:
Проверка идет задом на перед, тоесть с последнего элемента до первого.
Если элемент, который мы инкрементируем равен 2 (максимальное значение), то мы его обнуляем, а индекс перед ним плюсуем на 1 и так до первого элемента массива.
2ая проверка:
Проверяем все индексы, если все имеют максимальное значение, то прерываем цикл и выходим.
|
Цитата: |
|
|
|
|
Сообщение от Пример инкрементирования |
|
|
|
|
|
|
|
000, 001, 002,
010, 011, 012,
020, 021, 022,
100, 101, 102,
110, 111, 112,
120, 121, 122,
200, 201, 202,
210, 211, 212,
220, 221, 222
|
|
|
|
|
|
А заменив индексы, на элементы из словаря мы получим как раз выше описанный пример.
Давайте приступим к реализации: - Для реализации данного проекта были созданы следующие классы:
- PasGen.cs
Статический класс, реализующий сам алгоритм генерации.
- Рассмотрим структуру нашего класса:
Код:
public static class PassGen
{
// Событие, которые будет вызываться каждый раз при генерации пароля
public static event EventHandler ProgressChanged;
private static void OnProgressChanged(object sender, EventArgs e)
{
if (ProgressChanged != null)
ProgressChanged(sender, e);
}
// Наш словарь
private static string dictAlphaL = "abcdefghijklmnopqrstuvwxyz";
// Свойства хранящие в себе информаю о текущем пароле
// и общем кол-во паролей, которое будет сгенерировано
public static Int32 CurrentPassword { get; set; }
public static Int32 TotalPasswords { get; set; }
// Метод, который производит генерацию паролей и сохраняет
// их в указанный нами файл
public static void Generate(string path, int length)
{
// Создаем новый поток и указываем ему анонимный метод для выполнения
Thread worker = new Thread(new ThreadStart(
delegate
{
try
{
// Обнуляем счетчик сгенерированных паролей
CurrentPassword = 0;
// Считаем кол-во паролей, которое будет сгенерировано
TotalPasswords = dictAlphaL.Length;
for (int i = 0; i < length - 1; i++) TotalPasswords *= dictAlphaL.Length;
// Создаем билдер строк, который будет хранить у нас пароль
StringBuilder pwd = new StringBuilder();
// Создаем массив с интовыми значениями, который
// будет хранить индексы элементов из словаря
int[] baseVal = new int[length];
// присваиваем всем индексам начальное значение 0
for (int i = 0; i < baseVal.Length; i++) baseVal[i] = 0;
// Создаем поток на запись в файл
using (StreamWriter sw = new StreamWriter(File.Open(path, FileMode.Create)))
{
// Основной цикл, который будет производить генерацию паролей
// Исходя из данных условий, цикл будет выполнятся бесконечно
// или же пока мы програмно из него сами не выйдем
while (true)
{
// Вложенный цикл, который у нас производит корректировку значений
// массива с индексами
for (int i = baseVal.Length - 1; i >= 0; i--)
{
if (i != 0)
{
if (baseVal[i] == dictAlphaL.Length)
{
baseVal[i] = 0;
baseVal[i - 1]++;
}
}
}
// Переинициализуруем билдер пароля, чтобы стереть из него все данные.
pwd = new StringBuilder();
// Из полученных индексов формируем пароль
// Берем символ из словаря по индексу для каждого элемента массива
foreach (int i in baseVal) { pwd.Append(dictAlphaL[i]); }
// Записываем наш полученный пароль как новую строку в файл
sw.WriteLine("{0}", pwd.ToString());
// На данном этапе производим проверку не пора ли нам выйти из цикла
bool exit = true;
// Для каждого индекса в массиве выполняем проверку, не равен ли он максимальному
// для себя значению. Если хоть один индекс не равен, значит отменяем выход
// и устанавливаем флаг в False.
foreach (int i in baseVal) if (i != dictAlphaL.Length - 1) { exit = false; break; }
// Сама проверка на выход
// Если в предыдущем шаге все индексы имели максимальное значение
// То условия сейчас выполнится и мы програмно выйдем из цикла
if (exit) break;
// Если условие еще не выполнилось, то увеличиваем последний
// индекс из массива на 1
baseVal[baseVal.Length - 1]++;
// Увеличиваем на 1 свойство отвечающее на кол-во
// сгенерированных паролей
CurrentPassword++;
// Вызываем событие
OnProgressChanged(null, new EventArgs());
}
sw.Close();
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}));
// Устанавливаем приоритет потока на максимальный
// Для ускорения процессе генерации
worker.Priority = ThreadPriority.Highest;
// Запускаем поток
worker.Start();
}
}
Код полностью закомментирован, чтобы вам было проще понять что именно выполняется в данный момент времени.
Во вложении находится готовый проект на Visual Studio 2010.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
Последний раз редактировалось Kitsune; 03.08.2010 в 16:17.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
04.08.2010, 01:56
|
#2
|
|
|
|
Разведчик
|
Регистрация: 10.06.2010
Сообщений: 20
Популярность: 12
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
|
Re: Теория брута. Часть 3. C# version
А можно както изменить буттон на круглый просто у меня должна быть кнопка круглая.
|
|
|
04.08.2010, 10:11
|
#3
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Теория брута. Часть 3. C# version
DiabloIIIII,
1. Это не имеет отношения к гайду.
2. Создайте свою кнопку любой формы и рисуйте её хоть зигзагами.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
05.08.2010, 13:47
|
#4
|
|
|
|
Разведчик
|
Регистрация: 26.07.2010
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Теория брута. Часть 3. C# version
Где можно скачать полный список команд и их обозночение для C#
|
|
|
05.08.2010, 13:57
|
#5
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Теория брута. Часть 3. C# version
MaNЬяК, в C# нет команд. печаль
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
05.08.2010, 17:47
|
#6
|
|
|
|
Разведчик
|
Регистрация: 10.06.2010
Сообщений: 20
Популярность: 12
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
|
Re: Теория брута. Часть 3. C# version
TBX1n, я очень плохо знаю c# плиз скажи куда войти и как сделать свою кнопку
Последний раз редактировалось DiabloIIIII; 05.08.2010 в 17:49.
|
|
|
05.08.2010, 18:18
|
#7
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Теория брута. Часть 3. C# version
DiabloIIIII, задача по созданию своих элементов управления вам не по силам. Через месяца 2-3 усердного изучения C# может быть и сможете. А так, лучше найдите чью-то готовую и используйте.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
05.08.2010, 18:54
|
#8
|
|
|
|
Разведчик
|
Регистрация: 10.06.2010
Сообщений: 20
Популярность: 12
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
|
Re: Теория брута. Часть 3. C# version
Ладно я буду молчать=)Я не знаю как даже чужую поставить.Я молчу
|
|
|
07.08.2010, 01:30
|
#9
|
|
|
|
Разведчик
|
Регистрация: 23.12.2009
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Теория брута. Часть 3. C# version
простите если вопрос не по теме, но всё же=) если я пойду на компьютерный курсы соответсвующие теме, меня этому научат?
|
|
|
07.08.2010, 17:33
|
#10
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Теория брута. Часть 3. C# version
ВаняМелдо, нет. На сколько мне известно, на компьютерных кусрах учат включение/выключению пк и работе в паре примитивных программ.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
30.11.2014, 18:49
|
#11
|
|
|
|
Разведчик
|
Регистрация: 30.11.2014
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Теория брута. Часть 3. C# version
Длину чего вы передаете в метод Generate?
|
|
|
30.11.2014, 23:19
|
#12
|
|
|
|
Рыцарь-капитан
|
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Теория брута. Часть 3. C# version
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
17.01.2015, 14:22
|
#13
|
|
|
|
Разведчик
|
Регистрация: 24.06.2010
Сообщений: 8
Популярность: 33
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
|
Re: Теория брута. Часть 3. C# version
Есть в VS такая штука для дизайнеров как Blend. Открой форму через Blend и делай что хочешь
Добавлено через 2 часа 37 минут
Самое важное в бруте - это запросы и обработка ответов от сервера. То, что написано в первом посте это генерация баз для брута, и для этих целей есть отдельные утилиты
Последний раз редактировалось sanchezsanya; 17.01.2015 в 17:00.
Причина: Добавлено сообщение
|
|
|
09.07.2015, 21:18
|
#14
|
|
|
|
Разведчик
|
Регистрация: 09.07.2015
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Теория брута. Часть 3. C# version
Было бы неплохо начинать разбитые гайды с ссылок на прошлые части. -_-
|
|
|
09.07.2015, 21:46
|
#15
|
|
|
|
Сержант
|
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 83981
Сказал(а) спасибо: 564
Поблагодарили 258 раз(а) в 195 сообщениях
|
Re: Теория брута. Часть 3. C# version
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 08:44.
|
|