HTTPS SSH

Брутфорс md5

Многопоточный брутфорс паролей по заданным md5-суммам. Игра-бенчмарк по мотивам поста.

Правила

  • Программа представляет собой многопоточное приложение, с архитектурой: мастер + один или несколько воркеров.
  • Количество воркеров определяется на старте программы, и, обычно, равно количеству вычислительных ядер в машине.
  • Мастер вычитывает задания из stdin построчно и раздаёт их свободным воркерам.
  • Задание -- это md5-сумма пароля и диапазон возможных значений пароля. И нижняя, и верхняя граница интервала входит в поиск.
  • Символы пароля и интервалов могут быть либо цифрами, либо строчными латинскими буквами.
  • Пример строки с заданием: fec91335051486b245d74cdb6042d4c0 0ayie zayie
  • Воркер получает задание, пытается подобрать значение из указанного в таске диапазона, которое даст такой же md5-хеш. Такое значение может быть, а может и не быть. О результате воркер сообщает мастеру, который печатает отчёт на stdout.
  • Получение результата мастером означает, что воркер освободился и может получить следующий таск (если таковые еще есть).
  • Диапазоны могут быть заданы некорректно.
    • "zzz 000 -- нарушение правила lower меньше upper.
    • 0000 zz -- в upper меньше символов, чем в lower.
    • aaaa aaAz -- символ A не входит в разрешенный алфавит.
  • Помимо некорректных диапазонов, ошибка может возникать при парсинге строки, и некорректном формате md5-суммы.
  • Столкнувшись с ошибкой, воркер должен "упасть" (завершить работу).
  • Эту ситуацию должен отловить мастер и запустить вместо упавшего воркера нового. Проблемное задание при этом выбрасывается, но на stderr должен быть отчёт от мастера.

Сборка версии на Rust

  • Установить cargo.
  • % git clone git@bitbucket.org:swizard/md5_bruteforce.git
  • % cd md5_bruteforce
  • % cargo build --release
  • % time target/release/md5_bruteforce < test_input

Другие реализации

C++ / SObjectizer

Версия от eao197: md5_brute_force.cpp

Сборка:

  • Установить Mxx_ru: sudo gem install Mxx_ru.
  • % svn co https://svn.code.sf.net/p/sobjectizer/repo/branches/comparision/md5_brute_force_2/
  • % cd md5_brute_force_2
  • % MXX_RU_CPP_TOOLSET=gcc_darwin ruby md5_brute_force.rb
  • % _gcc_unix/release/md5_brute_force < data_1.txt