Как ускорить создание словарей с паролями


В одном из комментариев под статьёй о создании словарей у меня спросили: как сделать так, чтобы программа использовала видеокарту, чтобы создавать пароли ещё быстрее. Но это неправильный вопрос, дело в том, что скорость создания паролей в первую очередь ограничивается скоростью хранилища, то есть скоростью твердотельного или жёсткого диска. Вы можете заметить, что даже если создание словаря занимает долгое время, центральный процессор не очень сильно загружен — то есть скорость вычисления и так не является узким местом.

На самом деле, показанный далее метод уже начнёт упираться в производительность одного ядра процессора (или в скорость оперативной памяти), но он в разы быстрее обычного способа создания и если вам всё равно недостаточно скорости, то я пока не знаю, как это исправить.

На самом деле

Этот раздел я хотел поместить в Заключение, но решил передвинуть в самое начало — чтобы вы не говорили, что я вас обманул smiley Да, словари будут создаваться быстрее, но сразу после создания они будут находиться в оперативной памяти. Затем, если вы хотите сохранить словарь после перезагрузки компьютера, его нужно скопировать в постоянное хранилище (твердотельный или жёсткий диск). Так вот, время копирования созданного словаря на диск будет ровно таким же, как если бы мы изначально создавали словарь на диске. Ну, то есть, выигрыша во времени нет. Поэтому данная статья это:

1. Доказательство того, что узким местом при создании словарей является именно диск, а не устройство вычисления

2. Ещё один пример использования файловой системы tmpfs

3. Вполне возможно, что вы найдёте применение показанному методу, так как снижает нагрузку на постоянное хранилище

И ещё можно добиться ускорения если нужно внести изменения данных, которые уже находятся в tmpfs. Например, нужно сделать сортировку большого словаря, или изменить его на основе Правил, или комбинировать с другими словарями. То есть если нужно сделать несколько операций со словарём, то tmpfs поможет ускорить все процессы, поскольку на каждой стадии будет экономиться время, которое бы затрачивалось на обычном диске для чтения и записи.

Создание словарей в tmpfs

tmpfs — это виртуальная файловая система, располагающаяся в оперативной памяти. Больше подробностей о ней в разделе «Файловая система в оперативной памяти».

Файловая система tmpfs имеет следующие свойства:


  • Файловая система может использовать пространство подкачки, когда этого требует физическая нагрузка на память.
  • Файловая система потребляет столько физической памяти и пространства подкачки, сколько требуется для хранения текущего содержимого файловой системы.
  • Во время операции повторного монтирования (mount -o remount) размер файловой системы может быть изменён (без потери существующего содержимого файловой системы).

Если файловая система tmpfs размонтирована, её содержимое теряется (удаляется). Это очень важно — скопируйте из неё все данные перед тем как выключить компьютер, иначе всё будет потеряно.

Хотя это очевидно, но на всякий случай: поскольку все данные располагаются в оперативной памяти, у вашего компьютера должно быть достаточно ОЗУ, чтобы хранить те данные, которые вы хотите поместить в tmpfs.

Создадим точку монтирования:

mkdir /tmp/mytmpfs

Создадим виртуальную файловую систему размером 20 Гигабайт в оперативной памяти:

sudo mount -t tmpfs -o size=20g tmpfs /tmp/mytmpfs

Переходим в неё:

cd /tmp/mytmpfs

Для создания словаря воспользуемся программой maskprocessor. Следующей командой мы создаём словарь на 5 символов (большие и маленькие буквы, цифры):

time maskprocessor -1 ?l?u?d ?1?1?1?1?1 > dic.txt

Перед maskprocessor поставлена ещё одна команда — time, она измеряет время работы программы.

Создание словаря заняло около 6 секунд.

В Системном мониторе можно увидеть, что на время работы программы для создания словаря одно из ядер процессора было загружено полностью. Также видно, что выросло потребление оперативной памяти.


А теперь для примера создадим такой же словарь на жёстком диске:

time maskprocessor -1 ?l?u?d ?1?1?1?1?1 > dic.txt

На жёстком диске эта операция занимает от 20 секунд до одной минуты (видимо, зависит от занятости самого диска).

В качестве эксперимента, возьмём команду преобразования словаря по Правилу из этой статьи:

john --rules=lud5 --wordlist=dic.txt --stdout > lud5.txt

На жёстком диске она завершилась за 43 секунды, а в оперативной памяти за 41 секунду. Причина таких результатов в том, что в этом случае узким местом является производительность одного ядра процессора (процесс создания и преобразования словарей выполняется в один поток).


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *