Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150421141822.GA10458@openwall.com>
Date: Tue, 21 Apr 2015 17:18:22 +0300
From: Aleksey Cherepanov <lyosha@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Johnny: core/jumbo differences

I've tried to write down exhaustive list of differences between john
core and john jumbo. I don't know everything, so feel free to comment.

This list does not cover usage of the differences in Johnny. I'll make
a follow up with ideas.

Thanks!

Regards,
Aleksey Cherepanov



* Common CLI options without differences

--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter


--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             give a new session the NAME
--status[=NAME]            print status of a session [called NAME]


There is a point about session names related to --fork/--node: there
are multiple session files with number of node in names.

$ ./core-1.8.0/run/john  ~/d/disk/contest/hashes-canon/01-base.md5crypt.pw
$ ls core-1.8.0/run/*rec
core-1.8.0/run/john.rec
$ ./core-1.8.0/run/john --fork=3  ~/d/disk/contest/hashes-canon/01-base.md5crypt.pw
$ ls core-1.8.0/run/*rec
core-1.8.0/run/john.2.rec  core-1.8.0/run/john.3.rec  core-1.8.0/run/john.rec
$ rm core-1.8.0/run/*rec
$ ./core-1.8.0/run/john --fork=3 --node=5-7/16 ~/d/disk/contest/hashes-canon/01-base.md5crypt.pw
$ ls core-1.8.0/run/*rec
core-1.8.0/run/john.6.rec
core-1.8.0/run/john.7.rec
core-1.8.0/run/john.rec


--make-charset=FILE        make a charset, FILE will be overwritten
--make-charset=FILE       make a charset file. It will be overwritten
(core, then jumbo; only descriptions are different)


--test[=TIME]              run tests and benchmarks for TIME seconds each

--users=[-]LOGIN|UID[,..]  [do not] load this (these) user(s) only
--groups=[-]GID[,..]       load users [not] of this (these) group(s) only
--shells=[-]SHELL[,..]     load users with[out] this (these) shell(s) only

--save-memory=LEVEL        enable memory saving, at LEVEL 1..3

--node=MIN[-MAX]/TOTAL     this node's number range out of TOTAL count
--fork=N                   fork N processes


* Common CLI Options

The format:
core option
jumbo option
comments

----------------------------------------

--single                   "single crack" mode

--single[=SECTION]        "single crack" mode

It is possible to choose Rules section to run with single mode.
[List.Rules:Single] is the default in both versions (so --single is
equivalent to --single=Single; though parameters are not case
sensitive).

----------------------------------------

--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin

--wordlist[=FILE] --stdin wordlist mode, read words from FILE or stdin
                  --pipe  like --stdin, but bulk reads, and allows rules

$ ./core-1.8.0/run/john --wordlist ~/d/t.pw
Option requires a parameter: "--wordlist"

The default wordlist is used by default in jumbo:
[Options]
# Wordlist file name, to be used in batch mode
Wordlist = $JOHN/password.lst

Also jumbo has --stdin and --pipe options to read candidates from
standard input.

----------------------------------------

--rules                    enable word mangling rules for wordlist mode

--rules[=SECTION]         enable word mangling rules for wordlist modes

$ ./core-1.8.0/run/john --rules=NT --wordlist=~/d/t.pw ~/d/t.pw
Extra parameter for option: "--rules=NT"

Core does not allow rules section to be specified. Both versions
default to [List.Rules:Wordlist]

----------------------------------------

--show                     show cracked passwords

--show[=LEFT]             show cracked passwords [if =LEFT, then uncracked]

In jumbo --show can print remaining hashes but it drops dupes (when
there is 1 canonical hash for 2 users and the hash is in different
forms and/or there are different gecos).

----------------------------------------

--salts=[-]N               load salts with[out] at least N passwords only

--salts=[-]COUNT[:MAX]    load salts with[out] COUNT [to MAX] hashes

----------------------------------------

--format=NAME              force hash type NAME: descrypt/bsdicrypt/md5crypt/
                           bcrypt/LM/AFS/tripcode/dummy/crypt

--format=NAME             force hash of type NAME. The supported formats can
                          be seen with --list=formats and --list=subformats

Format list is much larger in jumbo, also it is possible to specify
hash type for generic crypt through --subformat option.


* Jumbo-only CLI options

--loopback[=FILE]         like --wordlist, but fetch words from a .pot file
--dupe-suppression        suppress all dupes in wordlist (and force preload)
--prince[=FILE]           PRINCE mode, read words from FILE
--encoding=NAME           input encoding (eg. UTF-8, ISO-8859-1). See also
                          doc/ENCODING and --list=hidden-options.
--mask=MASK               mask mode using MASK
--markov[=OPTIONS]        "Markov" mode (see doc/MARKOV)
--pot=NAME                pot file to use
--list=WHAT               list capabilities, see --list=help or doc/OPTIONS
--help                    print usage summary, just like running the command
                          without any parameters
--config=FILE             use FILE instead of john.conf or john.ini
--mem-file-size=SIZE      size threshold for wordlist preload (default 5 MB)
--format=CLASS            valid classes: dynamic, cpu
--subformat=FORMAT        pick a benchmark format for --format=crypt
--mkpc=N                  request a lower max. keys per crypt
--min-length=N            request a minimum candidate length
--max-length=N            request a maximum candidate length
--costs=[-]C[:M][,...]    load salts with[out] cost value Cn [to Mn] for
                          tunable cost parameters, see doc/OPTIONS
                          (comma separated list of values/ranges per param.)
--field-separator-char=C  use 'C' instead of the ':' in input and pot files
--fix-state-delay=N       performance tweak, see doc/OPTIONS
--nolog                   disables creation and writing to john.log file
--log-stderr              log to screen instead of file
--bare-always-valid=C     if C is 'Y' or 'y', then the dynamic format will
                          always treat bare hashes as valid
--progress-every=N        emit a status line every N seconds
--crack-status            emit a status line whenever a password is cracked
--keep-guessing           try more candidates for cracked hashes (ie. search
                          for plaintext collisions)
--max-run-time=N          gracefully exit after this many seconds
--regen-lost-salts=N      regenerate lost salts (see doc/OPTIONS)
--mkv-stats=FILE          "Markov" stats file (see doc/MARKOV)
--reject-printable        reject printable binaries
--verbosity=N             change verbosity (1-5, default 3)
--skip-self-tests         skip self tests
--stress-test[=TIME]      loop self tests forever
--input-encoding=NAME     input encoding (alias for --encoding)
--internal-encoding=NAME  encoding used in rules/masks (see doc/ENCODING)
--target-encoding=NAME    output encoding (used by format, see doc/ENCODING)

PRINCE mode options:
--prince-loopback[=FILE]  fetch words from a .pot file
--prince-elem-cnt-min=N   minimum number of elements per chain (1)
--prince-elem-cnt-max=N   maximum number of elements per chain (8)
--prince-skip=N           initial skip
--prince-limit=N          limit number of candidates generated
--prince-wl-dist-len      calculate length distribution from wordlist
                          instead of using built-in table
--prince-wl-max=N         load only N words from input wordlist
--prince-case-permute     permute case of first letter
--prince-mmap             memory-map infile (not available when permuting case)
--prince-keyspace         just show total keyspace that would be produced
                          (disregarding skip and limit)

Also there should be options for rexgen and other things not compiled
in my john:
OpenMPI support (default disabled) .......... no
OpenMP support .............................. no
OpenCL support .............................. no
CUDA support ................................ no
Experimental code ........................... no
Rexgen (extra cracking mode) ................ no
Memdbg memory debugging settings ............ disabled
AddressSanitizer ("ASan") ................... disabled


* Config file

In Jumbo config files may include other files. Core john has only one
file.

John built from sources searches config file (and other files) in run/
directory, john installed from package most usually looks into ~/.john
and /etc/john . While distros usually use john core, there distros
with jumbo. Also this behaviour may depend on distro.

With jumbo, you can get path to the folder with --list=build-info option:
$ jumbo/run/john --list=build-info
[...]
$JOHN is jumbo/run/
[...]


* Utilities and tools

In core
john - john
mailer - "script to send mail to all users whose passwords got cracked."
makechr - utility to make .chr files (incremental mode) from current .pot
relbench - statistics for benchmarks
unafs
unique - filter to remove dupes in wordlist saving order
unshadow

unafs and unshadow may fall into *2john category.


BTW Jumbo has bash auto-completions.


In jumbo there are various utilities:

*2john converters (including symlinks):

These tools usually read file(s) and print hashes to stdout in a form
john understands them. Some utilities perform quite non-trivial
parsing using pulled-in third party libraries.

1password2john.py
7z2john.py
aix2john.pl
aix2john.py
androidfde2john.py
apex2john.py
bitcoin2john.py
blockchain2john.py
cisco2john.pl
cracf2john.py
dmg2john
dmg2john.py
ecryptfs2john.py
efs2john.py
encfs2john.py
gpg2john
hccap2john
htdigest2john.py
ikescan2john.py
ios7tojohn.pl
kdcdump2john.py
keepass2john
keychain2john
keychain2john.py
keyring2john
keyring2john.py
keystore2john
keystore2john.py
known_hosts2john.py
kwallet2john
kwallet2john.py
lastpass2john.py
ldif2john.pl
lion2john-alt.pl
lion2john.pl
lotus2john.py
luks2john
mcafee_epo2john.py
ml2john.py
mozilla2john.py
odf2john.py
office2john.py
openbsd_softraid2john.py
openssl2john.py
pcap2john.py
pdf2john.py
pfx2john
putty2john
pwsafe2john
racf2john
radius2john.pl
rar2john
raw2dyna
rexgen2rules.pl
sap2john.pl
sipdump2john.py
ssh2john
ssh2sshng.py
sshng2john.py
strip2john.py
sxc2john.py
truecrypt_volume2john
uaf2john
vncpcap2john
wpapcap2john
zip2john

undrop


There are more tools:

base64conv - raw/hex/base64(mime/crypt/cryptBS) converter
genincstats.rb - make statistics from .inc file
leet.pl - rules generator for leet speak
netscreen.py - netscreen hasher
hextoraw.pl - unhex for pass_gen.pl
pass_gen.pl - dynamic formats hasher
sha-dump.pl - ldap dumper
sha-test.pl - ldap sha1 hasher
calc_stat - some statistics for wordlist

benchmark-unify
# John the Ripper benchmark output conversion tool, revision 1

netntlm.pl
#   The purpose of this script is to aid with cracking a LM/NTLM
#   challenge/response set, when part of the password is known. It
#   was written with John's NetLM/NetNTLM formats and "halflmchall"
#   Rainbow Tables in mind.

unrule.pl
# Extract basewords from list of plains. Based on an embryo from epixoip.
# ./unrule.pl < rockyou.lst > basewords.lst

(I don't know at all)
genmkvpwd
mkvcalcproba
SIPdump
tgtsnarf
cprepair

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.