Не многим из нас нравится выполнять трудоемкую задачу в одиночку. Процесс тянется долго, расходуются физические/умственные/нервные ресурсы. И в который раз мы понимаем, сколько времени можно было сэкономить, работая в коллективе. Компьютер не является исключением из этого правила. Только он не способен осознавать, насколько сложна поставленная перед ним задача, поэтому процесс ее выполнения может растянуться на долгий срок. Другое дело кластер – своего рода коллектив компьютеров, работающих над общей задачей и каждый из которых делает то, на что способен. Однако и здесь нужен сервер, который будет распределять задачу… Оставим эту «балталогию» и, чтобы не обсуждать абстрактные вещи, поставим конкретную задачу – перебор пароля по MD5-хешу. Другими словами: поиск коллизии. Частенько возникает потребность восстановить строку, имея на руках ее MD5-хеш. Забудем идею перебора по словарю, чтобы не ограничивать себя его размерами и предположим, что не нашлось коллизии ни на одном из ресурсов в сети. Остается генерировать посимвольно строки и сравнивать их хеш с целевым. Не иначе как настоящий брутфорс! Однако выполнять этот процесс на одной машине, по меньшей мере, нерационально. Гвоздь программы. DefBrute – система распределенного перебора строк для MD5-хешей. Особенности ее функционирования и процесс создания были детально описаны в статье "Система распределенных вычислений. Грид-сеть." . Там же можно найти исходные коды программного обеспечения, лежащие в основе рассматриваемой системы, с подробными комментариями. Система состоит из серверной и клиентской частей. Сервер. Серверная часть (DefBrute v1.0.exe) выполняет функции генерации, учета и передачи диапазонов строк клиентам. Генерация диапазонов основана на множестве символов (Char Set) (из которых, как предполагается, состоит пароль) и длины пароля (Password Length). Процесс генерации представляет собой простую инкрементацию числа из n-ричной системы счисления. Каждому числу соответствует биективное (взаимно-однозначное) отображение из множества строк. За подробностями генерации обращайтесь к статье многоуважаемого ZaCo «Разделение диапазона перебора паролей» . Далее сгенерированный диапазон строк передается клиенту с помощью технологии .NET Remoting. Главное (и единственное) окно программы состоит из нескольких областей. Рассмотрим эти области детальнее. Область Connect Settings содержит в себе опцию: Server Port, которая (как нетрудно догадаться) отвечает за номер порта, который будет открыт на сервере и который также необходимо указать клиенту. Следующая область объединяет все опции для перебора. Поле User CharSet позволяет пользователю задать множество символов, которые, по его предположению, могут быть использованы в пароле. Preset - предустановленные множества символов (латинские в верхнем регистре, в нижнем регистре, цифры и специальные символы). Думаю, тут все понятно. Enemy Hash - поле в котором указывает целевой MD5-хеш. Password Length - предполагаемая длинна пароля. Незнаем? – указываем с запасом. Statistics - область статистики, в которой первым пунктом является поле Clients Online. Оно показывает количество клиентов, получивших диапазон для перебора. Range Brute Progress - прогресс-бар, отображающий процесс перебора диапазона всех возможных строк. Collision - область, в которой выводится строка, соответствующая целевому MD5-хешу. Клиент. Клиент представляет собой консольное приложение, формат запуска которого: defbc.exe <server ip> <server port>. Возможно, кому-то покажется, что программа далека от совершенства, о чем могут свидетельствовать необработанные исключения и т.п. Для искушенного пользователя, а также для любителей оптимизировать и подгонять все «под себя», в архиве с программой присутствуют исходные коды на C# в виде проекта (Solution) для Visual Studio 2008. DefBrute v1.0 * * Требуется наличие .NET Framework 2.0 или выше. (c) c0n Difesa (defec.ru)
Особенности генерации диапазона строк. Рассмотрю некоторые детали функционирования системы, чтобы материал не накапливался и не разрастался до объема статьи, которую нет времени писать. Одной из ключевых особенностей серверной части является генерация диапазона строк для последующего перебора клиентом. Как было упомянуто в первом посте, она основана на взаимооднозначном соответствии строки символов с числом. На этом моменте остановлюсь подробнее. Предположим, пользователю требуется перебрать всевозможные комбинации (строки), составленные из символов: Code: str = “skz!&#” Пронумеруем каждый символ: Code: s(1); k(2); z(3); !(4); & (5); #(6) Всего символов n=6, значит работать будем в n-ричной системе счисления. Новая строка будет получаться в результате итерации числа, которое также представляет свою строку. Для наглядности приведу пример: Code: Число Соответствующая ему строка 1 s 2 k 3 z … 6 # [I](Т.к. система 6-ричная, то если число >6 переходим в следующий разряд)[/I] 7 s# 8 k# 9 z# И т. д. Данный принцип используется подавляющим большинством переборщиков паролей. Надеюсь он описан понятно.
http://ru.wikipedia.org/wiki/Коллизия 1. если ты реализуешь нахождение коллизии хеш-функции от заранее заданного блока данных с хеш-функцией от произвольного другого блока данных (на современных компьютерных мощностях) - тебе как минимум дадут нобелевскую премию, возьмут ведущим криптоаналитиком пентагона(или любой другой спец-структуры по твоему желанию) + ты, конечно же, прославишься на весь мир. 2. находить MD5 хеш методом прямого перебора с использованием CPU, пусть даже распределённо - не есть тру, потому как даже одна видеокарта с поддержкой технологии CUDA или Bars способна выдавать скорость перебора, равную 100(!) мощностям обычных процессоров. Если же задумка в том, чтобы раздавать клиентскую часть скрытно тысячам юзеров, и грузить их процы не более, чем не 5-10%... то даже в этом случае 1 единственная видеокарта сможет заменить 1000-2000 таких ботов. в общем и целом всё красиво, интересно, любопытно.... но бесполезно. не совсем понимаю, зачем именно ты это сотворил) хотя за старания все равно плюс) будет тебе от этого хоть какая-то польза
Из той же Вики: Отсюда: коллизия – равенство. В принципе, считаю уместным использовать данное понятие в качестве равенства двух хешей (Целевого и Найденного). Факт. Однако не все видеокарты работают с той же CUDA, что существенно сокращает "доноров". Программа разрабатывалась в целях самообразования и ознакомления с платформой .NET и С# в частности, поэтому я не ставил цель написать брутер «бест оф зе бест», что упоминал в своей статье, посвященной данной системе.
коллизия - это 2 одинаковых хеша от двух разных исходных блоков данных. Иными словами, это - если ты сломаешь хеш 2 раза, и полуичишь при этом разные пароли. Это - чёткий термин. Называя же им простой подбор пароля ты лишь вводишь тех, кто знает его значение, в заблуждение, и усложняешь понимание тем, кто его не знает) В общем мне все равно, можешь коллизией хоть прогноз погоды называть - просто это будет не верно) как я уже написал - в любом случае молодец, что старался, и надеюсь, что твоё следующее творение будет более полезным с практической (а не только теоретической) точки зрения
Примите извинения за отсутствие строгости к употребляемым терминам. Спасибо за замечание. Большое спасибо за критику. Приму к сведению, но все же надеюсь, что эти исходники кому-нибудь пригодятся в качестве концепта
а ты не подумал вариант - если у меня на компе куды нету, зато из всего ботнета есть десяток ботов с кудами, либо даже не ботов а друзей, с которыми я договорился.
gold-goblin, "прикрутить куду" это ты жостко сказал. Если есть реальное желание - напиши сначала свой брутер под неё)) А сделать распределение, это уже, прямо скажем, не особенно то и сложно. diehard, для единичных распределенных атак в брутерах есть функция "начинать брут с такого-то пасса". Таким образом менее, чем на 10 машинах, сделать это - совершенно не сложно. Нужно всего лишь скинуть 10 людям в аську стартовый пароль а им - нажать 3 кнопки, чтобы вставить этот пароль в настройки программы. Более того, реализовать "такое" программно - проще простого. То, что сделал автор - свой полноценный брутер - это.. да, это не тривиально. Более того, это - какое-то количество дней работы. А работу, любую, нужно уважать Мой коммент касался лишь того, что этот брутер, хотя и потребовал вложения сил и времени, но совершенно бесполезен в реальной жизни именно как брутер. Как образец кода - да, вполне возможно, что это действительно кому-то может и пригодиться) О распределенном же "куда-брутере", diehard, я ничего не говорил. В определенной степени это могло бы быть полезно... хозяину ботнета из куд D