Как я могу вынудить сценарий использовать больше ресурсов?

Это может также быть сделано довольно легко с awk.

$ awk '{print $2,$3,$4}' *.txt > collapsed_output.txt

Пример

Вот некоторые демонстрационные данные.

$ seq 20 | paste - - - - - > sample.txt

Вот то, на что похожи строки:

$ head sample.txt 
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20

Теперь давайте сделаем 10 копий:

$ seq 10 | xargs -I{} cp sample.txt sample{}.txt

У нас теперь есть следующие файлы:

$ tree
.
|-- sample10.txt
|-- sample1.txt
|-- sample2.txt
|-- sample3.txt
|-- sample4.txt
|-- sample5.txt
|-- sample6.txt
|-- sample7.txt
|-- sample8.txt
|-- sample9.txt
`-- sample.txt

Теперь, если мы выполняем наш awk команда:

$ awk '{print $2, $3, $4}' sample{1..10}.txt | column -t
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
...

Здесь я показываю Вам вывод для первых 3 файлов (sample01.txt ... sample03.txt). Также я форматирую вывод с column -t команда, но это только в целях дисплея сделать вывод легче видеть здесь на U&L.

Дополнительное форматирование могло, так же, как легко сделанный в awk команда, но это, казалось, выходило за рамки вопроса.

3
12.03.2014, 14:55
5 ответов
[116156]Улучшение #1 - Loops

Ваша петлевая структура кажется совершенно ненужной, если вы используете расширение скобки вместо этого, она может быть сгущена так:

Я показываю 4 символа только для того, чтобы заставить ее работать быстрее, просто добавьте дополнительный [116616]{a. .z}[116617] скобки для дополнительных символов длины пароля.

Пример запускается

  • 4 символа
  • Таким образом, он завершается за 18 минут.

5 символов

Это заняло ~426 минут. На самом деле [116618]Ctrl[116619]+[116620]C[116621] это, так что это еще не закончилось, но я не хотел больше ждать!

ПРИМЕЧАНИЕ:[116623] Оба этих запуска были на этом процессоре:

Улучшение #2 - Использование nice?
Следующим логическим шагом было бы [116624]nice[116625] вышеуказанные запуска, чтобы они могли потреблять больше ресурсов.

Но это только покажет. Одним из "недостатков" вашего подхода является повторный вызов [116626]openssl[116627]. С помощью [116628]{a..z}^5[116629] вы вызываете [116630]openssl[116631] 26^5 = 11881376 раз.

Одним из основных улучшений было бы сгенерировать паттерны [116632]{a..z}....[116633] и сохранить их в файл, а затем передать их как один раз в [116634]openssl[116635]. К счастью [116636]openssl[116637] имеет 2 ключевых свойства, которые мы можем использовать, чтобы получить то, что мы хотим.

Улучшение #3 - наша структура вызова openssl

Утилита командной строки [116638]openssl[116639] предоставляет переключатели [116640]-stdin[116641] и [116642]-table[116643], которые мы можем использовать здесь для однократного вызова [116644]openssl[116645] вне зависимости от того, сколько паролей мы хотим к нему передать. Эта единичная модификация снимет все накладные расходы, связанные с вызовом [116646]openssl[116647], выполнит работу, а затем выйдет из него, вместо этого мы оставим один экземпляр открытым на неопределенное время, передав ему столько паролей, сколько захотим.

Ключ [116648]-table[116649] также важен, так как он говорит [116650]openssl[116651] включить оригинальный пароль в версию с шифрами, чтобы мы могли довольно быстро работать над поиском нашего совпадения.

Предупреждаем, однако, что мы используем небольшой набор символов, в основном это только строчные символы алфавита. Если смешать все числа, как в обоих случаях, так и специальные символы, то обычно можно получить ~96 символов на позицию. Это может показаться несущественным, но это значительно увеличивает ваш пул:

Что еще?

Вы даже можете использовать [116668]CloudCrack[116669], который является хостируемой версией, и всего за 17 долларов США вы можете заплатить за попытку взлома пароля.

Ссылки

Real World Uses For OpenSSL

8
27.01.2020, 21:07
[115246] Ваш сценарий не просто сидит на руках! Он, вероятно, ждет другого ресурса, кроме процессора; возможно, он манипулирует большим количеством файлов и ждет дисков, или посылает много вещей по сети и ждет этого.

Посмотрите на строки совокупного использования ресурсов вверху [115634] вверху [115635] и вы увидите что-то вроде

Число [115636] нас [115637] является количеством процессора, фактически используемого логикой вашего скрипта (или других вещей, которые он вызывает). [115638]sy[115639] и [115640]wa[115641] - это процессорное время, затрачиваемое на системные вызовы и ожидание ввода/вывода. Если эти цифры высоки, пока работает ваш скрипт, и нет никакой другой активности в системе, то что-то кроме процессора является вашим узким местом.[115251].

6
27.01.2020, 21:07
[115324]Ваш скрипт, вероятно, использует более 3%, как объяснил Flup, но вы также тратите много времени, создавая копию [115692]openssl[115693] каждый раз, когда вы хотите создать пароль (что, вероятно, является основной причиной пропущенного времени процессора). Если у вас многоядерная/потоковая машина, вы также не сможете выделить более одного потока выполнения скрипта, поэтому вы будете использовать [115694]1/max_number_of_threads[115695] возможного процессорного времени.

Лучше реализовать код не в скрипте оболочки, а в чем-то отличном от скрипта, который может сделать за вас шифрование по собственному усмотрению. Ваша команда openssl неполная, так что мои предложения немного расплывчаты, но обычно perl, python и ruby будут иметь модули, которые реализуют стандартные вещи (такие как [115696]scrypt[115697] и [115698]bcrypt[115699])

Другие способы генерации crypt passwd

Просто не используйте их в самом внутреннем цикле! Реализуйте зацикливание в perl или в любом другом месте, где вы запускаете функцию крипта.

Как упоминал Стефан, вы можете построить список паролей и вставить его в [115700]openssl[115701], а также

Затем проверить вывод на правильность пароля.

Я оставлю реализацию за вами =)[115337].

3
27.01.2020, 21:07


renice[115625] - это утилита, позволяющая изменять добротность и увеличивать или уменьшать приоритет, но для того, чтобы сделать что-то более агрессивным, нужен корень.

Start [115626]block-paste[115627]:


Терминал

Если вы находитесь на терминале, вы можете использовать

renice

Простой пример -

Можно также передать жесткие флаги, но из этого следует, что порядок

Приоритеты работают по шкале от [115630]-20[115631] до [115632]20[115633] - чем меньше число, тем выше его приоритет в системе.

Конец блок-пасты.[115245].

1
27.01.2020, 21:07
[116248] В дополнение к различным оптимизациям реализации в ответе [116694]@slm[116695] необходимо провести огромную алгоритмическую оптимизацию. (Также могут быть некоторые криптоаналитические атаки, я не уверен, насколько сильным является алгоритм UNIX крипта, но это, вероятно, выходит за рамки скрипта оболочки)

Проблема, которую вы пытаетесь решить, вероятно, была описана как "грубая сила пароля". Для этого вы сгенерировали все возможности в алфавитном порядке и протестировали их, выйдя при первом совпадении. Если вы моделируете пароль как "случайную строку из 5 символов", то это на самом деле оптимально.

  • A [116696]Несколько[116697] людей будут использовать на самом деле случайный пароль. Несколько, не большинство. Даже для тех вещей, где они действительно должны быть. Особенно для тех вещей, которые они не считают важными. В последнее время это неоднократно подтверждалось многочисленными утечками базы паролей.

  • Пароль, который вы ищете, может быть [116698]dbKbuW[116699]. Но во много, во много раз более вероятно, что это [116700]qwerty[116701], [116702]abc123[116703], или [116704]123456[116705]. Из утечек в базах данных мы знаем, что тысячи самых распространенных паролей взломают большинство аккаунтов.

  • Поэтому реальная скорость - генерировать свои догадки в лучшем порядке. Как минимум, отсортируйте свои буквенные списки по частоте на английском языке (а еще лучше - по паролям). Попробуйте [116706]e[116707] намного раньше, чем [116708]z[116709]. Сначала пробегите список из 1000 или около того обычных паролей, еще до того, как начнете свою переборную итерацию по всему поисковому пространству (тратите немного времени, если это не сработает, но в зависимости от ваших пользователей это сработает более чем наполовину).

Если посмотреть, как работают реальные инструменты взлома паролей, то они проходят через несколько списков общих паролей, затем через словарь, затем через вариации (например, "изменить [116710]e[116711] на [116712]3[116713]"), затем через различные стратегии генерации паролей, и только если ни одна из них не работает, то, наконец, начинают итерацию через пространство поиска.[116259]

1
27.01.2020, 21:07

Теги

Похожие вопросы