4. Правила в JTR4.1 Перевод секции Wordlist
Перевод сделан человеком по имени
*FuriouS*
Код:
Правила вордлиста[List.Rules:Wordlist]
=======================
1. Отклоняющие флаги
-------------------
-c отклонить правило, если слово не чувствительно к регистру
-8 отклонить это правило, если слово не использует 8-битовые знаки
-s отклонить это правило, если некоторые пароли не были разделены при загрузке
2. Коды позиций
----------------
Коды позиций нумеруются с 0, и используются в правилах для следующих значений:
0...9 для цифр 0...9
A...Z для букв 10...35
* для наибольшей длины слова
- для слова (максимальной длины - 1)
+ для слова (максимальной длины + 1)
Здесь "максимальная длина" означает наибольшую длину plaintext'a поддерживаемую данным форматом.
Эти параметры также используются для определения других номерных параметров.
3. Классы знаков
-------------------
?? получает символ: '?'
?v получает гласные: "aeiouAEIOU"
?c получает согласные: "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
?w получает пробел: " \t"
?p получает знаки пунктуации: ".,:;'\"?!`"
?s получает символы "$%^&*()-_+=|\\<>[]{}#@/~"
?l получает строчные буквы [a-z]
?u получает Прописные буквы [A-Z]
?d получает цифры [0-9]
?a получает буквы [a-zA-Z]
?x получает буквы и цифры [a-zA-Z0-9]
Дополнение класса может быть определено его ПРОПИСНЫМ название. Класс - "? D" соответствует всему, кроме цифр.
4. Простые команды
--------------------
: ничего не делать со словом
l конвертировать в нижний регистр
u конвертировать в верхний регистр
c зделать заглавной первую букву
C конвертировать в нижний регистр первую букву, и в верхний остальные буквы слова
t изменяет регистр всех букв на противоположный (Пример: WiTtEr -> wItTeR)
TN изменяет регистр на противоположный после символа под номером N (Пример: "T3" -> hugoboss -> hugOboss)
r реверсирует слово: "Fred" -> "derF"
d удваивает слово: "Fred" -> "FredFred"
f реверсирует слово и прибавляет к исходному: "Fred" -> "FredderF"
{ сдвигает буквы в слове на 1 знак влево: "jsmith" -> "smithj" (на два знака {{, три {{{ и т.д.)
} сдвигает буквы в слове на 1 знак вправо: "smithj" -> "jsmith"
$X добавляет символ X в конец слова
^X добавляет символ X в начало слова
5. Команды контроля длины слов
-------------------------------
<N отклоняет слово если кол-во символов больше числа N (т.е. при N=7 и обработке словаря слова более 7 символов пропускаются)
>N отклоняет слово если кол-во символов меньше числа N
'N обрезает слово справа до количества символов =N
6. Грамматические команды
---------------------------
p придает множественное число: "crack" -> "cracks", прим* (s,ies,es только в нижнем регистре)
P "crack" -> "cracked", (ed только в нижнем регистре)
I "crack" -> "cracking", (ing только в нижнем регистре)
7. Команды вставки/удаления
------------------------------
[ удаляет первый символ в слове
] удаляет последний символ в слове
DN удаляет символ на позиции с номером N
xNM удаляет с начала слова N символов, оставляя из остатка слова М символов (Пример: WITTERIN ->x23 -> TTE)
iNX вставляет в слово после символа под номером N символ X (Пример: WITTER -> i3@ -> WIT@TER)
oNX заменяет символ идущий после номера N на X (Пример: WITTER -> o3@ -> WIT@ER)
Для использования команды "[" или "]" необходимо перед ней поставить символ "\" (Пример: WITTER -> \[\[ -> TTER)
8. Конвертирующие команды
-----------------------------
S конвертирует слово если бы была нажата клавиши SHIFT: "Crack96" -> "cRACK(^"
V конвертирует гласные в нижний регистр, остальные буквы в верхний: "Crack96" -> "CRaCK96"
R конвертирует слово в смежные (справа) клавиши на клавиатуре : "Crack96" -> "Vtsvl07"
L конвертирует слово в смежные (слева) клавиши на клавиатуре : "Crack96" -> "Xeaxj85"
9. Команды доступа к памяти
------------------------------
M запоминает слово
Q отклоняет слово если оно не изменилось (после определенных манипуляций)
10. Классы команд
--------------------------
sXY заменить в слове символы X на символы Y (Пример: s$G -> Wi$kY -> WiGkY)
s?CY заменить в слове класс знаков (п.3) C на символ(ы) Y
@X удаляет все символы X из слова (Пример: @[Sa&] для слова FiShaR&t -> FihRt)
@?C удаляет все классы знаков (п.3) C из слова (Пример: @?v для слова FiShaR&t -> FShR&t)
!X отклонить слово если оно содержит символ(ы) X
!?C отклонить слово если оно содержит классы C
/X отклонить слово если оно не содержит символ(ы) X
/?C отклонить слово если оно не содержит классы C
=NX отклоняется слово, если на позиции N не символ X
=N?C отклонить слово если на позиции N не символы класса C
(X отклонить слово если первый символ не X
(?C отклонить слово если первый символ не один из класса C
)X отклонить слово если последний символ не X
)?C отклонить слово если последний символ не из класса C
%NX отклонить слово если оно не содержит количество =N символов X
%N?C отклонить слово если оно не содержит количество =N класса C
Правила препроцессора
-------------------------
preprocessor используется, чтобы комбинировать (объединить) правила в одну исходную линию.
Например, если Вы хотите заставить Джона пробовать нижний регистр букв в слове с цифрами добавленными в конец, вы могли бы написать правило для каждой цифры, 10 общих правил. Теперь представьте добавлять в конец слова двузначные числа - файл конфигурации стал бы большим и уродливым.
С использованием препроцессора можете делать эти правила более просто и компактно. Просто пишите правило в линию, содержащую части этих правил, описанные выше, в скобках. Тогда preprocessor произведет сборку правил воедино. Для примера описанного выше, правила будут ' l$ [0-9] ' (переводится слово в нижний регистр и добавляется в конец слова цифра от 0 до 9, аналогично и ' l$ [0-9] $ [0-9] ' (переводится слово в нижний регистр и добавляются в конец две цифры). Вы можете комбинировать(объединять) их с
перечень знаков, подобно ' [aeiou] ' тогда будут использоваться гласные, и ' [aeiou0-9] ' будет использоваться гласные и цифры. Если вы должны попробовать сначала гласные, а затем весь другие буквы, вы можете использовать ' [aeioua-z] ' - тогда preprocessor не производит дубликат, управляя формированием слов.
Некоторые знаки контроля в правилах, например '[', открывают диапазон символов, '-' отмечает диапазон внутри списка, и т.д). Для их использования вы должны подставить перед ними символ '\', если вы хотите поместить их внутри правила без того, чтобы использовать их специальное значение. Также приставка ':' обозначит для препроцессора начало новой секции.
4.2 Статистика по реальной базе
А теперь посмотрим статистику, какое правило сколько паролей вскрывает. Условия теста следующие:
1) в базе 446684 уникальных реальных пароля одного крупного портала (брал md5 чтобы сократить время для вычеслений)
2) пароли длинной 4 и менее символов в базе не встречаются
3) в паролях не встречаются спецсимволы
4) использовались модифицированные словари, не помню откуда я их качал, но имеют название они типа lenght04.txt.
5) в словарях все слова в нижнем регистре (кроме словарей на 2 и 3 символа, там есть комбинации с заглавными буквами)
Сначала я пытался прогнать правила которые изменяют слово, а потом по словарю без изменений. Что это значит? Что сначала я допустим прогнал базу по словарю длинной в 3 и правилом double, и только потом просто прогнал словарем в 6 символов. В следующей таблице будет отображена статистика поочередного использования правил, то есть я не затирал pot-файл, а дальше продолжал атаку. В конце использованы несколько стандартных правил, а в середине правила которые я применил на основе статистики и своих наблюдений. К примеру вы наверное достаточно часто видели слова с окончаниями на man, ey, ter или началом на blue, red, crazy и тд и тп.
Формат таблицы: словарь, найденных паролей, затраченное время. Правило указано в той же строке, где написано сколько паролей загружено.
Код:
|============= Loaded 446684 password hashes with rule ":"
| 05 | 7326 | 05:29
| 06 | 11093 | 08:44
| 07 | 8145 | 06:17
| 08 | 6384 | 05:04
|============= Loaded 413736 password hashes with rule "d"
| 03 | 1047 | 00:49
| 04 | 1504 | 01:18
| 05 | 287 | 00:33
| 06 | 63 | 00:31
| 07 | 9 | 00:32
| 08 | 1 | 00:35
|============= Loaded 410825 password hashes with rule "u"
| 05 | 978 | 01:11
| 06 | 1362 | 01:36
| 07 | 848 | 01:13
| 08 | 554 | 01:00
|============= Loaded 407083 password hashes with rule "c"
| 05 | 1030 | 01:17
| 06 | 1589 | 01:48
| 07 | 1091 | 01:24
| 08 | 785 | 01:12
|============= Loaded 402588 password hashes with rule "l"
| 05 | 4 | 00:19
| 06 | 4 | 00:27
| 07 | 0 | 00:29
| 08 | 1 | 00:32
|============= Loaded 402579 password hashes with rule "C"
| 05 | 3 | 00:20
| 06 | 3 | 00:27
| 07 | 2 | 00:30
| 08 | 1 | 00:32
|============= Loaded 402570 password hashes with rule "r"
| 05 | 461 | 00:38
| 06 | 467 | 00:46
| 07 | 146 | 00:35
| 08 | 64 | 00:34
|============= Loaded 401432 password hashes with rule "f"
| 03 | 100 | 00:09
| 04 | 40 | 00:14
| 05 | 5 | 00:20
| 06 | 2 | 00:27
|============= Loaded 401285 password hashes with rule "p"
| 03 | 8 | 00:05
| 04 | 248 | 00:22
| 05 | 396 | 00:36
| 06 | 183 | 00:34
| 07 | 188 | 00:37
| 08 | 259 | 00:43
|============= Loaded 400003 password hashes with rule "P"
| 03 | 29 | 00:06
| 04 | 70 | 00:15
| 05 | 49 | 00:21
| 06 | 24 | 00:27
| 07 | 38 | 00:31
| 08 | 25 | 00:33
|============= Loaded 399768 password hashes with rule "I"
| 03 | 38 | 00:06
| 04 | 31 | 00:13
| 05 | 40 | 00:20
| 06 | 40 | 00:28
| 07 | 17 | 00:29
| 08 | 10 | 00:32
Специальные правила
Код:
|============= Loaded 399592 password hashes with rule "$m$a$n"
| 02 | 25 | 00:01
| 03 | 204 | 00:13
| 04 | 323 | 00:26
| 05 | 260 | 00:30
| 06 | 162 | 00:33
| 07 | 37 | 00:30
| 08 | 9 | 00:32
|============= Loaded 398572 password hashes with rule "c$m$a$n"
| 02 | 2 | 00:00
| 03 | 13 | 00:06
| 04 | 26 | 00:13
| 05 | 19 | 00:20
| 06 | 14 | 00:27
| 07 | 4 | 00:29
|============= Loaded 398494 password hashes with rule "$e$i$n"
| 03 | 13 | 00:05
| 04 | 8 | 00:12
| 05 | 3 | 00:19
| 06 | 2 | 00:26
|============= Loaded 398468 password hashes with rule "c$e$i$n"
| 02 | 1 | 00:00
|============= Loaded 398467 password hashes with rule "$e$y"
| 03 | 39 | 00:06
| 04 | 125 | 00:17
| 05 | 39 | 00:20
| 06 | 8 | 00:27
| 07 | 2 | 00:29
|============= Loaded 398254 password hashes with rule "c$e$y"
| 03 | 2 | 00:05
| 04 | 8 | 00:12
| 05 | 5 | 00:19
|============= Loaded 398239 password hashes with rule "u$e$y"
| 03 | 2 | 00:05
| 04 | 8 | 00:12
| 05 | 4 | 00:19
|============= Loaded 398225 password hashes with rule "$i$n"
| 03 | 30 | 00:06
| 04 | 143 | 00:18
| 05 | 61 | 00:22
| 06 | 34 | 00:30
| 07 | 10 | 00:29
| 08 | 3 | 00:32
|============= Loaded 397944 password hashes with rule "^d^e^r" - reddog, redsky, redcadilac
| 02 | 16 | 00:00
| 03 | 65 | 00:07
| 04 | 101 | 00:16
| 05 | 88 | 00:23
| 06 | 49 | 00:28
| 07 | 20 | 00:30
| 08 | 4 | 00:32
|============= Loaded 397601 password hashes with rule "^d^e^r^[0-9]" - 1remikie, 5redhommie
| 03 | 2 | 00:53
| 04 | 8 | 02:04
| 05 | 5 | 03:17
| 06 | 5 | 04:29
|============= Loaded 397581 password hashes with rule "$1$9$[0-9]$[0-9]" - money1990, katie1954
| 02 | 544 | 00:49
| 03 | 921 | 09:34
| 04 | 1157 | 21:40
| 05 | 555 | 33:49
| 06 | 361 | 37:32
| 07 | 117 | 47:38
| 08 | 60 | 51:40
|============= Loaded 393866 password hashes with rule "{"
| 05 | 319 | 00:33
| 06 | 257 | 00:37
| 07 | 63 | 00:31
| 08 | 41 | 00:33
|============= Loaded 393186 password hashes with rule "{{"
| 05 | 272 | 00:30
| 06 | 208 | 00:35
| 07 | 35 | 00:30
| 08 | 10 | 00:32
|============= Loaded 392661 password hashes with rule "{{{"
| 04 | 199 | 00:31
| 05 | 312 | 00:47
| 06 | 76 | 00:32
| 07 | 27 | 00:32
|============= Loaded 392047 password hashes with rule "{{{{"
| 05 | 201 | 00:28
| 06 | 146 | 00:32
| 07 | 80 | 00:32
| 08 | 102 | 00:36
|============= Loaded 391518 password hashes with rule "{{{{{"
| 06 | 234 | 00:36
| 07 | 38 | 00:30
| 08 | 29 | 00:32
|============= Loaded 391217 password hashes with rule "{{{{{{"
| 07 | 77 | 00:32
| 08 | 11 | 00:31
|============= Loaded 391129 password hashes with rule "{{{{{{{"
| 08 | 33 | 00:32
|============= Loaded 391096 password hashes with rule "]"
| 06 | 570 | 00:44
| 07 | 750 | 00:57
| 08 | 376 | 00:44
|============= Loaded 389400 password hashes with rule "]]"
| 07 | 334 | 00:36
| 08 | 481 | 00:44
|============= Loaded 388585 password hashes with rule "]]]"
| 08 | 188 | 00:24
|============= Loaded 388397 password hashes with rule "R"
| 05 | 27 | 00:20
| 06 | 16 | 00:26
| 07 | 1 | 00:28
| 08 | 1 | 00:30
|============= Loaded 388352 password hashes with rule "L"
| 05 | 69 | 00:22
| 06 | 44 | 00:28
| 07 | 2 | 00:29
| 08 | 0 | 00:31
|============= Loaded 388327 password hashes with rule "$[0-9]"
| 04 | 1891 | 03:38
| 05 | 4735 | 06:36
| 06 | 3790 | 06:51
| 07 | 3539 | 07:01
| 08 | 1032 | 05:38
|============= Loaded 373250 password hashes with rule "-c <+>2!?Acr"
| 05 | 3 | 00:18
| 06 | 6 | 00:24
| 07 | 4 | 00:26
| 08 | 2 | 00:28
|============= Loaded 373235 password hashes with rule "-c >2!?AMrQc"
| 05 | 11 | 00:18
| 06 | 5 | 00:24
| 07 | 2 | 00:26
| 08 | 3 | 00:29
|============= Loaded 373214 password hashes with rule "-c <*>2!?Acp"
| 04 | 4 | 00:12
| 05 | 18 | 00:18
| 06 | 8 | 00:23
| 07 | 7 | 00:25
| 08 | 26 | 00:28
|============= Loaded 373151 password hashes with rule "-c <*>2!?Ac[PI]"
| 03 | 4 | 00:09
| 04 | 4 | 00:22
| 05 | 5 | 00:35
| 06 | 1 | 00:48
| 07 | 2 | 00:52
| 08 | 1 | 00:57
После применения правил осталось
373134 паролей.
А теперь без разбора каждого правила посмотрим сколько паролей у нас найдется через стандартные правила, то есть при обычном запуске
-rules
Код:
|============= Loaded 446685 password hashes with standart rules
| 03 | 1444 | 05:34
| 04 | 5737 | 16:15
| 05 | 16674 | 29:44
| 06 | 19068 | 37:57
| 07 | 14365 | 33:29
| 08 | 8607 | 31:01
Итого осталось
380790 хешей.
Ну, а теперь посмотрим сколько паролей можно поднять с необработанной базы, нестандратными правилами. После каждого правила john.pot затирался (кажется

, но на самом деле, тут лишь пару правил друг друга перекрывают, и это не столь важно). Уклон делался на частые состовляющие имен, фамилий, и просто частые комбинации
Код:
|============= Loaded 446685 password hashes with rule "$m$a$n"
| 02 | 51 | 00:02
| 03 | 392 | 00:22
| 04 | 514 | 00:34
| 05 | 395 | 00:38
| 06 | 162 | 00:36
| 07 | 37 | 00:34
| 08 | 9 | 00:40
|==== 1560
|
|============= Loaded 446685 password hashes with rule "$e$r$s"
| 02 | 9 | 00:00
| 03 | 115 | 00:10
| 04 | 209 | 00:22
| 05 | 113 | 00:26
| 06 | 14 | 00:30
| 07 | 8 | 00:32
| 08 | 6 | 00:35
|==== 474
|
|============= Loaded 446685 password hashes with rule "$t$e$r"
| 02 | 37 | 00:01
| 03 | 204 | 00:14
| 04 | 188 | 00:21
| 05 | 146 | 00:28
| 06 | 36 | 00:31
| 07 | 7 | 00:33
| 08 | 8 | 00:36
|==== 626
|
|============= Loaded 446685 password hashes with rule "$e$r"
| 03 | 337 | 00:19
| 04 | 1140| 01:02
| 05 | 498 | 00:44
| 06 | 179 | 00:39
| 07 | 64 | 00:36
| 08 | 75 | 00:40
|==== 2293
|
|============= Loaded 446685 password hashes with rule "$a$n"
| 03 | 219 | 00:15
| 04 | 407 | 00:33
| 05 | 199 | 00:30
| 06 | 80 | 00:33
| 07 | 16 | 00:33
| 08 | 8 | 00:35
|==== 929
|
|============= Loaded 446685 password hashes with rule "$e$n"
| 03 | 152 | 00:12
| 04 | 382 | 00:29
| 05 | 112 | 00:26
| 06 | 50 | 00:31
| 07 | 11 | 00:32
| 08 | 13 | 00:36
|==== 720
|
|============= Loaded 446685 password hashes with rule "$e$s"
| 03 | 221 | 00:15
| 04 | 338 | 00:27
| 05 | 152 | 00:29
| 06 | 80 | 00:33
| 07 | 23 | 00:34
| 08 | 20 | 00:36
|==== 834
|
|============= Loaded 446685 password hashes with rule "^e^u^l^b"
| 02 | 12 | 00:00
| 03 | 46 | 00:08
| 04 | 96 | 00:18
| 05 | 52 | 00:24
| 06 | 28 | 00:31
| 07 | 4 | 00:32
| 08 | 1 | 00:35
|==== 239
Кстати посмотрите какие слова нашло по словарю с применением правила "$e$n" - характерного окончания слов для языков германской группы (красным выделены имена и названия):
antwerpen, arthurken, enlighten, feddersen, generalen, greenbeen, gustafsen,
jorgensen, niemanden, oerdingen, sebastien, australien, betrachten,
brookhaven, carstensen, copenhagen, denemarken, grimbergen, immobilien,
maximilien, postbanken, telefunken, unforgiven, volkswagen
То есть казалось бы по неосмысленным/обрезанным словам с использованием правил получились осмысленные, и более того собственные имена.
Кстати на эти тесты, повторы, фильтрацию, оформление и прочие дополнительные действия я потратил 3 дня. Так что прежде чем сами захотите сделать такой же анализ, начинайте делать это с утра

ближе к ночи сделаете.
4.3 Извращенное использование правил - JTR как средство для создания и правки словарей
Что делать когда делать нечего, а хочется чем-то заняться? о... я знаю о чем вы подумали, именно так могут назвать некоторые люди извращения, которые мы будем сейчас делать с JRT
Иногда надо подправить словари или создать по определенным параметрам, часто под рукой нет специализированного софта или вы не обладаете знаниями в языках программирования чтобы самому написать скрипт/утилиту для этого, выход в этой ситуации сам JRT.
Допустим у вас есть любимый словарь с именами покемонов, и открыв его в один хороший солнечный день вы узнаете что в нем есть ерунда типа
Код:
1746nvs
1746nvs
1747
804861
8048709648
80487418456935946767439038870690
8048769500
804881872
'eamonn
1fish2fish
[gunnar
[istein
[ngelholm
\berg
\degaard
\deg}rd
mdf
mdf_documentor_iain_stevenson
mdhazali
mdi
mdifficulty
mdin
me-my-mo-maig
me/in
me109s
me110
Когда словарь имеет размер в несколько десятков мегабайт, править подобные словари ручками напряжно. Что делать? - "снять штаны и бегать" (с) как было сказано в одной детской книжке нам не подходит, и поэтому мы открываем файлик
john.conf и ставим указатель курсора перед текстом
[List.Rules:Wordlist] - будем создавать свои правила для правки словариков (почему именно в этом месте? - просто для удобства)