Windows Password Recovery - гибридная атака по словарю
Гибридная атака по словарю - это разновидность простой словарной атаки. Однако в отличие от последней, гибридная атака позволяет пользователю задавать свои собственные правила мутации (вариации) слов и проверять их в качестве исходного пароля. Например, можно перевести первую букву проверяемого пароля в верхний регистр, добавить в конец символ 2, заменить 8 на B, O на 0 и т.д.
Действия, применяемые к исходным словам словаря, называются правила. К одному исходному слову можно применять несколько правил. Вместе с дистрибутивом программы поставляется расширенный набор правил мутации паролей. Синтаксис правил гибридной атаки совместим с программами John the Ripper и PassworsPro. Автор последней любезно предоставил один из расширенных наборов правил, входящих (в отредактированном виде) в дистрибутив Windows Password Recovery.
Опции гибридной атаки по словарю разделены на 7 вкладок:
1. Словари - для задания исходных словарей
2. Правила - файлы с наборами правил
3. Супер-правила - правила, которые можно применить поверх всех обычных, точнее до или после них
4. Генератор словаря, в которой можно создавать готовые словари, получаемые в результате работы гибридной атаки
5. Онлайн словари - для скачивания новых словарей в программу
6. Синтаксис атаки - полное описание всех правил с примерами
7. Тестер правил для тестирования собственных правил
Вместе с дистрибутивом программы поставляется расширенный набор правил мутации паролей:
Файл
hybrid_rules/english_words.ini содержит набор основных правил для английских паролей.
hybrid_rules/nonenglish_words.ini содержит набор основных правил для неанглийских паролей.
hybrid_rules/simple_dates.ini - правила с датами, месяцами, временами года и т.д.
hybrid_rules/l33t.ini - правила уродованием слов. Например, password->p@$$w0rd
С более детальной статистикой по всем наборам правил можно
ознакомиться в соответствующей статье.
Словари
Словари для атаки задаются в первой вкладке. Традиционно поддерживаются следующие форматы: ASCII, UTF8, UNICODE, PCD, ZIP, RAR. Порядок файлов в списке можно менять. Например, небольшие словари перемещать в начало списка или наоборот. При этом в атаке они будут использоваться последовательно, согласно списку.
Правила
Во вкладке 'Правила' необходимо задать по крайней мере один файл с правилами мутации паролей. С программой поставляется несколько таких файлов, например, english_words.ini с более чем 3000 правилами. Формат файла с правилами довольно тривиален и представляет собой простой текстовый ASCII файл со строкой [Rules]. Все, что идет до этой сроки, считается комментариями и игнорируется программой. Все, что после этого индикатора, рассматривается как правила. Каждая строка может содержать несколько правил, применяемых к исходному слову. Если строка содержит несколько правил для одного слова, то эти правила обрабатываются слева направо. Например, если к исходному слову 'password' применить правило '@pc$a$b$c', то на выходе получим 'Asswordabc'. Максимальная длина выходного слова не должна превышать 256 символов.
Супер-правила
Супер-правило - это одно или несколько правил, которые необходимо применить поверх всех обычных наборов правил. Точнее, до или после них. Например, после отработки обычного правила (или нескольких, если они заданы на одной строке), для того, чтобы сгенерировать все возможные комбинации заглавных и строчных букв, можно задать конечное супер-правило 'a8'. Так правило '/asa4' из файла l33t.ini будет '/asa4a8', а '/csc(' превратится в '/csc(a8', и т.д. Еще один пример: если установить начальное супер-правило '>6
Супер-правило 'aN' может увеличить число генерируемых паролей в сотни или даже тысячи раз!
Генератор словарей
Вкладка 'Генератор словарей' предназначена для создания словарей, получаемых в результате работы этой атаки. В дальнейшем, эти словари, к примеру, можно использовать в других программах. Для создания словаря, задайте исходный словарь и набор правил мутации. Длина генерируемого файла может превышать 2 Гб.
Будьте осторожны, процесс создания словаря может занять значительное время!
Онлайн словари
Во вкладке 'Онлайн словари' можно скачать с сайта Passcape исходные словари для этой атаки.
Синтаксис
Если вы хотите создать свой собственный набор правил, то две последние вкладки можно использовать как помощь. Во вкладке 'Синтаксис' даны простые описания правил, в последней кладке можно их протестировать, задав исходное слово и правило для гибридной атаки. Свои наборы правил присылайте нам. Если они покажутся нам интересными/полезными, мы включим их в стандартную поставку программы.
Описание синтаксиса правил гибридной атаки по словарю
- Допускается задавать несколько правил на одной строке.
- Обработка правил (если их несколько на одной строке) идет слева направо.
- Максимальная длина строки - 256 символов.
- Максимальная длина выходного слова 256 символов.
- Весь текст до строки [Rules] считается комментарием и игнорируется.
- Строка, начинающаяся символом # считается коментарием и игнорируется.
- Пробелы в строках, если они не являются частью правил, игнорируются.
- Значения параметров N и M начинаются с 0. Для значений больше 9 используйте A..Z (A=10, B=11 и т.д.). Например, правило 'C ограничивает длину слова 12 символами.
- Следующие правила должны быть последними в строке: aN, ?iN[C], ?i[C], ?oN[C], ?o[C], ?iZ[C], ?oZ[C]
- Не меняйте имена стандартных файлов с правилами. Некоторые из них используются программой.
- Правила ?iN[C], ?i[C], ?oN[C], ?o[C] ?iZ[C], ?oZ[C] используют следующие встроенные наборы символов (также можно задавать свои собственные):
digits - 0123456789
loweralpha - abcdefghijklmnopqrstuvwxyz
upperalpha - ABCDEFGHIJKLMNOPQRSTUVWXYZ
alpha - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
special - !@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ "
loweralphanumeric - abcdefghijklmnopqrstuvwxyz0123456789
upperalphanumeric - ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
alphanumeric - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
printable - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.? /
Мы будем очень признательны, если вы пришлете нам свои собственные правила, которые можно включить в дистрибутив программы!
Правила
Правило |
Пример |
Вход. слово |
Выход. слово |
Описание |
: |
: |
password |
password |
Ничего не делать со словом. |
{ |
{ |
password |
asswordp |
Сдвинуть слово влево. |
} |
} |
password |
dpasswor |
Сдвинуть вправо. |
[ |
[ |
password |
assword |
Удалить первый символ. |
] |
] |
password |
passwor |
Удалить последний символ слова. |
c |
c |
password |
Password |
Сделать первую букву заглавной. |
C |
C |
password |
pASSWORD |
Первая буква строчная, остальные заглавные. |
d |
d |
password |
passwordpassword |
Дублировать все слово. |
f |
f |
password |
passworddrowssap |
Отразить (зеркальная перестановка букв). |
k |
k |
password
пароль |
зфыыцщкв
gfhjkm |
Конвертировать слово используя альтернативную (первую после установленной по-умолчанию) раскладку клавиатуры. Это правило работает в обоих направлениях. Например, если в системе установлена Русская раскладка клавиатуры, это правило трансформирует слово 'password' в русский эквивалент 'зфыыцщкв', а Русское слово 'пароль' в 'gfhjkm'. Это бывает очень полезно, когда имеем дело с не-английскими паролями. Если в системе установлен только один язык, правило будет проигнорировано. |
K |
K |
password |
passwodr |
Поменять местами два последних символа. |
l |
l |
PassWord |
password |
Все буквы в нижний регистр. |
q |
q |
password |
ppaasssswwoorrdd |
Дублировать все символы в слове. |
r |
r |
password |
drowssap |
Перевернуть слово. |
t |
t |
PassWord |
pASSwORD |
Обратить регистр букв (инверсия регистра). |
u |
u |
password |
PASSWORD |
Все буквы в верхний регистр. |
U |
U |
my own password |
My Own Password |
Первые буквы всех слов в верхний регистр (подразумевается, что слова разделены пробелом). |
V |
V |
password |
PaSSWoRD |
Согласные буквы перевести в верхний регистр, гласные - в нижний. |
v |
v |
password |
pASSWoRD |
Согласные буквы перевести в нижний регистр, гласные - в верхний. |
|
|
|
|
|
'N |
'4 |
password |
pass |
Обрезать слово до длины N. |
+N |
+1 |
password |
pbssword |
Увеличить значение ASCII символа в позиции N. |
-N |
-0 |
password |
obssword |
Уменьшить значение ASCII символа в позиции N. |
.N |
.4 |
password |
passoord |
Заменить символ в позиции N символом в позиции N+1. |
,N |
,1 |
password |
ppssword |
Заменить символ в позиции N символом в позиции N-1. Где N > 0. |
>N |
|
|
|
Отклонить (пропустить) слово если его длина превышает N символов. |
>N |
|
|
|
Отклонить (пропустить) слово если его длина меньше N символов. |
_N |
_8 |
|
|
Отклонить (пропустить) слово если его длина не равна N символам. |
aN |
a8 |
|
|
Проверять все возможные комбинации регистра букв. N задает максимальную длину слова, для которого может быть применено это правило. |
DN |
D2D2 |
password |
paword |
Удалить символ в позиции N. |
pN |
p3 |
key |
keykeykey |
Копировать слово N раз. |
SLN |
SL2 |
012345678 |
01d345678 |
Арифметический сдвиг влево символа в позиции N. |
SRN |
SR2 |
password |
pa9sword |
Арифметический сдвиг вправо символа в позиции N. |
TN |
T1T5 |
password |
pAsswOrd |
Обратить регистр букв в позиции N. |
yN |
y3 |
password |
paspasword |
Продублировать первые N символов. |
YN |
Y3 |
password |
paswordord |
Продублировать последние N символов. |
zN |
z3 |
password |
ppppassword |
Дублировать первый символ слова N раз. |
ZN |
Z3 |
password |
passwordddd |
Дублировать последний символ слова N раз. |
|
|
|
|
|
$X |
$0$0$7 |
password |
password007 |
Добавить символ X в конец слова. |
^X |
^3^2^1 |
password |
123password |
Вставить символ X в начало слова. |
@X |
@s |
password |
paword |
Удалить все символы X из слова. |
!X |
!. |
|
|
Отклонить (пропустить) слово если оно содержит по крайней мере один символ X. |
/X |
/1/2/3 |
|
|
Отклонить (пропустить) слово если оно не содержит символ X. |
(X |
(p |
|
|
Отклонить (пропустить) слово если его первый символ не X. |
)X |
)d |
|
|
Отклонить (пропустить) слово если его последний символ не X. |
eX |
e@ |
mike@yahoo.com |
mike |
Извлечь подстроку, начинающуюся с первой позиции и заканчивающуюся перед первым найденным символом X (X не входит). |
EX |
E@e. |
mike@yahoo.com |
yahoo |
Извлечь подстроку, которая начинается сразу за первым найденным символом X (и до конца строки). |
|
|
|
|
|
%MX |
%20 |
|
|
Отклонить (пропустить) слово если оно не содержит по меньшей мере M символов X. |
*XY |
*15 |
password |
possward |
Поменять местами символы в позициях X и Y. |
=NX |
=01 |
|
|
Отклонить (пропустить) слово если символ в позиции N не X. |
iNX |
i4ai5bi6c |
password |
passabcword |
Вставить символ X в позицию N. |
oNX |
o4*o5* |
password |
pass**rd |
Перезаписать символ в позиции N символом X. |
sXY |
ss$so0 |
password |
pa$$w0rd |
Заменить все символы X на Y. |
xNM |
x4Z |
password |
word |
Извлечь подстроку длиной M символов начиная с позиции N. |
|
|
|
|
|
INX-Y |
rI0/-/r |
google.com |
google.com/ |
Вставить символ X в позицию N, если предыдущий символ в позиции N не равен Y. |
INX+Y |
rI0.+.r |
password. |
password.. |
Вставить символ X в позицию N, если предыдущий символ в позиции N равен Y. |
ONX-Y |
O0-+p |
password |
-assword |
Если символ в позиции N не равен Y, перезаписать его символом X. |
ONX+Y |
O0P+p |
password |
Password |
Если символ в позиции N равен Y, перезаписать его символом X. |
RNM+Y |
R01+a |
password |
assword |
Удалить символ в позиции N, если символ в позиции M равен Y |
RNM-Y |
R40-b |
password |
passord |
Удалить символ в позиции N, если символ в позиции M не равен Y |
|
|
|
|
|
?iN[C] |
?i0[digits] |
password |
0password
..
9password |
Вставить символ из набора [C] в позицию N входного слова. Где [C] может быть как именем набора, так и самим набором. |
?iZ[C] |
?iZ[digits] |
password |
password0
..
password9 |
Вставить символ из набора [C] в последнюю позицию входного слова. |
?i[C] |
?i[special] |
password |
~password
..
password+ |
Вставить символ из набора [C] в каждую позицию входного слова. [C] может быть как именем набора, так и самим набором. |
?oN[C] |
?o1[upperalpha] |
password |
pAssword
..
pZssword |
Перезаписать во входном слове символ в позиции N каждым символом из набора [C]. Где [C] может быть как именем набора, так и самим набором. |
?oZ[C] |
?oZ[upperalpha] |
password |
passwor0
..
passwor9 |
Перезаписать во входном слове последний символ каждым символом из набора [C]. |
?o[C] |
?o[-=.] |
password |
-password
..
password. |
Перезаписать во входном слове символ в каждой позиции символом из набора [C]. [C] может быть как именем набора, так и самим набором. В данном примере правило ?o[C] сгенерирует следующие пароли: -password, =password, .password, -assword, =asswords, .assword, p-ssword, p=ssword ... password. |