Перебор по маске
От: montegava  
Дата: 04.07.11 19:55
Оценка:
Доброго времени суток, ув. форумчане.

Есть задача — необходимо написать брут по маске (что то типа как в 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
Re: Перебор по маске
От: Аноним  
Дата: 07.07.11 13:23
Оценка:
Здравствуйте, 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>


Хакеры не нужны!
Re: Перебор по маске
От: Lloyd Россия  
Дата: 07.07.11 13:48
Оценка:
Здравствуйте, montegava, Вы писали:

M>Хочу посоветоватся с вами, правильный ли ход мыслей.

M>Может кто видел готовую библиотеку по перебору, ибо задача не тривиальная.
M>И вообще — хотелось бы услышать мнение людей, которые занимались подобного рода задачами.

Я писал подобное для автоматической генерации по маске неповторяющихся значений.
Архитектурно было решено так:
1. форматная строка парсилась и на ее основе формировался список итераторов (см. IEnumerable в .Net), генерирующих "следующее" значение для кусочка. Для константы тоже создачался итератор с 1 значением.
2. далее, идя с конца списка, начинаем "прокручивать" итератор. как он открутился до упора, переходим к следующем итератору, "сдвигаем" его, резетим итераторы в хвосте и продолжаем алгоритм. в принцыпе, если использовать linq, то это даже можно почеловечески написать.
Re[2]: Перебор по маске
От: Lloyd Россия  
Дата: 07.07.11 14:07
Оценка:
Здравствуйте, 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();
    }
}
Re: Перебор по маске
От: WolfHound  
Дата: 08.07.11 13:27
Оценка:
Здравствуйте, montegava, Вы писали:

M>Есть задача — необходимо написать брут по маске (что то типа как в PasswordPro)

http://rsdn.ru/forum/alg/3121475.aspx
Автор: WolfHound
Дата: 30.09.08
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.