
 John the Ripper's Usage Examples
==================================

These examples are to give you some tips on what John's features can be
used for. Some of them may not be obvious, I'm sorry if others are, but
anyway, I just got tired of answering questions.

 Command Line
--------------

1. First, you need to get a copy of your password file. If you got shadow
passwords, then (as root):

	unshadow /etc/passwd /etc/shadow > passwd.1

or similar should do (replace the filenames as needed, and make sure that
your combined password file isn't readable by others). Otherwise, just:

	cp /etc/passwd passwd.1

If you're going to crack AFS or NT passwords, then use 'unafs' or Jeremy
Allison's PWDump (ftp://samba.anu.edu.au/pub/samba/pwdump/), respectively.

2. Assume you just got a password file, 'passwd.1', and want to crack it.
The simplest way is to use the default order of cracking modes:

	john passwd.1

This will try "single crack" mode first, then use a wordlist with rules,
and finally go for incremental mode. Read doc/MODES for more information
on these modes.

It is highly recommended that you obtain a larger wordlist, and edit the
'Wordfile =' line in ~/john.ini before running John.

3. Now, you got some passwords cracked, they are saved in ~/john.pot. You
want to retrieve them:

	john -show passwd.1

If the account list gets large and doesn't fit on the screen, you can, of
course, use output redirection. (There's intentionally no example here, a
few people have asked for one, but they shouldn't be using John anyway.)

Now, you may notice that many accounts have a disabled shell, you can make
John ignore these (assume that shell is called '/etc/expired'):

	john -show -shells:-/etc/expired passwd.1

or, shorter, but will also match '/any/path/expired':

	john -show -shells:-expired passwd.1

or, if you also want to ignore some other shell, say '/etc/newuser':

	john -show -shells:-expired,newuser passwd.1

(Note: the above syntax has changed since version 1.4 so that it's more
logical and shorter to type.)

To check if any root (uid 0) accounts got cracked:

	john -show -users:0 passwd.1

or, to check for cracked root (uid 0) accounts in all the files:

	john -show -users:0 passwd.*

To display the root (login 'root') account only:

	john -show -users:root passwd.1

And finally, to check for privileged groups:

	john -show -groups:0,1 passwd.1

4. You might prefer to manage the cracking modes manually instead. It is
wise to start with "single crack" mode:

	john -single passwd.1

or, since options can be abbreviated (however, I'll be using full names
for most options in these examples):

	john -si passwd.1

If you have more files to crack, better to load them at the same time:

	john -single passwd.1 passwd.2

or even:

	john -single passwd.*

5. To catch more complicated (but still weak) passwords, you can use more
powerful cracking modes. First, try a wordlist:

	john -w:words.lst passwd.1

or, you might prefer to use the GNU-style long options syntax, say, to use
file name completion in bash:

	john --wordfile=words.lst passwd.1

or, shorter to type:

	john -w=words.lst passwd.1

or, with rules enabled (slower, but more powerful; this is what you should
use if you're trying to locate almost all the weak passwords):

	john -w:words.lst -rules passwd.1

or, if you got a lot of spare disk space to trade for performance:

	john -w:words.lst -rules -stdout:8 | unique huge.lst
	john -w:huge.lst passwd.1

This is going to take some time, so you will probably want to continue
cracking in the background. You can simply disconnect, or close your
xterm: John will ignore the SIGHUP and continue running. Alternatively,
you might prefer to start it like this, and then logout:

	nice -n 20 john -w:words.lst -rules passwd.1 &

Finally, to make John have even less impact on other processes, you might
want to set the 'Idle =' option in ~/john.ini.

To only crack accounts with a good shell (in general, the shell, user and
group filters described above work for all the cracking modes also):

	john -w:words.lst -rules -shells:sh,csh,tcsh,bash passwd.1

Like with all the other cracking modes, faster to crack all the files you
need cracked simultaneously:

	john -w:words.lst -rules passwd.*

You can crack some passwords only. This will try cracking all root (uid 0)
accounts in all the password files:

	john -w:words.lst -rules -users:0 passwd.*

Alternatively, you may wish not to waste the time cracking your very own
passwords, if you're sure they're uncrackable:

	john -w:words.lst -rules -users:-root,solar passwd.*

Sometimes it is useful to split your password files into two parts which
you crack separately, like:

	john -w:words.lst -rules -salts:2 passwd.*
	john -w:words.lst -rules -salts:-2 passwd.*

This will make John try salts with two or more passwords faster, and then
try the rest. Total cracking time will be about the same, but you will get
some passwords cracked earlier, and may not need the rest. Also, you might
want to try all the accounts with a small wordlist, and only those that
you can try faster (with '-salts:2') with a larger one. Often it is better
to use a larger value than 2 for '-salts' (sometimes even as high as 1000
will do, indicating a problem with your password changing program though),
adjust it for your particular case.

Note that the default wordlist rules include ':' (which means "try words
as they are in the list") as the first line. If you already ran through a
wordlist without using rules, and then decided to try the same wordlist
with rules also, you'd better comment this line out.

6. The most powerful cracking mode in John is called "incremental" (not a
proper name, but kept for historical reasons). You can simply run:

	john -i passwd.1

This will use the default incremental mode parameters, which are defined
in ~/john.ini's [Incremental:All] section. In the configuration file
supplied with John these parameters are to use the full 95 character set,
and to try all possible password lengths, from 0 to 8. (By zero password
length I mean a hashed empty string, this sometimes happens.) Don't expect
this to terminate in a reasonable time (unless all the passwords were weak
and got cracked), read doc/MODES for an explanation.

In some cases it is faster to use some other pre-defined incremental mode
parameters and only crack simpler passwords, from a limited charset. The
following command will try 26 different characters only, passwords from
'a' to 'zzzzzzzz':

	john -i:alpha passwd.1

Again, you can crack root accounts only and use some other John's features
with the incremental mode. This command will try cracking all root (uid 0)
accounts in all the password files, and only those of them that produce
matching salts, so you get at least twice the performance -- if you have a
lot of password files (like 100+ of them, named '*.pwd'), otherwise there
will probably be no roots with matching salts:

	john -i -users:0 -salts:2 *.pwd

7. If you got a password file and already have a lot of passwords cracked
or sniffed, and the passwords are unusual, then you might want to generate
a new charset file, based on characters from that password file only:

	john -makechars:custom.chr passwd.1

Then use that new file for the incremental mode.

If you got many password files from your country, your university, etc,
it might be useful to use all of them for the charset file that you then
use to crack more passwords in these files, or some other files from the
same place:

	john -makechars:custom.chr passwd.1 passwd.2
	[ Add your custom incremental mode to ~/john.ini now. See below. ]
	john -i:custom passwd.3

You can use some pre-defined or custom word filters when generating the
charset file, to make it only try some simpler words:

	john -makechars:my_alpha.chr -external:filter_alpha passwd.1

If your ~/john.pot file got large enough (or if you don't have any charset
files at all), you might want to use it for new main charset files:

	john -makechars:all.chr
	john -makechars:alpha.chr -external:filter_alpha
	john -makechars:digits.chr -external:filter_digits
	john -makechars:lanman.chr -external:filter_lanman

In the example above, John will overwrite the charset files with new ones
that are based on your entire ~/john.pot (John uses the entire file if you
don't specify any password files). Note that the word filters used here
are pre-defined in ~/john.ini supplied with John, for your convenience.

8. Finally, you might want to mail all the users who got weak passwords,
to tell them to change the passwords. It's not always a good idea though
(unfortunately, lots of people seem to ignore such mail, it can be used
as a hint for crackers, etc), but anyway, I'll assume you know what you're
doing. Edit the 'mailer' script supplied with John: the message it sends,
and possibly the mail command (especially if the password file is from a
different box than you got John running on). Then run:

	mailer passwd.1

 Configuration File
--------------------

1. Assume you notice that in some password file a lot of users have their
passwords set to login names with '?!' appended. Then you just make a new
"single crack" mode rule (see doc/RULES for information on the syntax),
and place it somewhere near the beginning:

	[List.Rules:Single]
	$?$!

Hint: if you want to temporarily comment out all the default rules, you
can simply rename the section to something John doesn't use, and define
a new one with the section's old name, but be sure to leave the 'list.'
part of the name, so that you don't get a parse error.

All the same applies to the wordlist rules also.

2. If you generate a custom charset file (described above) you will also
need to define a ~/john.ini section with the incremental mode parameters.
In the simplest case it will be like this (where 'Custom' can be replaced
with any name you like):

	[Incremental:Custom]
	File = custom.chr

This will make John use characters that were in passwords used to generate
the charset file only. To make John try some more characters, add:

	Extra = !@#$%

These extra characters will then be added, but still considered the least
probable. If you want to make sure that, with your extra characters, John
will try all the 95 characters, you can add:

	CharCount = 95

This will make John print a warning if it only has less than 95 characters
in its charset.

You can also use CharCount to limit the number of different characters
that John tries, even if the charset file has more:

	CharCount = 25

If you didn't use any filters when generating the charset file, setting
CharCount that low will most likely disable some rare characters, and make
John try complicated long passwords earlier. However, the default length
switching is usually smart enough so that you shouldn't need such a trick.

To make John try passwords of some lengths only, use the following lines:

	MinLen = 6
	MaxLen = 8

Setting 'MinLen' high, as in the example above, is reasonable if shorter
passwords weren't allowed to set on the machine you got the password file
from (however, note that root can usually set any password for any user).

On the contrary, you might want to set 'MaxLen' low if you think there's
a lot of short passwords.

3. Another example: a lot of users at some site use short duplicated words
as their passwords, such as "fredfred". As the number of such potential
passwords is fairly low, it makes sense to code a new external cracking
mode that tries them all, up to some length.

You can find the actual implementation of such a cracking mode with lots
of comments in the default ~/john.ini supplied with John. See doc/EXTERNAL
for information on the language used.
