Password recovery for new file formats can be a very complicated task and may take a long time. In modern world password recovery speed becomes slower and slower, so simple Brute-force or Dictionary attack is not enough for effective password breaking. We can try to use the "human factor" for password recovery. Most of people don't use randomly generated strong passwords because they are very hard to remember. People invent they own password creation rules and think their passwords are strong.
For example, the rule can be as follows: [My name] [Year of birth] [Some random characters, easy to remember]
And the possible passwords are:
John1974abc John1974def ... etc
These passwords are very weak but cannot be recovered using simple Brute-force or Dictionary. We created our advanced attack engine to help to recover such passwords.
The following attacks are available:
Word attack
This attack tries all possible variations of the given word and applies all possible mutations to each variation.
Dictionary attack
Dictionary options
Press "Add" to add dictionary file(s) to the list, "Remove" to remove the selected one(s), and "Up/Down" to change an order.
Password mutation options
Here you select the name of the dictionary file, as well as the options that affect the speed and efficiency of the attack. All mutations are divided into a several 'classes' (described below). The program can set the mutation 'level' for every type, that allows to select between speed and efficiency. With the minimum level, the program checks only lowercase passwords, and performs basic mutations only: e.g. Border mutation uses not all special characters, but only digits, and only at the end of the password. For an intermediate level, more special characters are being used (both as prefix and as a suffix); and uppercase characters are also tested. At the maximum level, even more advanced prefixes and suffixes are added, but of course, it runs much slower (as far as more variations are checked).
- Case mutation: the program checks all variations of uppercase/lowercase characters.
- Digit mutation: adding several digits to the work (from the dictionary) as prefix and suffix.
- Border mutation: similar to the above, but adding not only digits, but also most commonly used combinations like 123, $$$, 666, qwerty, 007, ххх etc.; in addition, adding some chars at both end of the word, e.g. #password#, $password$ and more.
- Freak mutation: replacing some characters (one or more); for example, the word password will also generate p@ssword, p@$$word and p@$$w0rd. Freak mutation is based on l337 language. Check https://ru.wikipedia.org/wiki/Leet for more info.
- Abbreviation mutation: some commonly-used abbreviations like ihateyou - ih8you, loveyou - loveu, foryou - 4u etc.
- Order mutation: reversing the order (password - drowssap), repeating the word (password - passwordpassword), adding the reversed word (password - passworddrowssap).
- Vowels mutation: playing with vowels, e.g. psswrd, PaSSWoRD, pAsswOrd etc.
- Strip mutation: removing one char, e.g. assword, pssword, pasword...
- Swap mutation: replacing some characters, e.g. apssword, psasword, password...
- Duplicate mutation: duplicating the characters, e.g. ppassword, paassword, passsword, passwword etc.
- Delimiter mutation: adding delimters between characters: p.a.s.s.w.o.r.d, p+a+s+s+w+o+r+d, p-a-s-s-w-o-r-d.
- Year mutation: adding the year (four digits) at the end of the word: password1973, password2002.
- Shift mutation: shifting character in a word: password -> asswordp
- Substitution mutation: substitute a character: password -> paddword. In this mutation, the changes depend on the qwerty keyboard, taking into account that the user can skip the key when creating a password and press the key next to it. For example, “oassword” instead of “password”. Or “fog” instead of “dog”. Therefore, not all possible characters fall into the search, but only those located nearby on the keyboard
- Length mutation: password -> passwor ..
Mask attack
With the mask attack, you can check for passwords with the known/complex structure.
The syntax of the mask attack.
The mask consists of immutable characters and changeable (iterable) ranges.
E.g. admin?d?d?d
"admin" characters will not change Instead of each ?d - a digit is substituted (character range from 0 to 9),
Thus, such passwords will be checked:
admin000, admin001 .. admin999
Other types of changeable ranges:
?d(min-max)
admin?d(1980-2020)
?d(1980-2020) - number from 1980 to 2020
admin1980, admin1981 .. admin2020
?0..9(min-max)
admin?1(1-3)
?1(1-3) - custom (charset) from 1 to 3 characters. So, if you use 1 set of lowercase letters, for each?1 a lowercase letter from a to zzz will be used
You can combine ranges and set up to 10 different ranges.
?1admin?2?2?2
If the brackets are omitted, it will be counted as one character, i.e.
?3 == ?3(1-1)
With the mask attack, you can check for passwords with the known/complex structure. In the Mask field, you can select the mask using the following options:
-
?? - the '?' symbol itself
-
?c - small Latin character (from 'a' to 'z')
-
?C - large Latin character (from 'A' to 'Z')
-
?$ - one of the special characters (small set): !@#$%^&*()-_+= and space
-
?@ - one of the special characters (large/complete set): !\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ and space
-
?# - any printable character with the code from 0x20 to 0x7F
-
?d - one digit (from 0 to 9)
-
?d(min-max) - a number from min to max.
-
?w[dictionary_name.udic] - a word from dictionary_name.udic.
-
?W[dictionary_name.udic] - a word from a given dictionary with an additional check for the first character to be either uppercase or lowercase. F.e. ?W[english.dic]?d
-
?0..9(min-max) - min..max characters from custom set. min >= 0
In order to use the last option, you should also create your (custom) own character set (below); each set has its own number. For example, assume that you password is formed as follows:
- one capital letter
- from 3 to 5 small letters
- special character (from large set)
- from one to three digits
In that case, the mask is going to be (assuming that the custom charset containing all small letters is created; if it is the only one, it will have the number 1):
?C?1(3-5)?@?d(0-999)
Once the mask is properly set, you will see the Password total (the total number of passwords that fits into this mask), and Password range (first and last passwords to be checked):

Combination attack
This attack allows to test passwords that consist of two words, each of them taken from the dictionary (word list). Select the dictionaries in Dictionary 1 and Dictionary 2 fields (you can use the same file or different ones); and the additional options are:
- Check upper- and lower-case combination
- Use word delimiters
- Use extra mutations
With the first option, the program will try to capitalize the first letter of each word, i.e. testing all four combinations. The second option (Use word delimiters) allows to set the different characters (like dash and underline, though you can set any other ones as well) to be used between words. Finally, you can apply extra mutations to all resulting passwords (Dictionary mutations options will be used). The program tries to estimate the total number of passwords instantly, but mutations will not be counted (it is virtually impossible to do that).
Hybrid attack
In Dictionary attack, If several mutations are specified, then passwords are formed sequentially, first with some mutations, then with others, etc. Mutations do NOT overlap each other
For Examle: The Digits and Strip mutations are set. First, a list of Digits mutations (such as password1, password2 ...) is formed, then Strip mutations (pssword, paword ..) are added to this list. But password1, password2 (as well as pssword, paword) are no longer transformed.
But if you need to find password “pawod9”, first you need to make a Strip, and then put digits mutations on the passwords RECEIVED after the Strip once again. For this case you need Hybrid attack
This attack is similar to Dictionary attack described above, but all mutations are set by the user. Here you can select one or more dictionaries (wordlists), as well as several mutation rules. The rules are set in *.rul files; here are the ones coming with the program:
- all.rul - all rules (~82000)
- cases.rul - all possible case combinations (up to 15 character words)
- common.rul – common mutation rules
- custom.rul – default rules for custom attacks
- dups.rul – rules to search for passwords based on various duplicated words or characters
- dates.rul – date mutations
- keyboard.rul – rules to search for passwords based on all possible keyboard combinations
- l33t.rul – l33t 'language'
- numbers.rul – manipulations with numbers
- rockyou.rul – top rules based on various leaked passwords
The actual contents of *.rul file starts with [Rules] section (all text before this tag is considered a comment). Maximum length of one rule is 256 bytes. Maximum length of the output word (generated by the rule) should not exceed 256 characters, too. One line can contain several rules (any ones but aN); they are processed from left to right.
Token |
Description |
Example |
:
|
Do nothing, use the original input word
|
|
{
|
Rotate left
|
password -> asswordp
|
}
|
Rotate right
|
password -> dpasswor
|
[
|
Delete the first character
|
password -> assword
|
]
|
Delete the last character
|
password -> passwor
|
с
|
Capitalize
|
password -> Password
|
С
|
Lowercase the first character, uppercase the rest
|
password -> pASSWORD
|
d
|
Duplicate
|
password -> passwordpassword
|
f
|
Reflect
|
password -> passworddrowssap
|
l
|
Convert to lowercase
|
PassworD -> password
|
K
|
Swap the last two characters:
|
password -> passwodr
|
q
|
Duplicate all symbols
|
password -> ppaasssswwoorrdd
|
r
|
Reverse
|
password -> drowssap
|
t
|
Toggle case of all characters
|
PassWord -> pASSwORD
|
u
|
Convert to uppercase
|
pAssword -> PASSWORD
|
V
|
Vowels elite
|
password -> PaSSWoRD
|
v
|
Vowels noelite
|
password -> pAsswOrd
|
'N
|
Truncate the word to N character(s) length
|
'4: password -> pass
|
>N
|
Reject the word if it is less than N characters long. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
>5: password -> OK pass -> not checked
|
<N
|
Reject the word if it is greater than N characters long. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
<5: password -> not checked pass -> OK
|
+N
|
Increment character at position N by 1 ASCII value. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
+1: password -> pbssword
|
-N
|
Decrement character at position N by 1 ASCII value. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
-0: password -> oassword
|
.N
|
Replace the character at position N with one at position N+1. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
.4: password -> passoord
|
,N
|
Replace the character at position N with one at position N-1. 1<=N<=35 (1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
,4: password -> passsord
|
aN
|
Check all possible symbol cases for the word. N is a maximal length of the word to apply this rule for. This rule CANNOT be used in conjunction with other ones!
|
a2: ab -> ab, aB, AB, Ab abc -> abc
|
DN
|
Delete the character at position N
|
D2: password -> pasword
|
pN
|
Copy word N times. N = 3 .. 9
|
p3: abc -> abcabcabc
|
TN
|
Toggle case of the character at position N. N = 0 .. 9 for the position 0 - 9, N = A .. Z for the position 10 - 35
|
T3: password -> pasSword
|
yN
|
Duplicate first N characters. 1<=N<=35 (1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
Y4: password-> passpassword
|
YN
|
Duplicate last N characters. 1<=N<=35 (1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
Y4: password-> passwordword
|
zN
|
Duplicate the first character of the word N times. N = 1 .. 9
|
z2: password -> pppassword
|
ZN
|
Duplicate the last character of the word N times. N = 1 .. 9
|
Z3: password -> passwordddd
|
$X
|
Add character X to the end of the word
|
$s: password -> passwords
|
^X
|
Insert character X at the beginning of the word
|
$1: password -> 1password
|
@X
|
Remove all characters X from the word
|
@s: password -> paword
|
!X
|
Reject the word if it contains at least one character X
|
!a: password -> not checked Ohio -> OK
|
/X
|
Reject the word if it does not contain character X
|
!o: password -> OK Adam -> not checked
|
(X
|
Reject the word if the first character is not X
|
(p: password -> OK Texas -> not checked
|
)X
|
Reject the word if the last character is not X
|
)a: password -> not checked Anna - OK
|
eX
|
Extract a substring starting at position 0 and ending up before the first occurrence of X character. Do nothing if X is not found.
|
ew: password -> pass
|
EX
|
Extract a substring starting right after the first found X character and till the end of the string. Do nothing if X is not found.
|
Ew: password -> ord
|
*MN
|
Swap the character at position M with the character at position N. 0<=N|M<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
*02: password -> sapsword
|
%MX
|
Reject the word if it does not contain at least M instances of the character X
|
%2s: password -> OK Nexus -> not checked
|
=NX
|
Reject the word if the character at position N is not equal to the X
|
=0p: password -> OK John -> not checked
|
iNX
|
Insert the character X in position N
|
i2S: password -> paSssword
|
oNX
|
Overwrite a character in position N with the character X
|
o2S: password -> paSsword
|
sXY
|
Replace all characters X with Y
|
ss$: password -> pa$$word
|
xNM
|
Extract a substring of up to M characters length, starting from position N. M = 1 .. 9 for the length equal to 1 - 9, M = A .. Z for the length equal to 10 - 35
|
x04: password -> pass |
SLN
|
Bitwise left shift of the character at position N. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
SL1: password -> pВssword
|
SRN
|
Bitwise right shift of the character at position N. 0<=N<=35 (0,1,2,3,4,5,6,7,8,9,A,B,C..Z)
|
SR7: password -> passwor2
|
|