Показать сообщение отдельно

  #2  
Старый 06.08.2007, 04:04
Thanat0z
Постоянный
Регистрация: 06.12.2006
Сообщений: 762
Провел на форуме:
5352530

Репутация: 2062


По умолчанию

4. Правила в JTR
4.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] - будем создавать свои правила для правки словариков (почему именно в этом месте? - просто для удобства)

Последний раз редактировалось Thanat0z; 06.08.2007 в 07:08..