Доброго времени суток, ув. форумчане.
Есть задача — необходимо написать брут по маске (что то типа как в
PasswordPro)
Решение данной задачи вижу так:
1. Парсим строку, в которой задается маска. Выделяем и запоминаем части с масками со строки
Например — admin?d{3}-pass?|{4}
Здесь нужно выделить 2 части с маской:
?|{3} — набор цифр длинной 3
?x{4} — набор малых лат. букв длинной 4
2. Запускаем вложенный цикл. Внутри цикла запускаем процесс подбора паролей по готовому алгоритму.
Вложенность равна количестку частей (в нашем случае 2).
каждый цикл формирует перебор по заданным в маске символам (000 — aaaa, 000- aaab, .....)
3. На последнем вложенном цикле формируем суммарный пароль
(admin000-passaaaa)
Хочу посоветоватся с вами,
правильный ли ход мыслей.
Может кто видел
готовую библиотеку по перебору, ибо задача не тривиальная.
И вообще — хотелось бы
услышать мнение людей, которые занимались подобного рода задачами.
PS. На codeproject нашел интересный
проект брута. Планирую использовать оттуда код по перебору паролей для каждой части (п. 2 в алгоритме выше)
08.07.11 13:25: Перенесено модератором из '.NET' — TK
Здравствуйте, montegava, Вы писали:
M>Доброго времени суток, ув. форумчане.
M>Есть задача — необходимо написать брут по маске (что то типа как в PasswordPro)
M>Решение данной задачи вижу так:
M>1. Парсим строку, в которой задается маска. Выделяем и запоминаем части с масками со строки
M>M>Например — admin?d{3}-pass?|{4}
M>Здесь нужно выделить 2 части с маской:
M>?|{3} — набор цифр длинной 3
M>?x{4} — набор малых лат. букв длинной 4
M>2. Запускаем вложенный цикл. Внутри цикла запускаем процесс подбора паролей по готовому алгоритму.
M>Вложенность равна количестку частей (в нашем случае 2).
M>каждый цикл формирует перебор по заданным в маске символам (000 — aaaa, 000- aaab, .....)
M>3. На последнем вложенном цикле формируем суммарный пароль
M>(admin000-passaaaa)
M>Хочу посоветоватся с вами, правильный ли ход мыслей.
M>Может кто видел готовую библиотеку по перебору, ибо задача не тривиальная.
M>И вообще — хотелось бы услышать мнение людей, которые занимались подобного рода задачами.
M>PS. На codeproject нашел интересный проект брута. Планирую использовать оттуда код по перебору паролей для каждой части (п. 2 в алгоритме выше)
M>
Хакеры не нужны!
Здравствуйте, montegava, Вы писали:
M>Хочу посоветоватся с вами, правильный ли ход мыслей.
M>Может кто видел готовую библиотеку по перебору, ибо задача не тривиальная.
M>И вообще — хотелось бы услышать мнение людей, которые занимались подобного рода задачами.
Я писал подобное для автоматической генерации по маске неповторяющихся значений.
Архитектурно было решено так:
1. форматная строка парсилась и на ее основе формировался список итераторов (см. IEnumerable в .Net), генерирующих "следующее" значение для кусочка. Для константы тоже создачался итератор с 1 значением.
2. далее, идя с конца списка, начинаем "прокручивать" итератор. как он открутился до упора, переходим к следующем итератору, "сдвигаем" его, резетим итераторы в хвосте и продолжаем алгоритм. в принцыпе, если использовать linq, то это даже можно почеловечески написать.
Здравствуйте, Lloyd, Вы писали:
L>2. далее, идя с конца списка, начинаем "прокручивать" итератор. как он открутился до упора, переходим к следующем итератору, "сдвигаем" его, резетим итераторы в хвосте и продолжаем алгоритм. в принцыпе, если использовать linq, то это даже можно почеловечески написать.
Кстати, 2-я часть получилась довольно-таки прикольной:
static void Main(string[] args)
{
// admin?d{3}-pass?|{2}
var iterators = new[]
{
GetFixed("admin"),
Enumerable.Range(0, 1000).Select(i => i.ToString("D3")),
GetFixed("-pass"),
GetLetters(),
GetLetters(),
};
IEnumerable<string> result = iterators.Aggregate((i1, i2) => (i1.SelectMany(v1 => i2, (v1, v2) => v1 + v2)));
foreach (string value in result)
{
Console.WriteLine(value);
}
}
public static IEnumerable<string> GetFixed(string str)
{
yield return str;
}
public static IEnumerable<string> GetLetters()
{
for (char ch = 'a'; ch <= 'z'; ch++)
{
yield return ch.ToString();
}
}
Здравствуйте, montegava, Вы писали:
M>Есть задача — необходимо написать брут по маске (что то типа как в PasswordPro)
http://rsdn.ru/forum/alg/3121475.aspxАвтор: WolfHound
Дата: 30.09.08
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>