• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

extras/H03-May-2022-10164

Auditing-Kerio-Connect.mdH A D14-Jul-20188.7 KiB259204

Auditing-Openfire.mdH A D09-Nov-20172.6 KiB8056

AxCrypt-Auditing-HOWTO.mdH A D10-Aug-20163.9 KiB10780

CHANGESH A D12-Apr-201921.9 KiB381342

CHANGES-jumboH A D14-May-2019832.2 KiB17,12716,935

CONFIGH A D14-May-20199.7 KiB244181

CONTACTH A D23-May-20151.1 KiB3121

COPYINGH A D23-May-201517.7 KiB340281

CREDITSH A D30-Mar-20192.8 KiB7750

CREDITS-jumboH A D14-May-20193.8 KiB211196

DYNAMICH A D26-Feb-2018137.2 KiB2,9932,872

DYNAMIC_COMPILER_FORMATS.mdH A D06-Dec-20186.4 KiB219176

DYNAMIC_EXPRESSIONSH A D07-Nov-20176 KiB11395

DYNAMIC_SCRIPTINGH A D10-Aug-201620.3 KiB484397

DiskCryptor-HOWTO.mdH A D30-Mar-20191.1 KiB3923

ENCODINGSH A D07-Nov-20175.5 KiB10790

EXAMPLESH A D07-Nov-201714.7 KiB408277

EXTERNALH A D14-May-201910.7 KiB226172

FAQH A D12-Apr-201917.4 KiB311279

HDAA_READMEH A D07-Nov-20171.3 KiB5125

INSTALLH A D14-May-20197.4 KiB184135

INSTALL-FEDORAH A D14-May-20191.9 KiB6541

INSTALL-UBUNTUH A D13-Apr-20194 KiB11977

INSTALL-WINDOWSH A D09-Apr-20191.5 KiB5833

Kerberos-Auditing-HOWTO.mdH A D07-Nov-20174 KiB155109

LICENSEH A D23-May-20152.3 KiB6241

LICENSE.mpiH A D23-May-2015260 54

MARKOVH A D10-Aug-20169.4 KiB210163

MASKH A D09-May-20196.9 KiB164123

MODESH A D11-Apr-20199.8 KiB199159

NETNTLM_READMEH A D10-Aug-20167.8 KiB144119

NEWSH A D14-May-201921.9 KiB403326

OFFICEH A D23-May-2015194 74

OPTIONSH A D11-Apr-201934.8 KiB692555

PRINCEH A D10-Aug-20162.6 KiB5443

READMEH A D14-May-20198.2 KiB186136

README-DISTROSH A D09-Apr-20195.3 KiB7871

README-MICH A D22-Jun-20152.4 KiB8262

README-OPENCLH A D09-Apr-20197.8 KiB202151

README-PDFH A D07-Nov-2017220 116

README-PSTH A D10-Aug-2016343 148

README-TACACS+H A D07-Mar-20182.1 KiB4630

README-ZIPH A D09-Nov-2017270 137

README-ZTEXH A D30-Mar-20193.6 KiB9377

README-krb5-18-23H A D23-May-20151.7 KiB5440

README.7z2john.mdH A D07-Nov-2017502 116

README.Apple_DMGH A D23-May-2015323 169

README.BitLockerH A D26-Feb-20182.8 KiB7452

README.EthereumH A D07-Nov-2017562 2010

README.FileVault2H A D07-Nov-20172 KiB6139

README.FreeBSDH A D23-May-2015150 64

README.IBM_AS400H A D07-Nov-20174 KiB8166

README.LUKSH A D23-May-20151.2 KiB3023

README.LotusNotesH A D23-May-2015459 2012

README.MinGWH A D26-Feb-20181 KiB4026

README.RACFH A D26-Feb-2018462 1910

README.TezosH A D06-Dec-2018841 1810

README.apexH A D07-Nov-20171.7 KiB7750

README.bash-completionH A D22-Jun-201519.1 KiB628455

README.bitcoinH A D23-May-2015335 137

README.coding-styleH A D06-Aug-20154.9 KiB244161

README.cprepairH A D23-May-2015889 2316

README.format-epiH A D23-May-20151 KiB2617

README.gpgH A D10-Aug-2016444 148

README.ios7H A D23-May-2015657 2111

README.keychainH A D23-May-2015285 137

README.keyringH A D23-May-2015262 137

README.keystoreH A D10-Aug-2016344 159

README.krb5tgs-17-18-23.mdH A D30-Mar-20195 KiB12078

README.kwalletH A D23-May-2015241 137

README.librexgenH A D11-Apr-20194.8 KiB124100

README.mozillaH A D23-May-2015339 117

README.mpiH A D30-Mar-20199.4 KiB216169

README.pwsafeH A D23-May-2015345 137

README.sshH A D25-Apr-2018195 95

RULESH A D14-May-201916.6 KiB374296

RULES-hashcatH A D14-May-20196 KiB10691

SHOW_FORMATS.mdH A D09-May-201910.4 KiB319250

SIPcrack-LICENSEH A D23-May-20151.4 KiB2722

SUBSETSH A D06-Dec-20185 KiB10980

SecureMode-tutorial.mdH A D23-May-20151.3 KiB6653

pass_gen.ManifestH A D23-May-201510 KiB179160

pcap2john.readmeH A D09-Nov-20179 KiB232216

HDAA_README

1                  HTTP Digest access authentication
2                  ---------------------------------
3
4
5
6- How to create the password string :
7-------------------------------------
8
9
10user:$MAGIC$response$user$realm$method$uri$nonce$nonceCount$ClientNonce$qop
11
12'$' is use as separator, you can change it in HDAA_fmt.c
13
14
15Example of password string :
16
17user:$response$679066476e67b5c7c4e88f04be567f8b$user$myrealm$GET$/$8c12bd8f728afe56d45a0ce846b70e5a$00000001$4b61913cec32e2c9$auth
18
19Here the magic is '$response$'
20
21
22
23
24
25- Demonstration :
26-----------------
27
28Tested on a : AMD Athlon(tm) 64 Processor 3000+
29
30$ cat ./htdigest
31moi:$response$faa6cb7d676e5b7c17fcbf966436aa0c$moi$myrealm$GET$/$af32592775d27b1cd06356b3a0db9ddf$00000001$8e1d49754a25aea7$auth
32user:$response$679066476e67b5c7c4e88f04be567f8b$user$myrealm$GET$/$8c12bd8f728afe56d45a0ce846b70e5a$00000001$4b61913cec32e2c9$auth
33
34$ ./john ./htdigest
35Loaded 2 password hashes with 2 different salts (HTTP Digest access authentication [HDAA-MD5])
36kikou            (moi)
37nocode           (user)
38guesses: 2  time: 0:00:01:27 (3)  c/s: 670223  trying: nocode
39
40
41
42
43
44- Legacy HDAA support:
45----------------------
46
47If the system you are testing uses the old HDAA algorithm, you may cut the string after the nonce:
48
49$ cat ./htdigest
50user:$response$8663faf2337dbcb2c52882807592ec2c$user$myrealm$GET$/$8c12bd8f728afe56d45a0ce846b70e5a$
51

NETNTLM_README

1LM/NTLM Challenge / Response Authentication
2JoMo-Kun (jmk at foofus dot net) ~ 2010
3
4Microsoft Windows-based systems employ a challenge-response authentication
5protocol as one of the mechanisms used to validate requests for remote file
6access. The configured/negotiated authentication type, or level, determines how
7the system will perform authentication attempts on behalf of users for either
8incoming or outbound requests. These requests may be due to a user initiating a
9logon session with a remote host or, in some cases, transparently by an
10application they are running. In many cases, these exchanges can be replayed,
11manipulated or captured for offline password cracking. The following text
12discusses the available tools within the John the Ripper "Jumbo" patch for
13performing offline password auditing of these specific captured challenge-
14response pairs.
15
16Why might these exchanges be of interest? A primary point of most penetration
17tests is to find avenues through which the assessor can gain unauthorized access
18to some resource. This often relies on the compromise of a system's local
19accounts or the exploitation of some service-level vulnerability. The ability to
20capture on-the-wire authentication exchanges and to crack the associated
21password adds another option to the mix. The fact that these exchanges can be
22cracked aids in demonstrating to clients why one authentication algorithm may be
23preferred to another.
24
25A given server is likely to use one of the following protocols for
26authentication challenge-response: LMv1, NTLMv1, LMv2 or NTLMv2. It should be
27noted that these protocols may use the LM and NTLM password hashes stored on a
28system, but they are not the same thing. For an excellent in-depth discussion of
29the protocols see the Davenport paper entitled "The NTLM Authentication Protocol
30and Security Support Provider" [1]. For the purposes of this discussion, the key
31item of note is that the LMv1 and NTLMv1 protocols consist of only a single
32server challenge. This allows an attacker to force a client into authenticating
33using a specific challenge and then attack that response using precomputed
34Rainbow Tables.
35
36There are a variety of methods for capturing challenge-response pairs, including
37the use of tools such as MetaSploit and Ettercap. The author's preferred method
38is to use a modified version of Samba[2]. The provided patch sets the server's
39challenge to a fixed value (i.e. 0x1122334455667788) and logs all authentication
40attempts in a format suitable for use with John. The patch also includes a
41modification to the nmbd application. Nmbd is used to respond to broadcast
42requests for NetBIOS name/IP information. The modified service simply responds
43to all requests with its own IP address, often resulting in hosts unknowingly
44authenticating to the wrong system. Another common method of forcing systems to
45authenticate to the Samba server is through the use of HTML image source tags.
46For example, simply inserting the tag "<img src=file://192.168.1.10/logo.gif>"
47into a HTML message will cause some email client applications to automatically
48perform an authentication attempt. Other examples include the use of specialized
49desktop.ini files and many other mischievous tricks.
50
51It is also worth noting that these challenge/response protocols are not limited
52to the Microsoft File and Print Services. For example, Cisco's LEAP wireless
53security mechanism, EAP-PEAP and PPTP all utilize a MS-CHAP handshake, or
54modified variant. The NTLMv1 challenge/response set can be extracted from this
55exchange and subjected to a brute-force guessing attack. Further discussion on
56this subject is outside of the scope of this write-up, but would certainly
57reveal numerous additional uses.
58
59The LMv1 challenge-response mechanism suffers a number of technical limitations.
60As previously noted, only a server challenge is used. This means that if the
61challenge is set to a constant value, a given password will always result in
62the same client authentication response. This allows for the precomputation of
63password / LMv1 responses and their subsequent retrieval using tools such as
64RainbowCrack.
65
66To further exacerbate the issue, the LM hash used during the generation of the
67LMv1 response converts a password into (at most) two 7 character upper-case
68passwords. The LM hash is then split into three pieces prior to calculating the
69LMv1 response. This process greatly reduces the size of the Rainbow Tables which
70need to be calculated in order to break a given password. For example, the
71so-called "halflmchall" tables widely available on the Internet utilize only the
72first third of the LMv1 response to break the first 7 characters of the
73respective password. The netnlm.pl script discussed in this document can be used
74to attempt to break the remaining characters of the password and its original
75case-sensitive version. The following is an example of cracking a captured
76LMv1/NTLMv1 challenge/response set.
77
78Example LMv1/NTLMv1 Challenge/Response (.lc Format):
79user::WORKGROUP:5237496CFCBD3C0CB0B1D6E0D579FE9977C173BC9AA997EF:A37C5C9316D9175589FDC21F260993DAF3644F1AAE2A3DFE:112233445566778
80
81LMv1 Response: 5237496CFCBD3C0CB0B1D6E0D579FE9977C173BC9AA997EF
82NTLMv1 Response: A37C5C9316D9175589FDC21F260993DAF3644F1AAE2A3DFE
83Server Challenge: 112233445566778
84
85RainbowCrack look-up of password's first 7 characters (upper-cased) using first
86third (8 bytes) of LMv1 response:
87$ rcrack halflmchall/*.rt -f 5237496CFCBD3C0C
88Result: CRICKET
89
90First netntlm.pl Pass (Crack Remaining Characters):
91$ netntlm.pl --file capture.lc --seed CRICKET
92Result: CRICKET88!
93
94Second netntlm.pl Pass (Determine Case Sensitive Password)[a]:
95$ netntlm.pl --file capture.lc
96Result: Cricket88!
97
98[a] Note that the case-sensitive password will be shown about a third through
99the script's output following the text: "Performing NTLM case-sensitive crack
100for account".
101
102The following is an example of cracking a captured NTLMv1 challenge/response. If
103the LMv1 and NTLMv1 response hashes within a given client response are
104identical, it typically means one of two things: either the client machine is
105configured to send only a NTLMv1 response (e.g. LAN Manager Authentication Level
106Group Policy Object set to "Send NTLM response only"), or the user's password is
107greater than 14 characters. If the password is indeed over 14 characters in
108length, it is unlikely a suitable Rainbow Table set is available and brute-force
109guessing will be exhaustively time-consuming.
110
111Example NTLMv1 Challenge/Response (.lc Format):
112user::WORKGROUP:A37C5C9316D9175589FDC21F260993DAF3644F1AAE2A3DFE:A37C5C9316D9175589FDC21F260993DAF3644F1AAE2A3DFE:1122334455667788
113
114John Usage:
115$ john --format=netntlm capture.lc
116
117The LMv2 and NTLMv2 challenge/response protocols both employ unique client
118challenges. This additional data effectively defeats the ability to precompute
119password/response pairs via Rainbow Tables. It should also be noted that
120despite its name, the LMv2 response is computed using a NTLM hash. This results
121in a much harder-to-crack response hash, as the password was not truncated to
122seven characters or upper-cased during the process.
123
124The use of NTLMv2 is now the default policy within Microsoft Windows Vista and
125Windows 7. Its use can be enforced for older versions via the LAN Manager
126Authentication Level Group Policy Object ("Send NTLMv2 response only" (level 3
127or higher)).
128
129Example LMv2 Challenge/Response (.lc Format):
130user::WORKGROUP:1122334455667788:6FAF764ECFDF1D1D9E7BA7B517190F3B:E15C1A679C7609CE
131
132John Usage:
133$ john --format=netlmv2 capture.lc
134
135Example NTLMv2 Challenge/Response (.lc Format):
136user::ATS-W759420A:1122334455667788:02E12C3C2B2F5799D2C1A7661AE80491:0101000000000000B0736308F1C9CA01DABA9E3A11AFD91F0000000002001000310030002E0030002E0032002E0032000000000000000000
137
138John Usage:
139$ john --format=netntlmv2 capture.lc
140
141
142[1] http://davenport.sourceforge.net/ntlm.html
143[2] http://www.foofus.net/jmk/smbchallenge.html
144

README

1[![Build Status](https://travis-ci.com/magnumripper/JohnTheRipper.svg?branch=bleeding-jumbo)](https://travis-ci.com/magnumripper/JohnTheRipper)
2[![Circle CI](https://circleci.com/gh/magnumripper/JohnTheRipper/tree/bleeding-jumbo.svg?style=shield)](https://circleci.com/gh/magnumripper/JohnTheRipper/tree/bleeding-jumbo)
3[![Downloads](https://img.shields.io/badge/Download-Windows%20Build-blue.svg)](https://rebrand.ly/JtRWin64)
4[![License](https://img.shields.io/badge/License-GPL%20v2%2B-blue.svg)](https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/doc/LICENSE)
5[![LoC](https://tokei.rs/b1/github/magnumripper/JohnTheRipper?category=code)](https://github.com/magnumripper/JohnTheRipper/tree/bleeding-jumbo)
6[![Contributors](https://img.shields.io/github/contributors/magnumripper/JohnTheRipper.svg?label=Contributors)](https://github.com/magnumripper/JohnTheRipper/graphs/contributors)
7[![Search hit](https://img.shields.io/github/search/magnumripper/JohnTheRipper/goto.svg?label=GitHub%20Hits)](https://github.com/search?utf8=%E2%9C%93&q=john%20the%20ripper&type=)
8
9John the Ripper
10===============
11
12This is the community-enhanced, "jumbo" version of John the Ripper.
13It has a lot of code, documentation, and data contributed by jumbo
14developers and the user community.  It is easy for new code to be added
15to jumbo, and the quality requirements are low, although lately we've
16started subjecting all contributions to quite some automated testing.
17This means that you get a lot of functionality that is not necessarily
18"mature", which in turn means that bugs in this code are to be expected.
19
20If you have any comments on this release or on JtR in general, please
21join the john-users mailing list and post in there:
22
23https://www.openwall.com/lists/john-users/
24
25Licensing info:
26
27https://openwall.info/wiki/john/licensing
28
29For contributions to John the Ripper Jumbo, please use a
30[pull requested (PR) on GitHub](https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/CONTRIBUTING.md).
31
32Included below is basic John the Ripper core documentation.
33
34---
35
36	John the Ripper password cracker.
37
38John the Ripper is a fast password cracker, currently available for
39many flavors of Unix, macOS, Windows, DOS, BeOS, and OpenVMS (the latter
40requires a contributed patch).  Its primary purpose is to detect weak
41Unix passwords.  Besides several crypt(3) password hash types most
42commonly found on various Unix flavors, supported out of the box are
43Kerberos/AFS and Windows LM hashes, as well as DES-based tripcodes, plus
44hundreds of additional hashes and ciphers in "-jumbo" versions.
45
46
47	How to install.
48
49See INSTALL for information on installing John on your system.
50
51
52	How to use.
53
54To run John, you need to supply it with some password files and
55optionally specify a cracking mode, like this, using the default order
56of modes and assuming that "passwd" is a copy of your password file:
57
58	john passwd
59
60or, to restrict it to the wordlist mode only, but permitting the use
61of word mangling rules:
62
63	john --wordlist=password.lst --rules passwd
64
65Cracked passwords will be printed to the terminal and saved in the
66file called $JOHN/john.pot (in the documentation and in the
67configuration file for John, "$JOHN" refers to John's "home
68directory"; which directory it really is depends on how you installed
69John).  The $JOHN/john.pot file is also used to not load password
70hashes that you already cracked when you run John the next time.
71
72To retrieve the cracked passwords, run:
73
74	john --show passwd
75
76While cracking, you can press any key for status, or 'q' or Ctrl-C to
77abort the session saving its state to a file ($JOHN/john.rec by
78default).  If you press Ctrl-C for a second time before John had a
79chance to complete handling of your first Ctrl-C, John will abort
80immediately without saving.  By default, the state is also saved every
8110 minutes to permit for recovery in case of a crash.
82
83To continue an interrupted session, run:
84
85	john --restore
86
87These are just the most essential things you can do with John.  For
88a complete list of command line options and for more complicated usage
89examples you should refer to OPTIONS and EXAMPLES, respectively.
90
91Please note that "binary" (pre-compiled) distributions of John may
92include alternate executables instead of just "john".  You may need to
93choose the executable that fits your system best, e.g. "john-omp" to
94take advantage of multiple CPUs and/or CPU cores.
95
96
97	Features.
98
99John the Ripper is designed to be both feature-rich and fast.  It
100combines several cracking modes in one program and is fully
101configurable for your particular needs (you can even define a custom
102cracking mode using the built-in compiler supporting a subset of C).
103Also, John is available for several different platforms which enables
104you to use the same cracker everywhere (you can even continue a
105cracking session which you started on another platform).
106
107Out of the box, John supports (and autodetects) the following Unix
108crypt(3) hash types: traditional DES-based, "bigcrypt", BSDI extended
109DES-based, FreeBSD MD5-based (also used on Linux and in Cisco IOS), and
110OpenBSD Blowfish-based (now also used on some Linux distributions and
111supported by recent versions of Solaris).  Also supported out of the box
112are Kerberos/AFS and Windows LM (DES-based) hashes, as well as DES-based
113tripcodes.
114
115When running on Linux distributions with glibc 2.7+, John 1.7.6+
116additionally supports (and autodetects) SHA-crypt hashes (which are
117actually used by recent versions of Fedora and Ubuntu), with optional
118OpenMP parallelization (requires GCC 4.2+, needs to be explicitly
119enabled at compile-time by uncommenting the proper OMPFLAGS line near
120the beginning of the Makefile).
121
122Similarly, when running on recent versions of Solaris, John 1.7.6+
123supports and autodetects SHA-crypt and SunMD5 hashes, also with
124optional OpenMP parallelization (requires GCC 4.2+ or recent Sun Studio,
125needs to be explicitly enabled at compile-time by uncommenting the
126proper OMPFLAGS line near the beginning of the Makefile and at runtime
127by setting the OMP_NUM_THREADS environment variable to the desired
128number of threads).
129
130"-jumbo" versions add support for hundreds of additional hash and cipher
131types, including fast built-in implementations of SHA-crypt and SunMD5,
132Windows NTLM (MD4-based) password hashes, various macOS and Mac OS X
133user password hashes, fast hashes such as raw MD5, SHA-1, SHA-256, and
134SHA-512 (which many "web applications" historically misuse for
135passwords), various other "web application" password hashes, various SQL
136and LDAP server password hashes, and lots of other hash types, as well
137as many non-hashes such as SSH private keys, S/Key skeykeys files,
138Kerberos TGTs, encrypted filesystems such as macOS .dmg files and
139"sparse bundles", encrypted archives such as ZIP (classic PKZIP and
140WinZip/AES), RAR, and 7z, encrypted document files such as PDF and
141Microsoft Office's - and these are just some examples.  To load some of
142these larger files for cracking, a corresponding bundled *2john program
143should be used first, and then its output fed into JtR -jumbo.
144
145
146	Graphical User Interface (GUI).
147
148There is an official GUI for John the Ripper: Johnny.
149
150Despite the fact that Johnny is oriented onto JtR core, all basic
151functionality is supposed to work in all versions, including jumbo.
152
153Johnny is a separate program, therefore you need to have John the Ripper
154installed in order to use it.
155
156More information about Johnny and its releases is on the wiki:
157
158https://openwall.info/wiki/john/johnny
159
160
161	Documentation.
162
163The rest of documentation is located in separate files, listed here in
164the recommended order of reading:
165
166* INSTALL - installation instructions
167* OPTIONS - command line options and additional utilities
168* MODES - cracking modes: what they are
169* CONFIG (*) - how to customize
170* RULES (*) - wordlist rules syntax
171* EXTERNAL (*) - defining an external mode
172* EXAMPLES - usage examples - strongly recommended
173* FAQ - guess
174* CHANGES (*) - history of changes
175* CONTACT (*) - how to contact the author or otherwise obtain support
176* CREDITS (*) - credits
177* LICENSE - copyrights and licensing terms
178* COPYING - GNU GPL version 2, as referenced by LICENSE above
179
180(*) most users can safely skip these.
181
182There are a lot of additional documentation files in jumbo's "doc"
183directory, which you'll also want to explore.
184
185Happy reading!
186

README-DISTROS

1Here's how to build a CPU-fallback chain (with OpenMP fallback too) for
2distros. See params.h for some background detail. The only actually tricky
3part is escaping the quotes enough to survive just long enough.
4
5We set the shared directory to /usr/local/share/john in this example, and the
6path to executables to /usr/local/bin. The default private directory is ~/.john
7and it will be created at runtime if it doesn't exist. Note that no make
8target currently does the actual copy to final destination, we do that manually.
9
10The user should always simply run "john" which in this case is AVX512 but will
11seamlessly fallback to john-avx2 -> john-xop -> john-avx -> john-sse4.1 ->
12john-ssse3 -> john-sse2 and finally to any of them with -non-omp, if
13appropriate.
14
15	./configure --disable-native-tests CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\""' --disable-openmp &&
16	make -s clean && make -sj4 strip &&
17	mv ../run/john ../run/john-sse2-non-omp &&
18	./configure --disable-native-tests CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-sse2-non-omp\""' &&
19	make -s clean && make -sj4 strip &&
20	mv ../run/john ../run/john-sse2 &&
21	rm -rf ../run/*.dSYM &&
22	sudo mv ../run/{john-*,*2john,unshadow,unique,undrop,unafs,base64conv,tgtsnarf,mkvcalcproba,genmkvpwd,calc_stat,raw2dyna,cprepair,SIPdump} /usr/local/bin &&
23	./configure --enable-simd=ssse3 --disable-openmp &&
24	make -s clean && make -sj4 strip &&
25	mv ../run/john ../run/john-ssse3-non-omp &&
26	./configure --enable-simd=ssse3 CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-ssse3-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-sse2\""' &&
27	make -s clean && make -sj4 strip &&
28	mv ../run/john ../run/john-ssse3 &&
29	./configure --enable-simd=sse4.1 --disable-openmp &&
30	make -s clean && make -sj4 strip &&
31	mv ../run/john ../run/john-sse4.1-non-omp &&
32	./configure --enable-simd=sse4.1 CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-sse4.1-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-ssse3\""' &&
33	make -s clean && make -sj4 strip &&
34	mv ../run/john ../run/john-sse4.1 &&
35	./configure --enable-simd=avx --disable-openmp &&
36	make -s clean && make -sj4 strip &&
37	mv ../run/john ../run/john-avx-non-omp &&
38	./configure --enable-simd=avx CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-avx-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-sse4.1\""' &&
39	make -s clean && make -sj4 strip &&
40	mv ../run/john ../run/john-avx &&
41	./configure --enable-simd=xop --disable-openmp &&
42	make -s clean && make -sj4 strip &&
43	mv ../run/john ../run/john-xop-non-omp &&
44	./configure --enable-simd=xop CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-xop-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-avx\""' &&
45	make -s clean && make -sj4 strip &&
46	mv ../run/john ../run/john-xop &&
47	./configure --enable-simd=avx2 --disable-openmp &&
48	make -s clean && make -sj4 strip &&
49	mv ../run/john ../run/john-avx2-non-omp &&
50	./configure --enable-simd=avx2 CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-avx2-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-xop\""' &&
51	make -s clean && make -sj4 strip &&
52	mv ../run/john ../run/john-avx2 &&
53	./configure --enable-simd=avx512f --disable-openmp &&
54	make -s clean && make -sj4 strip &&
55	mv ../run/john ../run/john-avx512f-non-omp &&
56	./configure --enable-simd=avx512f CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-avx512f-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-avx2\""' &&
57	make -s clean && make -sj4 strip &&
58	mv ../run/john ../run/john-avx512f &&
59	./configure --enable-simd=avx512bw --disable-openmp &&
60	make -s clean && make -sj4 strip &&
61	mv ../run/john ../run/john-non-omp &&
62	./configure --enable-simd=avx512bw CPPFLAGS='-DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_EXEC="\"/usr/local/bin\"" -DJOHN_SYSTEMWIDE_HOME="\"/usr/local/share/john\"" -DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-non-omp\"" -DCPU_FALLBACK -DCPU_FALLBACK_BINARY="\"john-avx512f\""' &&
63	make -s clean && make -sj4 strip &&
64	rm -rf ../run/*.dSYM &&
65	sudo mv ../run/{john,john-*} /usr/local/bin &&
66	sudo mkdir -p /usr/local/share/john &&
67	sudo cp -a ../run/* /usr/local/share/john &&
68	sudo mv /usr/local/share/john/*.{pl,py,rb} /usr/local/share/john/{relbench,benchmark-unify,mailer,makechr} /usr/local/bin &&
69	echo All Done
70
71PLEASE NOTE: You should definitely consider:
72
73	sudo make shell-completion
74
75Or something to that end - depending on what your tree looks like you might
76simply want to symlink /usr/local/share/john/john.*_completion into
77/etc/bash_completion.d instead.
78

README-MIC

1
2Intel MIC (Xeon Phi) is a coprocessor computer architecture developed by Intel.
3Program built for MIC cannot run on normal Intel processors. So you need to
4have a MIC coprocessor and related enviroments setup before trying to build
5John the Ripper (JtR) for MIC. Tutorial on how to setup the software
6environments for MIC can be found on Intel's website.
7
8
9-----------------------
10Library Denpendencies:
11-----------------------
12
13JtR requires some libraries that are not available on MIC, which means you'll
14need to build them for MIC by yourself.
15These libraries are:
16    Zlib (libz)
17    GMP (libgmp)
18    OpenSSL/LibreSSL (libssl & libcrypto)
19
20They can be downloaded from their websites. But building them requires some
21effort, and only the mentioned versions are guaranteed to work.
22Assuming those libraries are to be install under path $MIC and the path to
23JtR is $JOHN, then follow the steps below.
24
25Build Zlib (version 1.2.8):
26$ cd */zlib-1.2.8
27$ CC="icc -mmic" ./configure --prefix=$MIC
28$ make && make install
29
30Build GMP (version 6.0.0a):
31$ cd */gmp-6.0.0
32$ ./configure CC="icc -mmic" --host=k1om --prefix=$MIC
33$ make && make install
34
35OpenSSL and LibreSSL offer almost the same functionality, you can use either one
36as convenient.
37
38Build OpenSSL (version 1.0.2a)
39$ cd */openssl-1.0.2a
40$ ./Configure linux-x86_64-icc -mmic no-asm shared --prefix=$MIC
41$ make && make install
42
43Build LibreSSL (version 2.1.6):
44$ cd libressl-2.1.6
45$ ./configure CC="icc -mmic" --host=k1om-linux --prefix=$MIC
46$ make && make install
47
48
49--------------
50Building JtR:
51--------------
52
53After building those libraries, now it's straightforward to build JtR for MIC.
54
55$ cd $JOHN/src
56$ ./configure CC="icc -mmic" CPPFLAGS="-I$MIC/include" LDFLAGS="-L$MIC/lib" --host=mic-linux
57$ make && make install
58
59After that, you can use scp to transfer the executables and config files you
60need under directory $JOHN/run to MIC.
61You also need to transfer some dynamic libraries to MIC, which is requried by
62JtR at runtime, including those mentioned above (under $MIC/lib) and the
63following:
64    libiomp*
65    libimf
66    libirng
67    libintlc
68    libsvml
69They can be found under /opt/intel/lib/mic or some other directory you
70specified when installing Intel compiler.
71
72
73---------
74Contact:
75---------
76
77If you still have problem building JtR for MIC, feel free to contact
78<zhanglei.april@gmail.com> or JtR's mailing list.
79
80Have fun.
81Lei Zhang
82

README-OPENCL

1====================
2PRELUDE:
3====================
4
5You can use OpenCL if your video card - from now GPU - supports it.
6ATI/AMD, Intel and Nvidia support it through their SDK available at
7nvidia, Intel and ATI/AMD website.
8
9Some recent distros have all (proprietry) stuff available as normal
10packages.  N.B.  DON'T use X11 opensource drivers provided by your
11distribution, only the vendor-supplied drivers support OpenCL.  Either
12install fglrx (for old AMD cards) or nvidia dkms package or go directly
13with the ones provided by nvidia and ATI.
14
15Notice: Beignet, Mesa, and POCL are not officially supported, but may
16be usable in some OpenCL formats.
17
18You can also use OpenCL with CPU, mostly useful if you have several
19(or loads of) cores.  This sometimes outperforms the CPU-only formats
20due to better scaling than OMP, or due to vectorizing.  See Intel's
21and AMD's web sites for drivers.  Note that an Intel driver does
22support AMD CPU's and vice versa.
23
24Ensure good cooling; Keep an eye on temperatures.  If the OpenCL runtime
25supports it, GPU temperature will be monitored and shown on status lines
26and there is a user changeable limit in john.conf that will terminate a
27session at 95°C.
28
29This code has been tested on Linux, macOS and Windows, see doc/BUGS for
30known issues.
31
32GPU formats won't improve your speed on very short runs due to longer
33startup.  It also can't use GPU-side mask generation with "single mode"
34so can't be significantly faster than on CPU for the few fastest of
35formats in that mode.  For most formats though, "single mode" works fine
36nowadays with the only caveats that you might need a whole lot of memory
37(you'll get helpful messages if you need to adjust buffer size) and it
38might resume pretty poorly (meaning if you stop it and then resume, a
39good deal of work will be repeated before actually catching up).
40
41
42====================
43COMPILING:
44====================
45
46The new autoconf (./configure) should find your OpenCL installation and
47enable it.  If it doesn't, you may need to pass some parameters about where
48it's located, e.g.,
49    ./configure LDFLAGS=-L/opt/AMDAPP/lib CFLAGS=-I/opt/AMDAPP/include
50    make -sj4
51
52To force a build without OpenCL, use:
53    ./configure --disable-opencl
54    make -sj4
55
56
57ATI/AMD suggest you to use ATISTREAMSDKROOT env variable to
58provide where you have installed their SDK root.
59nvidia simply install it in /usr/local/nvidia .
60
61The legacy Makefile assumes you have $ATISTREAMSDKROOT set up to point
62to your ATI installation or you have $NVIDIA_CUDA pointing to nvidia
63installation.
64
65If in doubt do a
66
67$ updatedb && locate CL/cl.h && locate libOpenCL.so
68
69to locate your path to the includes and libOpenCL.
70
71Adjust NVIDIA_CUDA or ATISTREAMSDKROOT to your needs and
72if something is still wrong (but it shouldn't) send
73an email to john-users@lists.openwall.com for help.
74
75
76====================
77Supported formats:
78====================
79
80See output of "./john --list=formats --format=opencl"
81
82
83====================
84USAGE:
85====================
86
87If no --format is given, john will always pick a CPU format.  To use OpenCL
88you must explicitly select the format, e.g., --format=wpapsk-opencl
89
90
91====================
92Vectorized formats:
93====================
94
95A few formats will ask your device if it runs better vectorized,  and at what
96width, and act accordingly.   A vectorized format runs faster on such devices
97(notably CPUs,  depending on driver,  and pre-GCN AMD GPUs).  However, a side
98effect might be register spilling which will just make it slower.  If a format
99defaults  to vectorizing,  --force-scalar  will disable it.  You can also set
100ForceScalar = Y  in john.conf to disable it globally.
101
102If/when a format runs vectorized, it will show algorithm name as e.g.
103[OpenCL 4x] as opposed to just [OpenCL].
104
105
106====================
107Work size tuning:
108====================
109
110All OpenCL formats will auto-tune to best speed, limited by things like
111device memory or total duration for a batch of passwords.  You can override
112the auto-tune using the command-line options -lws=N and/or -gws=N for local
113and global work sizes respectively.  If one is given, the other will be auto-
114tuned.  As an alternative, environment variables LWS and GWS can be used
115instead, with the difference that the latter won't be stored to a session
116file.  If both are used, the command-line options silently take precedence
117over the environment variables.
118
119
120====================
121Watchdog Timer:
122====================
123
124
125If your GPU is also your active display device, a watchdog timer is enabled
126by default - killing any kernel that runs for more than about five seconds
127(nvidia) or two seconds (AMD).  You will normally not get a proper error
128message, just some kind of failure after five seconds or more, like:
129
130  OpenCL error (CL_INVALID_COMMAND_QUEUE) in file (OpenCL_encfs_fmt.c) (...)
131
132Our goal is to split such kernels into subkernels with shorter durations but
133in the meantime (and especially if running slow kernels on weak devices) you
134might need to disable this watchdog.  For nvidia cards, you can check this
135setting using "--list=OpenCL-devices".  Example output:
136
137    Platform #0 name: NVIDIA CUDA, version: OpenCL 1.1 CUDA 4.2.1
138        Device #0 (1) name:     GeForce GT 650M
139        Device vendor:          NVIDIA Corporation
140        Device type:            GPU (LE)
141        Device version:         OpenCL 1.1 CUDA
142        Driver version:         304.51
143        Global Memory:          1023.10 MB
144        Global Memory Cache:    32.0 KB
145        Local Memory:           48.0 KB (Local)
146        Max clock (MHz) :       900
147        Max Work Group Size:    1024
148        Parallel compute cores: 2
149        Stream processors:      384  (2 x 192)
150        Warp size:              32
151        Max. GPRs/work-group:   65536
152        Compute capability:     3.0 (sm_30)
153        Kernel exec. timeout:   yes            <-- enabled watchdog
154
155This particular output is not always available under macOS.  We are
156currently not aware of any way to disable this watchdog under macOS.  Under
157Linux (and possibly other systems using X), you can disable it for nvidia
158cards by adding the 'Option "Interactive"' line to /etc/X11/xorg.conf:
159
160    Section "Device"
161        Identifier     "Device0"
162        Driver         "nvidia"
163        VendorName     "NVIDIA Corporation"
164        Option         "Interactive"        "False"
165    EndSection
166
167At this time we are not aware of any way to check or change this for AMD cards.
168What we do know is that some old AMD drivers will crash after repeated runs of
169as short durations as 200 ms, necessating a reboot.  If this happens, just
170upgrade your driver.
171
172
173=====================
174Multi-device support:
175=====================
176
177Currently only mscash2-OpenCL support multiple devices by itself.  However,
178all other formats can use it together with MPI or the --fork option.  For
179example, let's say you have four GPU or accelerator cards in your local host:
180
181$ ./john -fork=4 -dev=gpu,acc -format=(...)
182
183The above will fork to four processes and each process will use a different
184GPU or Accelerator device.  The "-dev" option (--device) is likely needed
185because it defaults to 'all' which may include unwanted devices.  Instead
186of -dev=gpu,acc (use all/any GPUs and accelerators) you could specify them
187explicitly if needed, e.g. -dev=1,2,6,7.
188
189Or maybe you have two cards in a remote host called alpha and one card in
190a host called bravo.  Build with MPI support and use this variant of the above:
191
192$ mpirun -host alpha,alpha,bravo ./john -dev=gpu,acc -format=(...)
193
194The above will start two processes on alpha, using different GPUs, as well
195as one process on bravo.  In this case, the "-dev=gpu" option will be
196enumerated on each host so if GPUs are devices 2 & 4 on alpha but device 1 on
197bravo, that is not a problem.
198
199If for some reason you want to run e.g.  two processes on each GPU, just double
200the -fork argument or the MPI number of hosts (using -np option to mpirun).
201The device list will round-robin.
202

README-PDF

1Cracking PDF files with JtR
2---------------------------
3
41. Run pdf2john.pl on the .pdf file(s).
5
6E.g. $ ../run/pdf2john.pl test.pdf > hashes
7
82. Run john on the output of pdf2john.pl program.
9
10E.g. $ ../run/john hashes
11

README-PST

1Cracking PST files with JtR
2---------------------------
3
41. Run pst2john on the .pst file(s).
5
6E.g. $ ../run/pst2john test.pst > hashes
7
82. Run john on the output of pst2john program.
9
10E.g. $ ../run/john hashes
11
12The "pst2john" program currently lives outside the JtR repository, and is
13available at the https://github.com/kholia/pst2john URL.
14

README-TACACS+

1Cracking TACACS+ hashes with JtR
2---------------------------------
3
4* Extract TACACS+ hashes from the .pcap file.
5
6  $ ../run/pcap2john.py target.pcap > hashes
7
8
9* Attack these hashes using JtR Jumbo.
10
11  $ ../run/john --format:tacacs-plus hashes
12
13
14* Reducing false positives based on the raw ideas contained in PR #2926. These
15  ideas were also discovered by atom from the hashcat project.
16
17  This technique requires having (at least) two TACACS+ packets with the same
18  "seq_no" (last field in the hash) value, and using the same password.
19
20  Sample hashes which satisy both these constraints,
21
22  $ cat hashes
23  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004
24  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002
25
26  Cracking these hashes results in the following pot file,
27
28  $ cat ../run/john.pot
29  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004:1234
30  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004:2u}0K!^
31  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004:ei,}3W#
32  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004:1234
33  $tacacs-plus$0$6d0e1631$d623c7692ca7b12f7ecef113bea72845$c004:i8}42d$
34  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002:I[s)|~#
35  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002:4XdKNPF
36  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002:9bf_6z+
37  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002:1234
38  $tacacs-plus$0$6d0e1631$f7711e4b904fc4a4753e923e9bf3d2cc33e9febd3d2db74b9aa6d20462c2072013c77345d7112400d7b915$c002:1234
39
40  Filtering out the false positives (thanks to atom),
41
42  $ perl -ne 'while (<>) { chomp; /(c00\d):(.*)/ or next; $db->{$2}->{$1} = undef; } for $pw (keys %{$db}) { next if scalar keys %{$db->{$pw}} == 1; print "$pw\n" }' < ../run/john.pot
43  1234
44
45  This reveals the actual password to be "1234".
46

README-ZIP

1Cracking ZIP files with JtR Jumbo
2=================================
3
41. Run zip2john on password protected .zip file(s).
5
6E.g. $ ../run/zip2john target.zip > hash
7
82. Run john on the output of zip2john.
9
10E.g. $ ../run/john hash
11
123. Wait for the password to get cracked.
13

README-ZTEX

1---------
2Overview
3---------
4If you have ZTEX boards USB-FPGA 1.15y, you can use them with JtR.
5Available "formats" are descrypt-ztex, bcrypt-ztex, sha512crypt-ztex,
6Drupal7-ztex, sha256crypt-ztex, md5crypt-ztex, phpass-ztex.
7
8-------------
9How to build
10-------------
11To build JtR bleeding-jumbo with ZTEX 1.15y board support, install
12libusb (e.g., the libusb-devel package on Fedora) in addition to jumbo's
13usual dependencies.  Then use "./configure --enable-ztex".  The rest of
14the build is as usual for jumbo.
15
16---------------
17Usage on Linux
18---------------
19To access a ZTEX board as non-root (and you shouldn't build nor run JtR
20as root) on a Linux system with udev, add this:
21
22ATTRS{idVendor}=="221a", ATTRS{idProduct}=="0100", SUBSYSTEMS=="usb", ACTION=="add", MODE="0660", GROUP="ztex"
23
24e.g. to /etc/udev/rules.d/99-local.rules (create this file).  Then issue
25these commands as root:
26
27groupadd ztex
28usermod -a -G ztex user # where "user" is your non-root username
29systemctl restart systemd-udevd # or "service udev restart" if without systemd
30
31In order to trigger udev to set the new permissions, (re)connect the
32device after this point.
33
34-----------------
35Usage on Windows
36-----------------
37It requires WinUSB driver to access the board.
38You can install the driver using Zadig 2.2 software.
39
40----------------------
41Format Specific Notes
42----------------------
43descrypt-ztex. That's a fast "format", USB 2.0 is unable to transfer
44password candidates from the host at the rate they are computed.
45Use mask mode to allow on-board candidate generation.
46Other feature is the limit of no more than 2,047 hashes per salt.
47
48bcrypt-ztex. You have to adjust TargetSetting in john.conf,
49section [ZTEX:bcrypt] to reflect settings of your hashes.
50Big difference between TargetSetting and setting of your hashes
51would result in performance degradation or timeout.
52
53sha512crypt-ztex, Drupal7-ztex. These 2 formats use same bitstream.
54You'll have to adjust TargetRounds in john.conf in sections
55[ZTEX:sha512crypt], [ZTEX:Drupal7] to reflect approximate rounds
56setting of your hashes.
57
58-----------------------------
59Runtime Frequency Adjustment
60-----------------------------
61Frequency adjustment is available. You can set non-default frequency
62in john.conf on per-format basis, in section [ZTEX:format_name].
63Extreme overclocking results in some guesses being lost without notice,
64you should check if 100% of test passwords are found at given frequency.
65More overclocking results in errors. On error, JtR resets the board
66while other boards continue operating. If there's a single board then
67it waits until the board is up.
68
69---------------------------
70Troubleshooting ZTEX board
71---------------------------
72You can test the board using Ztex SDK. There are example applications
73and FWLoader maintenance utility (requires java runtime).
74Version ztex-140813b from http://www.ztex.de/ is known to work.
75As 1.15y board is out of production, newer SDK versions might have limited
76support for this board.
77
78---------------
79Various Issues
80---------------
81You can select a limited set of boards using "--devices" command-line
82option (i.e. --dev=04A36E0000,04A36D0000). Several instances of john
83each one with its own set of boards can be invoked. Right now such usage
84is considered experimental - on some USB subsystems several instances
85conflict one with another and errors appear.
86
87Each board has a factory programmed Serial Number (SN). JtR displays
88SNs on startup and in information/error messages. To hide SNs, you can
89list SNs of your boards in [List.ZTEX:Devices] section in john.conf.
90Board numbers (starting from 1) will appear instead of SNs. You can
91specify these numbers in --dev command-line option.
92
93

README-krb5-18-23

1================================================================================
2This patch is Copyright (c) 2012, Mougey Camille (CEA/DAM), Lalet Pierre (CEA/DAM)
3and it is hereby released to the general public under the following terms:
4Redistribution and use in source and binary forms, with or without modification,
5are permitted.
6================================================================================
7
8The package contains:
9
10+ README:
11        This file.
12
13+ kdcdump.patch:
14        A patch for MIT Kerberos 5 kdb5_util tool. Run it on a KDC server as
15root to export the realm database unencrypted.
16
17+ kdcdump2john.py:
18        Converts the output of the previous tool in a JohnTheRipper
19understandable format.
20
21+ john.krb5-18-23_fmt.patch:
22        Provide the format "krb5-18" (Kerberos5 aes256-cts-hmac-sha1-96) and
23"krb5-23" (arcfour-hmac) for JohnTheRipper software. Tested on 1.7.9-jumbo-6.
24
25================================================================================
26
27Example:
28
29>kdb5_util.patched
30...
31test/admin@OLYMPE.OL
3218,fc77e6ffc07b469ba90ad4a979bcbb64709177c74af7f8eceaada0cdc84c1117
3323,1667b5ee168fc31fba85ffb8f925fb70
3416,52d5670752073ee6644a578945ada45efd2cc149a1620ea4
35...
36
37>kdb5_util.patched > dump; python kdcdump2john.py dump;
38...
39test/admin@OLYMPE.OL:$krb18$OLYMPE.OLtestadmin$fc77e6ffc07b469ba90ad4a979bcbb647
4009177c74af7f8eceaada0cdc84c1117
41test/admin@OLYMPE.OL:$krb23$1667b5ee168fc31fba85ffb8f925fb70
42...
43
44>python kdcump2john.py dump > job; john job --format=krb5-23;
45...
46aqzsedrf	(test/admin@OLYMPE.OL)
47
48================================================================================
49
50
51Note:
52        If the KDC server is not properly configured and provide the both
53format, prefer the Arcfour-hmac format.
54

README.7z2john.md

1# Credits and Contributors
2Credits go to:
3
4* philsmd, hashcat project
5
6# License/Disclaimer
7
8License: belongs to the PUBLIC DOMAIN, donated to hashcat, credits MUST go to hashcat and philsmd for their hard work. Thx
9
10Disclaimer: WE PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Furthermore, NO GUARANTEES THAT IT WORKS FOR YOU AND WORKS CORRECTLY
11

README.Apple_DMG

1Cracking Apple Disk Images (DMG)
2================================
3
41. Run dmg2john on .dmg file(s).
5
6E.g. $ ../run/dmg2john test.dmg > hash
7
82. Run john on the output of dmg2john.
9
10E.g. $ ../run/john hash
11
123. Wait for the password to get cracked.
13
14You can use the "dmg-opencl" format if you have a GPU
15for faster cracking.
16

README.BitLocker

1This document is about cracking password protected BitLocker encrypted
2volumes with JtR.
3
4Step 1: Extract the hash
5------------------------
6
7In order to use the BitLocker-OpenCL format, you must produce a well-formatted
8hash from your BitLocker encrypted image. Use the bitlocker2john tool to
9extract hashes from password protected BitLocker encrypted volumes. It returns
10four output hashes with different prefixes:
11
12* If the device was encrypted using the User Password authentication method,
13  bitlocker2john prints these two hashes:
14  * $bitlocker$0$... : it starts the User Password fast attack mode
15  * $bitlocker$1$... : it starts the User Password attack mode with MAC verification (slower execution, no false positives)
16
17* In any case, bitlocker2john prints these two hashes:
18  * $bitlocker$2$... : it starts the Recovery Password fast attack mode
19  * $bitlocker$3$... : it starts the Recovery Password attack mode with MAC verification (slower execution, no false positives)
20
21Hash extraction example,
22
23$ ../run/bitlocker2john minimalistic.raw  # operate on a disk image
24Signature found at 0x00010003
25Version: 8
26Invalid version, looking for a signature with valid version...
27Signature found at 0x02110000
28Version: 2 (Windows 7 or later)
29VMK entry found at 0x021100b6
30Key protector with user password found
31minimalistic.raw:$bitlocker$0$16$e221443f32c419b74504ed51b0d66dbf$1048576$12$704e12c6c...
32
33Instead of running bitlocker2john directly on BitLocker encrypted devices
34(e.g. /dev/sdb1), you may use the dd command to create a disk image of a
35device encrypted with BitLocker
36
37$ sudo dd if=/dev/disk2 of=disk_image conv=noerror,sync
38+4030464+0 records in
39+4030464+0 records out
40+2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)
41
42For further details about User Password and Recovery Password attacks, please
43refer to the Wiki page: http://openwall.info/wiki/john/OpenCL-BitLocker.
44
45Step 2: Attack!
46---------------
47
48Use the BitLocker-OpenCL format specifying the hash file:
49
50$ ./john --format=bitlocker-opencl --wordlist=wordlist target_hash
51
52Currently, this format is able to evaluate passwords having length between 8
53(minimum password length) and 55 characters.
54
55The mask you can use to generate Recovery Passwords is:
56
57-mask=?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d[-]?d?d?d?d?d?d
58
59Links
60-----
61
62Samples BitLocker images for testing are available at,
63
64* https://github.com/kholia/libbde/tree/bitlocker2john/samples
65* https://github.com/e-ago/bitcracker/tree/master/Images
66
67Samples of User Password/Recovery Passwords dictionaries are available at
68https://github.com/e-ago/bitcracker/tree/master/Dictionary
69
70More information on BitLocker cracking can be found at,
71
72* http://openwall.info/wiki/john/OpenCL-BitLocker
73* https://github.com/e-ago/bitcracker
74

README.Ethereum

1Cracking Ethereum Geth/Mist/MyEtherWallet/Presale wallets
2=========================================================
3
41. Run ethereum2john.py on .json wallet file(s).
5
6E.g. $ ../run/ethereum2john.py ethwallet.json > hashes
7
82. Run john on the output of ethereum2john.py utility.
9
10E.g. $ ../run/john hashes
11
123. Wait for the password(s) to get cracked.
13
14
15To use a GPU for cracking run john as,
16
17$ ../run/john --format=ethereum-opencl hashes  # for Ethereum wallets using PBKDF2
18
19$ ../run/john --format=ethereum-presale-opencl hashes  # for Ethereum presale wallets
20

README.FileVault2

1This document is about cracking password protected FileVault 2 encrypted
2volumes with JtR.
3
4First, build the "fvde2john" (https://github.com/kholia/fvde2john) project from
5source. See https://github.com/libyal/libfvde/wiki/Building for help.
6
7
8Second, use the built fvde2john project to extract hash(es) from the encrypted
9FileVault 2 volume.
10
11$ tar -xJf fvde-1.raw.tar.xz  # sample image for testing, from fvde2john project
12
13$ sudo kpartx -v -a fvde-1.raw
14add map loop2p1 (253:5): 0 1048496 linear /dev/loop2 40
15
16$ sudo fvdetools/fvdeinfo -p dummy /dev/mapper/loop2p1  # this extracts the hashes
17fvdeinfo 20160918
18
19$fvde$1$16$e7eebaabacaffe04dd33d22fd09e30e5$41000$e9acbb4bc6dafb74aadb72c576fecf69c2ad45ccd4776d76
20
21
22Here is how to extract hashes without using kpartx,
23
24$ fdisk -l fvde-2.raw
25Disk fvde-2.raw: 512 MiB, 536870912 bytes, 1048576 sectors
26Units: sectors of 1 * 512 = 512 bytes
27Sector size (logical/physical): 512 bytes / 512 bytes
28I/O size (minimum/optimal): 512 bytes / 512 bytes
29Disklabel type: gpt
30Disk identifier: EBED216B-95C5-40D3-9C15-D352C8E9E357
31
32Device      Start     End Sectors  Size Type
33fvde-2.raw1    40 1048535 1048496  512M Apple Core storage
34
3540 (Start) * 512 (Sector size) => 20480 => volume offset
36
37$ ./fvdetools/fvdeinfo -o 20480 fvde-2.raw
38fvdeinfo 20160918
39
40$fvde$1$16$94c438acf87d68c2882d53aafaa4647d$70400$2deb811f803a68e5e1c4d63452f04e1cac4e5d259f2e2999
41$fvde$1$16$94c438acf87d68c2882d53aafaa4647d$70400$2deb811f803a68e5e1c4d63452f04e1cac4e5d259f2e2999
42
43
44Finally, give this hash string to JtR jumbo to crack.
45
46$ cat hash
47$fvde$1$16$e7eebaabacaffe04dd33d22fd09e30e5$41000$e9acbb4bc6dafb74aadb72c576fecf69c2ad45ccd4776d76
48
49$ ../run/john hash -wordlist=wordlist
50Using default input encoding: UTF-8
51Loaded 1 password hash (FVDE, FileVault 2 [PBKDF2-SHA256 AES 256/256 AVX2 8x])
52Will run 4 OpenMP threads
53Press 'q' or Ctrl-C to abort, almost any other key for status
54openwall         (?)
55
56
57For more help with fvde2john, see the following URLs,
58
59https://github.com/libyal/libfvde/wiki
60https://github.com/libyal/libfvde/wiki/Troubleshooting
61

README.FreeBSD

1Building JtR-jumbo on FreeBSD
2=============================
3
4If you want to build "krb5-18_fmt.c" on FreeBSD then install "security/krb5"
5from ports.
6

README.IBM_AS400

1How to get & crack AS/400 hashes?
2
3Assuming you have been granted access to an AS/400 server with *ALLOBJ and *SECADM privileges,
4you will be able to download and crack the password hashes that are stored on the system to
5assess password strength. Depending on the current setting of the QPWDLVL system value,
6password hashes are stored in different formats on the AS/400:
7
8QPWDLVL 0:
9IBM DES hashes (supported by JtR with our 'as400-des' format plugin)
10LM hashes (supported by default by JtR)
11SHA1 uppercase hashes (supported by JtR with our 'as400-ssha1' format plugin)
12
13QPWDLVL 1:
14IBM DES hashes (supported by JtR with our 'as400-des' plugin)
15SHA1 uppercase hashes (supported by JtR with our 'as400-ssha1' plugin)
16
17QPWDLVL 2:
18IBM DES hashes* (supported by JtR with our 'as400-des' plugin)
19LM hashes** (supported by default by JtR)
20SHA1 uppercase hashes*** (supported by JtR with our 'as400-ssha1' plugin)
21SHA1 mixed case hashes (supported by JtR with our 'as400-ssha1' plugin)
22
23QPWDLVL 3:
24SHA1 uppercase hashes*** (supported by JtR with our 'as400-ssha1' plugin)
25SHA1 mixed case hashes (supported by JtR with our 'as400-ssha1' plugin)
26
27* Only if QPWDMAXLEN <=10
28** Only if QPWDMAXLEN <=14
29** Depending on password policy configuration
30
31In this tutorial we describe how to extract and assess the strength of all these types
32of hashes. Obviously, if LM hashes are available, you should go for these as these can be cracked very
33efficiently by JtR or by using other programs and a rainbow table.
34If LM hashes are not available, our 'as400-des' and 'as400-ssha1' plugins have you covered.
35
36PREREQUISITES
37In order to be able to grab and crack the hashes, you will need:
38- the latest version of IBMiScanner (part of hack400tool), available on https://github.com/hackthelegacy/hack400tool
39- the latest john the ripper jumbo release including our 'as400-des' and 'as400-ssha1' plugins.
40
41LM hashes:
42- Open IBMiScanner tool
43- Provide at minimum: Username, Password, IP address/DNS name
44- Click "Connect"
45- From the list of available scans, select option 26: 'SECURITY: Get John the Ripper hashes (LM hash)'
46- In the output directory, a file named 'lmhashes.txt' will be created.
47- Copy the file to your John the Ripper 'run' directory
48- Run john the ripper: john --format=LM {filename}
49Enjoy the passwords :)
50
51DES hashes:
52- Open IBMiScanner tool
53- Provide at minimum: Username, Password, IP address/DNS name
54- Click "Connect"
55- From the list of available scans, select option 29: 'SECURITY: Get John the Ripper hashes (DES)'
56- In the output directory a file named 'DES-hashes.txt' will be created.
57- Copy the file to your John the Ripper 'run' directory
58- Run john the ripper: john --format=as400-des {filename}
59Enjoy the passwords :)
60
61SHA-1 hashes:
62(Please note that this method is generic for both mixed and upper case)
63- Open IBMiScanner tool
64- Provide at minimum: Username, Password, IP address/DNS name
65- Click "Connect"
66- From the list of available scans, select option 27: 'SECURITY: Get John the Ripper hashes (SHA-1 hash uppercase)' for uppercase hashes.
67- For mixed case hashes, you can choose for option 28: 'SECURITY: Get John the Ripper hashes SHA-1 hash mixed case)' respectively.
68- In the output directory, a file named 'SHA-uc-hashes.txt' for uppercase hashes or 'SHA-mc-hashes.txt' for mixed case hashes will be created.
69- Copy the file to your John the Ripper 'run' directory
70- Run john the ripper: john --format=as400-ssha1 {filename}
71Enjoy the passwords :)
72Note: In case you used an older version of the IBMiscanner tool that outputs hashes in the format userid:hash, you can
73use the ibmiscanner2john.py script to convert the file into a format that can be processed by JtR
74
75http://hackthelegacy.org for more information and tooling.
76
77The 'as400-ssha1' plugin was developed by Bart Kulach (@bartholozz) and Rob Schoemaker (@5up3rUs3r) with support of JimF (aka jfoug).
78The 'as400-des' plugin was developed by Bart Kulach (@bartholozz) and Rob Schoemaker (@5up3rUs3r) with support of Dhiru Kholia.
79The IBMiscanner tool is developed and maintained by Bart Kulach (@bartholozz).
80
81

README.LUKS

1Cracking LUKS passphrases
2=========================
3
41. Run luks2john on a LUKS encrypted device or the output of
5   cryptsetup luksHeaderBackup <device> --header-backup-file <file>
6
72. Run john on the output of luks2john
8
9NOTES:
10
11This version of John the Ripper supports cracking LUKS passphrases in a
12very limited fashion.
13The luks2john utility extracts just the information of one keyslot (the one
14with the lowest iteration count), instead of extracting the information of
15all used keyslots.
16John's current LUKS hash representation has several drawbacks.
17(Some information is stored more than once. The hash representation is
18longer than it needs to be.)
19
20For that reason, the LUKS hash representation used by this John the Ripper
21version will most likely not be supported in future John the Ripper versions
22which address the issues mentioned above.
23
24That means, once a future John the Ripper release with full support for
25cracking LUKS passphrases is released, you'll most likely need to re-run
26luks2john on the LUKS encrypted device or LUKS header backup, and you'll
27need to re-run john so that the new LUKS hashes will be stored in your pot file.
28(The passwords you found for the old LUKS hash representation will work
29for the new LUKS hash representation.)
30

README.LotusNotes

1IBM Lotus Domino hash extractor
2===============================
3
4It just reads the user.id file and extracts the ciphered blob at offset 0xD8
5(16 bits word at offset 0xD6 is the blob size) and converts it to a hexadecimal
6string to be used with the JtR plugin.
7
8Usage
9=====
10
111. Run lotus2john.py on Lotus Notes ID files
12
13E.g. $ ../run/lotus2john openwall.id > hashes
14
152. Run john on the output of lotus2john.py utility
16
17E.g. $ ../run/john hashes
18
19Have fun :)
20

README.MinGW

1Fedora >= 22 cross-compiling instructions
2=========================================
3
432-bit builds
5-------------
6
7$ sudo dnf install mingw32-openssl mingw32-openssl-static \
8	mingw32-gcc mingw32-gcc-c++ binutils -y
9
10$ ./configure --host=i686-w64-mingw32
11
12$ make -sj4
13
1464-bit builds
15-------------
16
17$ sudo dnf install mingw64-openssl mingw64-openssl-static \
18	mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static \
19	mingw64-zlib-static mingw64-libgomp mingw64-binutils -y
20
21$ ./configure --host=x86_64-w64-mingw32
22
23$ make -sj4
24
25Notes
26-----
27
28Ubuntu (and similar systems) do not have a full MinGW environment.
29
30configure on my newest 64 bit Fedora required this:
31
32AR=/usr/bin/x86_64-w64-mingw32-ar STRIP=/usr/bin/x86_64-w64-mingw32-strip \
33	OPENSSL_LIBS="-lssl -lcrypto" ./configure --host=x86_64-w64-mingw32 \
34	--build=x86_64-pc-linux
35
36configure was not setting ar or strip properly. I have wine installed, so
37without the --build the configure was NOT thinking it was doing a cross
38compile. Also, the OPENSSL_LIBS had to be force listed for this cross
39compile to link right.
40

README.RACF

1Cracking RACF DES hashes with JtR
2=================================
3
41. Run racf2john on RACF database files.
5
6E.g. $ ../run/racf2john racf_database > hashes
7
82. Run john on the output of racf2john.
9
10E.g. $ ../run/john hashes
11
12
13Other useful RACF utilities
14===========================
15
16* https://www.nigelpentland.co.uk/utilities/ (includes RACFSNOW, racfmask, and racfunmask)
17
18* https://github.com/zedsec390/masking (unmasks pre-DES RACF masked password hashes)
19

README.Tezos

1Cracking Tezos keys with JtR Jumbo
2==================================
3
41. Run tezos2john.py and provide it with the required data. Run tezos2john.py
5   without any options to see the usage instructions.
6
7E.g. $ ../run/tezos2john.py 'put guide flat machine express cave hello connect stay local spike ski romance express brass' 'jbzbdybr.vpbdbxnn@tezos.example.org' 'tz1eTjPtwYjdcBMStwVdEcwY2YE3th1bXyMR' > hashes
8
9E.g. $ ../run/tezos2john.py 'monster crack glance favorite humble group bone grid clock bottom employ gold jelly fatigue tragic' 'pfbbhuvm.jlbcintw@tezos.example.org' 'tz1Zgd3LHuryw6rBzsQKnBMVqu99KzWankj8' >> hashes
10
11The passwords for these sample hashes are "4FGU8MpuCo" and "VPhvU2LgyJ" respectively.
12
132. Run john on the output of tezos2john.py script.
14
15E.g. $ ../run/john hashes
16
173. Wait for the password(s) to get cracked.
18

README.apex

1#!/usr/bin/python
2
3"""
4
5Dumping APEX hashes
6===================
7
81. Automated Way
9
10C:\apex>sqlplus sys as sysdba
11
12SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 22 17:20:51 2013
13
14Copyright (c) 1982, 2010, Oracle.  All rights reserved.
15
16Enter password:
17
18Connected to:
19Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
20
21SQL> @dump-apex-hashes.sql
22
23$ python apex2john.py apex-hashes.txt > apex-hashes-JtR
24
25$ john pex-hashes-JtR # use JtR-jumbo from https://github.com/magnumripper/JohnTheRipper/
26Loaded 1 password hash (dynamic_1: md5($p.$s) (joomla) [128/128 SSE2 intrinsics 10x4x3])
27password         (?)
28guesses: 1  time: 0:00:00:00 DONE (Thu Feb 21 17:33:43 2013)  c/s: 375  trying: 123456 - boomer
29
302. Manual Way
31
32SQL> alter session set current_schema = APEX_040200;
33
34Session altered.
35
36SQL> select user_name,web_password2,security_group_id from wwv_flow_fnd_user;
37
38USER_NAME
39--------------------------------------------------------------------------------
40WEB_PASSWORD2
41--------------------------------------------------------------------------------
42SECURITY_GROUP_ID
43-----------------
44ADMIN
45F96D32CBB2FBE17732C3BBAB91C14F3A
4610
47
48...
49
50$ cat dump-apex-hashes.sql
51set colsep ','
52set echo off
53set feedback off
54set linesize 1000
55set pagesize 0
56set sqlprompt ''
57set trimspool on
58set headsep off
59set termout off
60alter session set current_schema = APEX_040200;
61spool "apex-hashes.txt"
62select user_name,web_password2,security_group_id from wwv_flow_fnd_user;
63spool off
64
65"""
66
67import hashlib
68
69username = "ADMIN"
70sgid = "10"
71password = "password"
72
73# APEX 4.2.1 algorithm
74print username, sgid, password, hashlib.md5(password + sgid + username).hexdigest()
75
76# should print "f96d32cbb2fbe17732c3bbab91c14f3a" which is the actual hash
77

README.bash-completion

1	Enabling bash completion for John the Ripper
2
3To enable bash completion for john and unique for all users, just use
4
5make bash-completion
6
7You need administrative privileges for this make target, because
8the script john.bash_completion will be copied to /etc/bash_completion.d/.
9
10To enable bash completion just for your user, it is enough to source
11the bash completion script in your  ~/.bashrc
12To to this, add the following line to your ~/.bashrc file:
13. <path_to_john's_config_directory>/john.bash_completion
14
15To just enable bash completion for john and unique temporarily,
16just execute the following command in your current session:
17$ . <path_to_john's_config_directory>/john.bash_completion
18
19(The $ just indicates the command prompt, it is not part of the command.)
20
21If you build different john versions, say a default (non-omp) version
22named john, and an omp-enabled version named john-omp, you can enable
23the same bash completion logic for the john-omp binary by adding this line
24to your ~./bashrc file:
25complete -F _john john-omp
26
27
28	Prerequisites
29
30The bash completion for john requires bash version >= 4,
31and extended pattern matching features enabled.
32If the command
33	shopt -p extglob
34prints
35	shopt -s extglob
36then the extended pattern matching features are enabled.
37If this command
38prints
39	shopt -u extglob
40then they are disabled.
41
42
43	Features
44
45The bash completion for unique does nothing for a non-jumbo build.
46For a jumbo build, it supports completion for the command line options
47which only exist for the jumbo version.
48
49
50The bash completion for john supports file name completion for
51password (hash) files.
52It also supports completion for the command line options.
53
54
55Abbreviated command line options are completed to their long form,
56with two leading '-' characters.
57For options with a mandatory value, the completion also adds the '='
58character.
59
60
61	Examples
62
63$ ./john -w[tab]
64results in completion to
65$ ./john --wordlist=
66
67$ ./john --wordlist=[tab][tab]
68will list all file names in the current directory as possible completions.
69
70
71$ ./john -fo[tab]
72
73$ john --f[tab]
74for an official, non-jumbo john version 1.7.8 results in completion to
75$ john --format=
76
77$ john --format=[tab][tab]
78for the official john version 1.7.8 will list all the supported formats
79as possible completions:
80AFS    BF     BSDI   crypt  DES    LM     MD5
81
82$ john --format=D[tab]
83will be completed to
84$ john --format=DES
85
86
87For a jumbo version, e.g. 1.7.9-jumbo-5,
88$ ./john -f[tab]
89will become
90$ ./john --f
91The reason is that --format is not the only option starting with --f.
92
93For this version,
94$ ./john --f[tab][tab]
95will list all possible completions like this:
96
97$ ./john --f
98--field-separator-char=  --fix-state-delay=       --format=
99
100$ ./john --fo[tab]
101will become
102$ ./john --format=
103
104$ ./john --format=[tab]tab]
105will list all available formats of this version as possible completions:
106
107$ ./john --format=
108afs           lm            netntlm       raw-sha
109bf            lotus5        netntlmv2     raw-sha1
110bfegg         md4-gen       nsldap        raw-sha224
111bsdi          md5           nt            raw-sha256
112crc32         md5ns         nt2           raw-sha384
113crypt         mediawiki     oracle        raw-sha512
114des           mscash        oracle11      salted-sha1
115dmd5          mscash2       pdf           sapb
116dominosec     mschapv2      phpass-md5    sapg
117dummy         mskrb5        phps          sha1-gen
118dynamic       mssql         pix-md5       ssh
119epi           mssql05       pkzip         sybasease
120hdaa          mysql         po            trip
121hmac-md5      mysql-fast    rar           xsha
122hmailserver   mysql-sha1    raw-md4       xsha512
123ipb2          nethalflm     raw-md5       zip
124krb4          netlm         raw-md5thick
125krb5          netlmv2       raw-md5u
126
127$ ./john --format=a[tab]
128will become
129$ ./john --format=afs
130
131To get possible completions for values of an option, it is not required
132to use the full name of that option.
133Instead, it is possible to start the option name with just one '-' character
134instead of two.
135
136It is also possible to use the ':' character (colon) instead of the '='
137character (equal sign) to separate option name and value, because john
138also supports this character as a separator between option and value.
139(The completion logic for options with a colon as a separator depends on
140the value of the environment variable COMP_WORDBREAKS.
141The default logic explained here assumes that COMP_WORDBREAKS contains
142the colon. The logic used when COMP_WORDBREAKS doen't contain the colon
143is mentioned in the last chapter ("Config variables") of this document.)
144
145Furthermore, the option name can be abbreviated, provided it is not ambiguous.
146
147E.g., for an official, non-jumbo john version 1.7.8 bash completion will list
148all supported hash formats as possible completions, if the  [tab] key
149is pressed twice at the end of the command line:
150$ john -f:
151$ john -f=
152$ john --f:
153$ john --f=
154$ john -fo:
155$ john -fo=
156$ john --fo:
157$ john --fo=
158...
159
160For a jumbo build, the first 4 examples will not work, because the option name
161is ambiguous.
162A jumbo version also has the options --field-separator-char= and
163--fix-state-delay=, so at least the first two letters of the option name
164must be specified.
165
166If future john versions get new options with names beginning with --fo,
167even more letters need to be specified.
168
169Similarly, for an official john version 1.7.8 build,
170$ john -f:c[tab]
171would become
172$ john -f:crypt
173
174And
175$ john -fo=D[tab]
176will become
177$ john -fo=DES
178
179That means, only the value will be completed, the option name and the separator
180between option name and value remain unchanged.
181This is OK, because john also supports using an abbreviated option name,
182as long as it is not ambiguous.
183
184
185If the john version supports the --list=hidden-options option, then the
186hidden options (not mentioned in john's usage output) are also considered as
187valid completions for option names.
188
189
190	Special completion for certain options
191
192	--format=
193
194As mentioned above in the general description of the completion logic,
195the completion logic considers all the supported formats, as listed
196in john's usage output.
197For the jumbo version, there is a special handling for the dynamic formats
198(see the files DYNAMIC and DYNAMIC_SCRIPTING for more information).
199
200$ ./john --format=dy[tab]
201will become
202$ ./john --format=dynamic
203
204$ ./john --format=dynamic[tab]
205will become
206$ ./john --format=dynamic_
207
208$ ./john --format=dynamic_[tab][tab]
209will list all available dynamic formats, like this:
210
211$ ./john --format=dynamic_
212dynamic_0     dynamic_1006  dynamic_15    dynamic_22    dynamic_3
213dynamic_1     dynamic_1007  dynamic_16    dynamic_23    dynamic_4
214dynamic_10    dynamic_1008  dynamic_17    dynamic_24    dynamic_5
215dynamic_1001  dynamic_1009  dynamic_18    dynamic_25    dynamic_6
216dynamic_1002  dynamic_11    dynamic_19    dynamic_26    dynamic_7
217dynamic_1003  dynamic_12    dynamic_2     dynamic_27    dynamic_8
218dynamic_1004  dynamic_13    dynamic_20    dynamic_28    dynamic_9
219dynamic_1005  dynamic_14    dynamic_21    dynamic_29
220
221
222	--rules and --single
223
224For official john version of john which don't support optional values
225for --rules and --single, completion will just add a trailing space
226at the end of the command line, so that the user can continue typing
227the next word (e.g., an option or file name) on the command line.
228
229Jumbo versions, however, support an optional value, as indicated by
230john's usage output (--rules[=SECTION] and --single[=SECTION]).
231
232For a jumbo version, the completion logic for options --rules
233and --single depends on the contents of the environment variable
234__john_completion, see the last chapter ("Config variables")
235of this document.
236The default logic works like this:
237
238$ ./john --rules[tab][tab]
239will list possible completions like this:
240$ ./john --rules
241--rules           --rules=single
242--rules=NT        --rules=wordlist
243
244In the above example, the upper case section name NT indicates that
245the list of rules sections is a hard coded list of sections known to
246exist in (almost) every john version.
247
248
249For more recent versions which support the --list=rules option,
250the list of section names will be obtained by interpreting the config
251file (default john.conf or john.ini, unless another config file is
252specified on the command line, see john's option --config=...)
253
254In this case, the list of possible completions looks like this:
255
256$ ./john --rules
257--rules           --rules=single
258--rules=nt        --rules=wordlist
259
260(Please note that in this case all section names are lower case,
261because john doesn't distinguish upper and lower case characters
262in section names.)
263
264If you add a section [List.Rules:My_Test] to john.conf,
265$ ./john --rules[tab][tab]
266will list possible completions like this:
267
268$ ./john --rules
269--rules           --rules=nt        --rules=wordlist
270--rules=my_test   --rules=single
271
272Since --single can use the same sections,
273$ ./john --single[tab][tab]
274will list possible completions like this:
275$ ./john --single
276--single           --single=nt        --single=wordlist
277--single=my_test   --single=single
278
279If you use another config file name my.conf with these rules sections
280[List.Rules:some_rules]
281[List.Rules:more_rules]
282you can specify this config file on the command line.
283
284$ ./john --conf=my.conf --rules[tab][tab]
285will list possible completions like this:
286
287$ ./john --conf=my.conf --rules
288--rules             --rules=some_rules
289--rules=more_rules
290
291The same possible completions are listed if you switch the sequence
292of the options on the command line, place the cursor immediately after
293the word "--rules", and press the  [tab] key twice.
294
295$ ./john --rules[tab][tab] --config=my.conf
296will list possible completions like this:
297$ ./john --rules --config=my.conf
298--rules             --rules=some_rules
299--rules=more_rules
300
301$ ./john --rules=s[tab] --config=my.conf
302will become
303$ ./john --rules=some_rules --config=my.conf
304
305
306	--incremental
307
308The option --incremental can be used with and without a value.
309Possible values are the Incremental section names defined in john.conf
310(or another config file specified with --config=..., see the description
311of the completion logic for --rules and --single).
312
313The completion logic depends on the contents of the environment variable
314__john_completion, see the last chapter ("Config variables")
315of this document.
316The default logic works like this:
317
318If the john version doesn't support the --list=inc-modes option,
319possible completions will be listed based on the john version and
320incremental mode sections known to exist in (almost) all john versions:
321
322$ ./john --incremental[tab][tab]
323will list possible completions like this:
324
325$ ./john --incremental
326--incremental         --incremental=Alnum   --incremental=Digits
327--incremental=All     --incremental=Alpha   --incremental=LanMan
328
329If the john version supports --list=inc-modes, the possible completions
330will be obtained by interpreting the config file (default john.conf or
331john.ini, unless another config file is specified on the command line,
332see john's option --config=...).
333
334In this case, the possible completions listed might look like this:
335
336$ ./john --incremental
337--incremental          --incremental=all7     --incremental=digits
338--incremental=all      --incremental=all8     --incremental=digits8
339--incremental=all15    --incremental=alnum    --incremental=lanman
340--incremental=all6     --incremental=alpha
341
342$ ./john --incremental=l[tab]
343will become
344$ ./john --incremental=lanman
345
346If all the incremental mode names are listed in lower case, you can also
347use
348$ ./john --incremental=L[tab]
349This will become
350$ ./john --incremental=lanman
351as well.
352
353
354	--external
355
356If the john version supports the --list=externals option, the possible
357completions will be obtained by interpreting the config file (default john.conf or
358john.ini, unless another config file is specified on the command line,
359see john's option --config=...).
360
361In this case, the possible completions listed might look like this:
362
363$ ./john --external=
364appendluhn                filter_alnum
365atleast1-generic          filter_alpha
366atleast1-simple           filter_digits
367autoabort                 filter_lanman
368autostatus                filter_no_cap_or_symbols
369datetime                  keyboard
370double                    knownforce
371double10                  lanman
372double10_alnum            parallel1_2
373double_all                parallel2_2
374double_alnum              policy
375dumb16                    repeats
376dumb32                    strip
377dumbforce                 subsets
378
379(A config file specified on the command line will be taken into account when
380determining the possible completions, see the description of the completion
381for the options --incremental, --rules and --single.)
382
383
384If the john version doesn't support the --list=externals option, the possible
385completions are hard coded, depending on the john version you try to run.
386In this case, the possible completions listed might look like this:
387
388$ ./john --external=
389AppendLuhn        DateTime          Filter_Digits     Parallel
390AtLeast1-Generic  Double            Filter_LanMan     Policy
391AtLeast1-Simple   DumbForce         Keyboard          Repeats
392AutoAbort         Filter_Alnum      KnownForce        Strip
393AutoStatus        Filter_Alpha      LanMan            Subsets
394
395(john version 1.7.9-jumbo-5)
396
397For john version 1.7.8, the list will look like this:
398
399$ john --external=
400AppendLuhn        DumbForce         Keyboard          Repeats
401AtLeast1-Generic  Filter_Alnum      KnownForce        Strip
402AtLeast1-Simple   Filter_Alpha      LanMan            Subsets
403DateTime          Filter_Digits     Parallel
404Double            Filter_LanMan     Policy
405
406$ john --external=Da[tab]
407will become
408$ john --external=DateTime
409
410
411	--make-charset=
412
413Completion will list names of .chr files and directories in the
414current directory for completion.
415
416$ ./john --make-charset=[tab][tab]
417might list completions like this:
418
419$ ./john --make-charset=
420all.chr     alpha.chr   lanman.chr
421alnum.chr   digits.chr  subdir/
422
423Please note that an existing file will be overwritten
424when executing the command. So please be careful!
425
426
427	--config=
428
429If the john version supports the --config= option, possible completions
430are all directory names and file names with the extensions .conf and .ini.
431(Files with extensions .CONF, .INI, .Conf, .Ini will also be considered,
432because the search is not case sensitive.)
433
434
435	--pot=
436
437If the john version supports the --pot= options, possible completions
438are all directory names and file names with the extension .pot.
439(The search is not case sensitive, so file names with extensions .POT
440and .Pot will also be considered during completion.)
441
442
443	--restore and --status
444
445The options --restore and --status can be used without a value (in this case,
446the session name will be "john") or with a value (session name).
447
448Since names of john sessions are possible completions,
449the possible completions are derived from .rec file names.
450In addition, names of sub directories are also considered, since .rec files
451might be located in a sub directory.
452(For --restore=, only names of sessions not currently running should be
453considered. This is not yet implemented.)
454
455The completion logic for these options depends on the contents of the
456environment variable __john_completion, see the last chapter
457("Config variables") of this document.
458
459The default logic works like this:
460
461$ ls *.rec
462john.rec  test1.rec
463
464$ ls -d subdir/ testdata/
465subdir/  testdata/
466
467$ john --status[tab][tab]
468will list possible completions like this:
469
470$ john --status
471--status           --status=subdir    --status=testdata
472--status=john      --status=test1
473
474A similar list of completions for --restore:
475$ john --restore
476--restore           --restore=subdir    --restore=testdata
477--restore=john      --restore=test1
478
479$ john --restore=[tab][tab]
480will list possible completions like this:
481
482$ john --restore=
483john      subdir/   test1     testdata/
484
485$ john --restore=t[tab]
486will become
487$ john --restore=test
488
489$ john --restore=test[tab][tab]
490will list possible completions like this:
491
492$ john --restore=test
493test1     testdata/
494
495
496
497	Config variables
498
499	COMP_WORDBREAKS
500
501You shouldn't change the contents of this variable unless you really know
502what you are doing!
503Usually, you should leave this value unchanged.
504(You never know which other completion scripts depend on the
505contents of COMP_WORDBREAKS.)
506
507Use the following command to show the contents of COMP_WORDBREAKS:
508
509$ echo "$COMP_WORDBREAKS"
510
511"'><=;|&(:
512
513You can also use:
514
515$ echo $COMP_WORDBREAKS
516"'><=;|&(:
517
518(Note that with the second command (without quotes), you'll not see that
519the variable also contains a line feed character.)
520
521
522The completion logic implemented for john depends on whether or not
523COMP_WORDBREAKS contains the colon character (':').
524
525If COMP_WORDBREAKS doesn't contain the colon, this is the completion logic:
526
527$ john -opt:val[tab]
528becomes
529$ john -opt=val
530
531$ john -opt:[tab]
532becomes
533$ john -opt=
534
535This means, for an option (beginning with at least one '-' char) followed
536by a colon (':') as a delimiter, possibly followed by other characters
537(except '=' or ':') the colon will be replaced by an equal sign.
538Pressing the  [tab] key again will then invoke the normal completion logic
539as described throughout this document.
540
541
542To remove the colon from COMP_WORDBREAKS, use:
543$ COMP_WORDBREAKS="${COMP_WORDBREAKS//:/}"
544
545To add the colon to COMP_WORDBREAKS, use:
546$ COMP_WORDBREAKS="${COMP_WORDBREAKS}:"
547
548As always, the $ indicates the command prompt, and it is not part
549of the command.
550
551If you want to add this command to your ~/.bashrc, you'll have to use
552COMP_WORDBREAKS="${COMP_WORDBREAKS//:/}"
553or
554COMP_WORDBREAKS="${COMP_WORDBREAKS}:"
555
556
557	__john_completion
558
559The value of the variable __john_completion is used to adjust the completion
560logic for options that can be used either with a value or without a value.
561
562These options are
563--restore
564--status
565--incremental
566
567Furthermore, in jumbo versions, these options can be used with or
568without a value:
569--rules
570--single
571--show
572
573(There are other options that can be used with or without a value.
574But the completion logic for those other options is more or less limited
575to a usage hint, and therefore doesn't depend on the value of the variable
576__john_completion.)
577
578
579For the option --show, the completion logic will always work like this:
580$ ./john -sho[tab]
581becomes
582$ ./john --show
583
584The cursor is positioned exactly after the "w", no trailing space is added
585in this case.
586(For an option that doesn't allow any values, a trailing space would be added.)
587
588
589If __john_completion is not defined or has any other value than 2,
590the default completion logic is used.
591It works like this:
592
593$ ./john --show[tab]
594just lists the possible completions like this:
595
596$ ./john --show
597--show       --show=
598
599To add a file name, you'll first have to add the space, to separate
600the file name from the option name.
601To further expand the option instead, you'll have to type the '='
602(equal sign).
603
604If __john_completion has the value 2, the following alternative completion
605logic is implemented for options that can be used with or without a value.
606
607$ ./john --show[tab]
608will become
609$ ./john --show=
610
611
612Completion of --option= does not depend on the value of  __john_completion.
613
614$ ./john --show=[tab][tab]
615left   types
616
617Since there is just one possible value for --show=l,
618$ ./john --show=l[tab]
619will become
620$ ./john --show=left
621
622(A space character will be added after "--show=left".)
623
624So, if you prefer to hit the [tab] key instead of typing '=',
625you might want to add this line to your ~/.bashrc file:
626__john_completion=2
627
628

README.bitcoin

1Cracking bitcoin-qt (bitcoin) wallet files with john
2====================================================
3
41. Run bitcoin2john.py on bitcoin wallet file(s).
5
6E.g. $ ../run/bitcoin2john.py wallet.dat >> hashes
7
82. Run john on the output of bitcoin2john.py script.
9
10E.g. $ ../run/john hashes
11
123. Wait for the password(s) to get cracked.
13

README.coding-style

1This coding style is borrowed from Kernel CodingStyle
2(https://www.kernel.org/doc/Documentation/CodingStyle).
3
4	Chapter 1: Indentation
5
61.1 Indentation is one tab per level. Recommended tab width is 4 or 8 for jumbo
7and 8 for core but it mostly just affects where a line exceeds max length.
8
91.2 Indent with tabs, align with spaces. E.g.
10
11'->' is tab, '.' is space.
12
13void *memmem(const void *haystack, size_t haystack_len,
14.............const void *needle, size_t needle_len)
15{
16->	haystack_ = (char*)haystack;
17->	needle_ = (char*)needle;
18->	last = haystack_+(haystack_len - needle_len + 1);
19->	for (; haystack_ < last; ++haystack_)
20->	{
21->	->	if (hash == hay_hash &&
22->	->	....*haystack_ == *needle_ &&
23->	->	....!memcmp (haystack_, needle_, needle_len))
24->	->	->	return haystack_;
25
26->	->	hay_hash += *(haystack_+needle_len);
27->	}
28
29->	return NULL;
30}
31
321.3 Ease multiple indentation levels in switch(), for(), while()...
33
34	switch (suffix) {
35	case 'G':
36	case 'g':
37		mem <<= 30;
38		break;
39	case 'M':
40	case 'm':
41		mem <<= 20;
42		break;
43	case 'K':
44	case 'k':
45		mem <<= 10;
46		/* fall through */
47	default:
48		break;
49	}
50
51	for (size = 0; size < PASSWORD_HASH_SIZES; size++)
52	if (format->methods.binary_hash[size] &&
53	    format->methods.get_hash[size](i) !=
54	    format->methods.binary_hash[size](binary)) {
55		do_something();
56	}
57
581.4 Don't put multiple statements on a single line. A good example is:
59
60	if (condition)
61		do_something();
62
63
64	Chapter 2: Breaking long lines and strings
65
66The limit on the length of lines is 80 columns.
67
68However, there are some cases that the lines can exceed 80 columns. Never break
69user-visible strings such as print messages, because that breaks the ability
70to grep for them.
71
72E.g.:
73
74	fprintf(stderr, "Error, a c%c found in expression, but the data for this const was not provided\n", pInput[2]);
75
76
77	Chapter 3: Placing Braces and Spaces
78
793.1 Braces
80
813.1.1 Function
82
83Put the opening brace at the beginning of the next line, thus:
84
85int function(int x)
86{
87	body of function
88}
89
903.1.2 Others
91
92Put the opening brace last on the next line, thus:
93
94	if (x is true) {
95		we do y
96	}
97
98This applies to all non-function statement blocks (if, switch, for,
99while, do).  E.g.:
100
101	switch (action) {
102	case KOBJ_ADD:
103		return "add";
104	case KOBJ_REMOVE:
105		return "remove";
106	case KOBJ_CHANGE:
107		return "change";
108	default:
109		return NULL;
110	}
111
112Note that the closing brace is empty on a line of its own, _except_ in
113the cases where it is followed by a continuation of the same statement,
114ie a "while" in a do-statement or an "else" in an if-statement, like
115this:
116
117	do {
118		body of do-loop
119	} while (condition);
120
121and
122
123	if (x == y) {
124		..
125	} else if (x > y) {
126		...
127	} else {
128		....
129	}
130
1313.2 Spaces
132
1333.2.1 Use a space after (most) keywords.
134
135Use a space after these keywords:
136
137	if, switch, case, for, do, while
138
139but not with sizeof, typeof, alignof, or __attribute__.  E.g.,
140
141	s = sizeof(struct file);
142
1433.2.2 Do not add spaces around (inside) parenthesized expressions.
144
145This example is *bad*:
146
147	s = sizeof( struct file );
148
1493.2.3 When declaring pointer, the preferred use of '*' is adjacent to the data
150name or function name. E.g.:
151
152	char *linux_banner;
153	unsigned long long memparse(char *ptr, char **retptr);
154	char *match_strdup(substring_t *s);
155
1563.2.4 When type conversin, add a space before '*'.
157
158E.g:
159
160	hostSalt = (cl_uint *) mem_alloc(SALT_BUFFER_SIZE);
161
1623.2.5 Use one space around (on each side of) most binary and ternary operators,
163such as any of these:
164
165	=  +  -  <  >  *  /  %  |  &  ^  <=  >=  ==  !=  ?  :
166
167but no space after unary operators:
168
169	&  *  +  -  ~  !  sizeof  typeof  alignof  __attribute__  defined
170
171no space before the postfix increment & decrement unary operators:
172
173	++  --
174
175no space after the prefix increment & decrement unary operators:
176
177	++  --
178
179and no space around the '.' and "->" structure member operators.
180
1813.2.6 Don't leave whilespace at the end of lines.
182
183Don't do this:
184
185	do_something();. // '.' is a space
186
1873.2.7 There should not be any spaces between lables and left column.
188
189E.g:
190
191void f()
192{
193	...
194out:
195	free(p);
196	return;
197}
198
199
200	Chapter 4: Naming
201
202GLOBAL variables (to be used only if you _really_ need them) need to
203have descriptive names, as do global functions.  If you have a function
204that counts the number of active users, you should call that
205"count_active_users()" or similar, you should _not_ call it "cntusr()".
206
207We use names prefixed by crk_ for global functions in cracker.c, ldr_ for
208ones from loader.c and so on.
209
210
211	Chapter 5: Declaration
212
2135.1 Functions declartion
214
215In function prototypes, include parameter names with their data types.
216Although this is not required by the C language, it is preferred in Linux
217because it is a simple way to add valuable information for the reader.
218
2195.2 Variables declaration
220
221Add a blank line after variables declaration. E.g:
222
223void function(void)
224{
225	unsigned char master[32];
226
227	sevenzip_kdf((unsigned char*)saved_key[index], master);
228}
229
230
231	Chapter 6: Commenting
232
2336.1 C89 style and C99 style
234
235C89:
236
237/* ... */
238
239C99:
240
241// ...
242
243Use C89 style in core, and both are ok in jumbo.
244

README.cprepair

1cprepair is a tool that reads br0ken files that may either contain text
2accidentally encoded to UTF-8 twice, and/or is a mix of correct UTF-8 and a
3legacy codepage - and tries to output fixed data.
4
5Usage:
6./cprepair <INFILE >OUTFILE
7
8To see what would be converted, try:
9./cprepair -s -d <INFILE
10
11The legacy codepage defaults to CP1252 but can be chosen with -i.
12
13For use on a john.pot file and if you only want to convert stuff after the
14first colon, add -p option.
15
16The output is always correct UTF-8 but might not always be a correct conversion,
17especially if the input contains a mix of legacy codepage encodings. For strings
18like "Müller" or "Стандарт" it is easy (for a human) to guess a correct
19encoding but for a string made of random characters of which just one is 8-bit
20you can never know.
21
22A very good example use of this tool is fixing the original RockYou dataset.
23

README.format-epi

1= Intro
2=======
3
4EPiServer is a popular webbased content management system from Elektropost (http://www.episerver.com).
5You can dump the password hashes using the SQL syntax "select name, salt, hash from tblSID". The tblSID
6tabel stores interesting things such as usernames, salt and password hashes, but also passwords in cleartext.
7If a password can be found in cleartext it is found in the password column of tblSID.
8
9= Usage
10=======
11
12The format of the password file needs to be: <user>:<salt> <hash>. (Currently you need to include
13an inital 0x of both salt and hash.)
14
15--- Contents of an example epipasswd file ---
16
17webadmin:0x6631F625DEC28716FC24FA3CC1B3E2055E4281F4465226905C10D3456035 0x4F25D9BD24B81D85B1F2D106037C71CD2C828168
18epiuser:0x48F9BA13F54CE7AF669C76EEBC6BEA4564EBB77F1866CA5F2B297F7159C1 0xDA4260812C195025B4442C5C84E0F890122B285A
19
20-------------- End --------------------------
21
22You can then run "john epipasswd", the format will be autodetected.
23In case you'd like to check the performance of the patch try "john --test --format:epi".
24
25-johannes
26

README.gpg

1Cracking PGP Desktop / OpenPGP / GnuPG private (secret) keys with john
2======================================================================
3
41. Run gpg2john on PGP private key files (supports .skr files too!)
5
6E.g. $ ../run/gpg2john openwall.sec.asc > hashes
7E.g. $ ../run/gpg2john openwall.skr > hashes
8
9Ensure that the input file to gpg2john contains a single private key.
10
112. Run john on the output of gpg2john.
12
13E.g. $ ../run/john hashes
14

README.ios7

1Cracking IOS 7 restrictions PIN code
2====================================
3
41. Fetch the file com.apple.restrictionspassword.plist from your phone. How
5   you do this is out of scope for this document, just google it.
6
7
82. Run ios7tojohn on that file, redirecting output to a new file. Eg:
9
10   $ ./ios7tojohn com.apple.restrictionspassword.plist > ioshash
11
12
133. Run john on the new file, only using four digits (it's a PIN code):
14
15   $ ./john ioshash -inc:digits -min-len=4 -max-len=4
16
17
184. The password will get cracked in a split second. This is not because Apple
19   used a very poor hash mechanism but because the keyspace of a PIN code is
20   so very tiny.
21

README.keychain

1Cracking Apple's Mac OS Keychain files
2======================================
3
41. Run keychain2john on .keychain file(s).
5
6E.g. $ ../run/keychain2john login.keychain > hash
7
82. Run john on the output of keychain2john.
9
10E.g. $ ../run/john hash
11
123. Wait for the password to get cracked.
13

README.keyring

1Cracking GNOME Keyring files
2============================
3
41. Run keyring2john on .keyring file(s).
5
6E.g. $ ../run/keyring2john Default.keyring > hash
7
82. Run john on the output of keyring2john.
9
10E.g. $ ../run/john hash
11
123. Wait for the password to get cracked.
13

README.keystore

1Cracking KeyStore files
2======================
3
41. Run keystore2john.py on .jks file(s).
5
6E.g. $ ../run/keystore2john.py <name>.jks > hash
7
82. Run john on the output of keystore2john.py utility.
9
10E.g. $ ../run/john hash
11     or, for the OpenCL version:
12     $ ../run/john --format=keystore-opencl hash
13
143. Wait for the password to get cracked.
15

README.krb5tgs-17-18-23.md

1"THE BEER-WARE LICENSE" (Revision 42)
2=====================================
3<jean-christophe.delaunay (at) synacktiv.com> wrote this file.  As long as you
4retain this notice you can do whatever you want with this stuff. If we meet
5some day, and you think this stuff is worth it, you can buy me a beer in
6return.   Fist0urs
7
8
9Cracking Kerberos Ticket Granting Service (TGS) tickets within _Microsoft Active Directory_
10===========================================================================================
11
12(Skip to part "How to retrieve TGS tickets" if you just want to know how to get TGS to crack).
13
14What is it
15----------
16
17Within a _Micorosft Active Directory_ environment, registered services (as MsSQL or so) rely on a domain account in order to be functional.
18This domain account should be a service account but administrators can provided whichever account they want provided that it has sufficient rights.
19Such specific accounts are easily identifiable by their LDAP attribute _servicePrincipalName_ (SPN) and can be listed by *any authenticated user* in the domain (whatever are his rights in the domain).
20Furthermore any authenticated can request a TGS ticket for these accounts. Nevertheless, if one can request such tickets, it does not mean that he would be able to impersonate these accounts.
21Indeed, the important part assuring that a user submitting a ticket is its legit owner is encrypted with a key. This key is derived from a secret only known by the legit account which is its **domain account password**. This attack is known as "Kerberoast" and was discovered by Tim Medin.
22
23So, having a valid domain user, one can request tickets for accounts having a SPN and try to retrieve the corresponding passwords.
24
25Algorithm details
26-----------------
27
28_Active Directory_ offers 4 algorithms to generate the encryption key:
29
30* DES (disabled by default, not really usefull)
31* RC4-HMAC-MD5 (enctype 23)
32* AES128-CTS-HMAC-SHA1-96 (enctype 17) - with 4096 PBKDF2 HMAC-SHA1 iterations
33* AES256-CTS-HMAC-SHA1-96 (enctype 18) - same number of algo/iterations
34
35At the moment only etype 23 is implement within john but etype 17 and 18 are yet to come.
36
37How to retrieve TGS tickets
38---------------------------
39
40_GetUserSPNs.py_ from [impacket](https://github.com/SecureAuthCorp/impacket) by @asolino permits to obtain these tickets:
41
42```
43
44usage: GetUserSPNs.py [-h] [-target-domain TARGET_DOMAIN] [-request]
45                      [-request-user username] [-save]
46                      [-outputfile OUTPUTFILE] [-debug]
47                      [-hashes LMHASH:NTHASH] [-no-pass] [-k]
48                      [-aesKey hex key] [-dc-ip ip address]
49                      target
50
51Queries target domain for SPNs that are running under a user account
52
53positional arguments:
54  target                domain/username[:password]
55
56```
57
58Provided my domain is CONTOSO, username is "fistouille" and password "kariontounu", requesting tickets would be as follows:
59
60```
61
62$ python GetUserSPNs.py -target-domain CONTOSO -request -outputfile KRB5TGS.dump CONTOSO/fistouille:kariontounu
63
64```
65
66**_KRB5TGS.dump_ now contains ready-to-crack hashes for both JtR and hashcat**
67
68Another tool, [kerberoast](https://github.com/skelsec/kerberoast) from @skelsec, offers the ability to retrieve such tickets (among many other things).
69
70You can get it from [github](https://github.com/skelsec/kerberoast) or install it with **pip3** (_Python 3.6_ is required):
71
72```
73
74$ git clone https://github.com/skelsec/kerberoast
75$ python3 setup.py install
76
77OR
78
79$ pip3 install -r requirements.txt
80$ pip3 install kerberoast
81
82```
83
84Usage:
85
86```
87
88usage: kerberoast.py [-h] [-v]
89                     {ldap,brute,asreproast,spnroast,spnroast-sspi,auto} ...
90
91Tool to perform kerberoast attack against service users in MS Active Directory
92
93positional arguments:
94  {ldap,brute,asreproast,spnroast,spnroast-sspi,auto}
95                        commands
96    ldap                Enumerate potentially vulnerable users via LDAP
97    brute               Enumerate users via brute-forcing kerberos service
98    asreproast          Perform asrep roasting
99    spnroast            Perform spn roasting (aka kerberoasting)
100    spnroast-sspi       Perform spn roasting (aka kerberoasting)
101    auto                Just get the tickets already. Only works on windows
102                        under any domain-user context
103
104```
105
106Provided the aforementioned information plus a _Domain Controller_ IP/FQDN (eg. 10.123.42.42), we can request tickets as follows:
107
108```
109
110# we first list all user accounts having an SPN
111$ python3 kerberoast.py ldap all CONTOSO/fistouille:kariontounu@10.123.42.42 -o ldapenum
112
113# we then ask for TGS for these accounts
114$ python3 kerberoast.py spnroast CONTOSO/fistouille:kariontounu@10.123.42.42 -t ldapenum_spn_users.txt
115
116```
117
118**_ldapenum_spn_users.txt_ now contains ready-to-crack hashes for both JtR and hashcat**
119
120Finally, _kerberoast_ python tool also implements Windows implicit authentication mechanism which is really useful during _Red Team_ security assessments.

README.kwallet

1Cracking KWallet files
2======================
3
41. Run kwallet2john on .kwl file(s).
5
6E.g. $ ../run/kwallet2john <name>.kwl > hash
7
82. Run john on the output of kwallet2john.
9
10E.g. $ ../run/john hash
11
123. Wait for the password to get cracked.
13

README.librexgen

1Rexgen.txt - This document describes how to use the rexgen library, to perform
2regex expression work within JtR.  Rexgen library is copywrite Jan Starke,
3jan.starke@outofbed.org   The regex.c code in JtR by JimF, Spring 2014.
4
5First off, see the section at the bottom of this document about how to obtain
6build and install librexgen.
7
8Usage within JtR: --regex[=option=option2=option3]=expression
9
10The current options we have are:
11    case      will tell librexgen to do case insensitive work
12    alpha     This will use replaceable alphabets.  This can do some REALLY
13              fun things, like replace a letter with a word, etc. The alphabet
14              will be run to convert the reg-ex AFTER the word has been
15              prepared and delivered.  Fun things like f mapping to ph
16              or M mapping to |\/| can be done.  Case can also easily be
17              done here if the case option is also used. These options
18              are stored in the regex_alphabets.conf file in ./run dir
19              of JtR.  There are these current alphabets:
20              The default (if just =alpha is used). It is an empty
21              alphabet, nothing will change.  alpha:case  This is the
22              same as using the case option.  alpha:leet  This is a
23              simple 1337 (elite) transform, where some common lower
24              case letters are changed to numbers.  alpha:leet_case
25              is the same leet, but has full case conversion handled.
26              alpha:leet2 and alpha_leet2_case are a little stronger
27              elite stuff (with and without casing).  alpha:leet3
28              and alpha:leet3_case are strong elite, but probably
29              overkill as far as password guessing goes. They will
30              certainly find more, but there are a LOT of obsure multi-
31              letter replacements which likely are not seen in garden
32              variety passwords. h -> h H  |-|  ]-[  }-{  (-)  )-(  }{  #
33              is one example of alpha:leet3.
34              alpha:ascii2nonascii is a alphabet which will convert ascii
35              characters into non ascii utf8 characters which 'look'
36              similar (i.e. a with grave, umlat, accent, hook, etc)
37
38
39Currently, rexgen can be used stand alone, OR with wordlist and rules.
40There are plans to also add this to single mode at some time.
41
42The command line switch for stand along is --regex[=case]=expression
43The expression is a stand along rexex expression.  If the optional
44=case is there, then the expression is handled in a case insensitive
45manner (case mangling).  So using:  --regex=case=pass  would use these:
46PASS
47PASs
48PaSS
49PaSs
50pASS
51pASs
52paSS
53paSs
54PAsS
55PAss
56PasS
57Pass
58pAsS
59pAss
60pasS
61pass
62
63Stand alone usage is not most useful (especially since the rexgen built
64command can do this and more).  But it is there more to use as 'testing'
65for building expressions (along with using JtR's --stdout).
66
67
68RexGen in --wordlist mode:
69
70This is more powerful. It addes rexgen logic to each word from the wordlist
71to happen AFTER any rules (JtR rules) are applied.  In this mode, all \0 will
72be replaced with the current word (from wordlist, with rules applied), and
73then all of the regular expressions will be performed on this word.
74
75
76------------------------------------------------
77--- Obtaining, building, installing rexgen.  ---
78------------------------------------------------
79First off, you must obtain and install rexgen library. It can be found here:
80
81https://github.com/teeshop/rexgen
82
83git clone --recursive https://github.com/teeshop/rexgen.git
84
85As of this writing the last known good version is 2.0.8 so you may want
86to check that out.
87
88Once you download it, it requires a cmake environment, along with flex and
89bison to be installed and working.  To build, see instructions on this page:
90
91https://github.com/teeshop/rexgen/blob/master/README.md
92
93Instead of just running ./install.sh, you can first run ./build.sh
94as a regular user and then just run ./install.sh as root.
95
96cd rexgen/src
97./build.sh
98sudo ./install.sh
99
100If there are no errors (especially from cmake), librexgen should be installed.
101
102To test:
103rexgen '[0-2]password[A-C]'
1040passwordA
1051passwordA
1062passwordA
1070passwordB
1081passwordB
1092passwordB
1100passwordC
1111passwordC
1122passwordC
113
114Once you are at this point, rexgen is installed.  JtR ./configure now needs
115--enable-rexgen to detect and use the library.
116
117Note, JtR help document is NOT here to troubleshoot installation of this
118library.  A simple how to do it (when thing work right), is what was listed.
119If there problems beyond what is addressed in this document, then the lib's
120author is probably the best way to go.  A quick 'help me' post on john-users
121may get the proper answer, AND if we get a quick resolve, we will likely
122update this document listing this issue.  But anything past the basics,
123are really beyond the scope of the JtR developers.
124

README.mozilla

1Cracking Mozilla Firefox, Thunderbird and SeaMonkey master passwords
2====================================================================
3
41. Run mozilla2john.py on key3.db file.
5     ./mozilla2john /some/path/key3.db > mozilla.in
6
72. Run john on output of mozilla2john.
8     ./john mozilla.in
9
103. Wait for master password to get cracked.
11

README.mpi

1====================
2CAUTION:
3====================
4    Please note that MPI is only for multi-machine clusters with shared
5    network storage.  Merely having it compiled in (even if unused) may have
6    security and reliability drawbacks.  Most users should read up on the
7    --fork options instead, which gets compiled in automagically if your
8    system supports it.
9
10====================
11PRELUDE:
12====================
13    The original implementation was ca. 2004 by Ryan Lim as an academic
14    project.  It was later picked up and maintained at bindshell.net, adding
15    fixes for the JtR 1.7 releases and various cipher patches.
16
17    In 2008, it was picked up by AoZ and stripped back down to the original
18    MPI-only changes to improve its compatibility with the 'jumbo' patchsets,
19    which had better-maintained alternate cipher support. Up to this point,
20    the patch only worked for Incremental mode.
21
22    In 2010, it was extended by magnum to support all cracking modes. It was
23    far from perfect (with the exception of Markov mode and some cases of
24    Wordlist mode use) but worked just fine. From version 1.7.7-Jumbo-5, the
25    patch was incorporated in the main tree.
26
27    In 2013, core John got support for node/fork and MPI was unified with this
28    code. This means significantly better QA and also better scaling in some
29    cases. Note that the new -fork option deprecates MPI for use on a single
30    host! MPI works exactly like -fork except you can span the processes over
31    several remote hosts.
32
33====================
34COMPILING:
35====================
36    You must have an operational MPI environment prior to both compiling and
37    using the MPI version. Configuring one is outside the scope of this
38    document but it's trivial. What is most important is that all nodes see
39    the same working directory - normally you'd use NFS but other alternatives
40    exist (file locking needs to be properly supported though). The nodes may
41    use different binaries if required (eg. compiled for different CPU archs)
42    as long as they are the exact same John version. But the config files
43    SHOULD be shared over the network, and the directory where session
44    (.rec) files and log files are created MUST be a shared network one.
45
46    For a single, multi-core, host you don't need much configuration. MPICH2
47    or OpenMPI does the job fine, for example. Most testing of MPI is now
48    made using the version of OpenMPI included with latest LTE Ubuntu.
49
50    Debian/Ubuntu/Mint Linux example for installing OpenMPI:
51    sudo apt-get -y install libopenmpi-dev openmpi-bin
52
53    The new autconf (./configure) system does not build MPI unless told so.
54    It should detect and enable MPI if it's installed properly and you supply
55    the "--enable-mpi" option. Normally this should do:
56        ./configure --enable-mpi
57
58    Note that MPI works just fine together with OpenMP (a.k.a OMP) enabled
59    as well.  When MPI is in use (with more than one process), OMP is
60    automagically disabled. Advanced users may want to change this setting
61    (change MPIOMPmutex to N in john.conf) and start one MPI node per
62    multi-core host, letting OMP do the rest. Warnings are printed; these
63    can be muted in john.conf too.
64
65====================
66USAGE:
67====================
68    Typical invocation is as follows (mpiexec is usually synonym to mpirun):
69        mpirun -np 4 -host host1[,host2...] ./john pwfile
70
71    The above will launch four parallel processes that will split the job in
72    a more-or-less even fashion. If no -host is given, it will run all
73    processes on your local host (and -fork=4 would be a better option then).
74
75    Using "mpirun -np <num> ./john ..." can be seen as functionally equivalent
76    to "./john -fork=<num> ..." in that it will start the same number of
77    processes and parse the optional "-node" option equally. The main
78    practical difference is that -fork can only run on your local host, while
79    MPI can run partly or solely on one or more remote hosts.
80
81    Actually, MPI and -fork are so similar, and MPI "fakes" the -fork option
82    in the session file, so you can start a session as MPI and later resume
83    it without MPI - it will then use fork instead. Or vice versa.
84
85    Both these will start nodes 1-4 out of 4 total:
86	./john -fork=4 ...
87	mpirun -np 4 ./john ...
88
89    All these will start nodes 5-8 out of 12 total:
90	./john -fork=4 -node=5/12 ...
91	./john -fork=4 -node=5-8/12 ...
92	mpirun -np 4 ./john -node=5/12 ...
93	mpirun -np 4 ./john -node=5-8/12 ...
94
95    All these will refuse to run (-node parameter ambigous):
96	./john -node=2
97	./john -fork=4 -node=2
98	mpirun -np 4 ./john -node=2
99
100    This will start node 7 out of 12, or nodes 3-4 (but using just one process)
101    out of 16, MPI build or not:
102        ./john -node=7/12 ...
103        ./john -node=3-4/16 ...
104
105    This will start node 7/12 on a remote node:
106        mpirun -host hostname -np 1 ./john -node=7/12 ...
107
108    This will start nodes 3-4/16 (using just one process) on a remote node:
109        mpirun -host hostname -np 1 ./john -node=3-4/16 ...
110
111    The following is rejected - you can't use -fork and mpirun [with -np > 1]
112    at the same time:
113        mpirun -np 4 ./john -fork=...
114
115    This is somewhat more advanced, it will start 1-4/4 on one remote node:
116        mpirun -host hostname -np 1 ./john -fork=4 ...
117
118    This will do the same as above, but somewhat less efficiently:
119        mpirun -host hostname -np 4 ./john ...
120
121
122    In INCREMENTAL mode, the job is automagically split as evenly as possible
123    without performance loss. This is not perfect so in some cases, some nodes
124    will complete earlier than others.
125
126    In MARKOV mode, the range is automagically split evenly across the nodes,
127    just like you could do manually. This does not introduce any overhead,
128    assuming job runs to completion.
129
130    The single and wordlist modes scale well and cleartexts will not be tried
131    by more than one node (except when different word + rule combinations
132    result in the same candidate, but that problem is not MPI specific).
133
134    In SINGLE mode, and sometimes in Wordlist mode (see below), john will
135    distribute the rules (after preprocessor expansion). This works very well
136    but will not likely result in a perfectly even workload across nodes.
137
138    WORDLIST mode with rules will work the same way. Without rules, or when
139    rules can no longer be split across the nodes, john will switch to
140    distributing words instead.
141
142    If the --mem-file-size parameter (default 5000000 [bytes]) will allow the
143    file to be loaded in memory, this will be preferred and each node will
144    only load its own share of words. In this case, there is no further
145    distribution and no other overhead. Note that the limit is per node, so
146    using the default and four nodes, a 16 MB file WILL be loaded to memory,
147    with 4 MB on each node. To enforce this regardless of wordlist size, use
148    -mem-file-size=0.
149
150    In EXTERNAL mode, john will distribute candidates in the same way as in
151    Wordlist mode without rules. When attacking very fast formats, this scales
152    poorly.
153
154
155    You may send a USR1 signal to the parent MPI process (or HUP to all
156    individual processes) to cause the subprocesses to print out their status.
157    Be aware that they may not appear in order, because they blindly share the
158    same terminal.
159
160    skill -USR1 -c mpirun
161    - or -
162    pkill -USR1 mpirun
163
164    Another approach would be to do a normal status print. This is now done
165    without mpirun, all nodes will be printed:
166
167    ./john --status
168
169    This will dump the status of each process as recorded in the .rec files.
170
171
172    You may send a USR2 signal to the parent MPI process (or to all individual
173    processes) for manually requesting a "pot file sync". All nodes will
174    re-read the pot file and stop attacking any hashes (and salts!) that some
175    other node (or independant job) had already cracked.  Current code handles
176    this automagically with default config and no user intervention.
177
178
179====================
180MISC TIPS:
181====================
182    All MPI nodes must share the same working directory, usually over NFS. When
183    a larger number of nodes is in use, the overhead for writing to the log
184    file (which includes file locking) may become an overhead. Use the -nolog
185    option to disable logging or -verb=2 option to reduce chatter.
186
187====================
188CAVEATS:
189====================
190    - This implementation does not account for heterogeneous clusters or nodes
191      that come and go.
192    - Benchmark virtual c/s will appear inflated if launching more processes
193      than cores available. It will basically indicate what the speed would be
194      with that many real cores.
195    - Aborting a job using ctrl-c may kill nodes without updating state
196      files and logs. I have tried to mitigate this but it is still a good
197      idea to send a -USR1 to the parent before killing them. You should
198      lower the SAVE parameter in john.conf to 60 (seconds) if running MPI,
199      this will be the maximum time of repeated work after resuming.
200
201============================================================
202Following is the verbatim original content of this file:
203============================================================
204
205This distribution of John the Ripper (1.6.36) requires MPI to compile.
206
207If you don't have MPI, download and install it before proceeeding.
208
209Any bugs, patches, comments or love letters should be sent to
210jtr-mpi@hash.ryanlim.com. Hate mail, death threates should be sent to
211/dev/null.
212
213Enjoy.
214--
215Ryan Lim <jtr-mpi@hash.ryanlim.com>
216

README.pwsafe

1Cracking Password Safe 3.x and Password Gorilla databases with john
2===================================================================
3
41. Run pwsafe2john on .psafe3 files.
5
6E.g. $ ../run/pwsafe2john pwsafe-openwall.psafe3 > hashes
7
82. Run john on the output of pwsafe2john.
9
10E.g. $ ../run/john hashes
11
123. Wait for the password to get cracked.
13

README.ssh

1Cracking password protected ssh private keys
2============================================
3
41. Build JtR-jumbo
5
62. Run ssh2john.py on SSH private key file(s)
7
83. Run john on the output of step 2.
9

pcap2john.readme

1This file contains all the prior copyright headers from the independent
2XXX2john.py PCAP conversion utilities.  These have all been combined into
3a single ./run/pcap2john.py, and all of the copyright statements placed
4here.
5
6This file should also contain information and help on how to use the tool,
7how to obtain the pcap input data, etc.  For now, I will simply provide a
8link to a large resource on git owned by Dhiru.
9
10https://github.com/kholia/my-pcaps/
11or a full zip: https://github.com/kholia/my-pcaps/archive/master.zip
12
13################################################################################
14# from bfd2john.py
15####
16# Parser for BFD authentication packets.
17#
18# This software is Copyright (c) 2014 Dhiru Kholia <dhiru at openwall.com>, and
19# it is hereby released to the general public under the following terms:
20#
21# Redistribution and use in source and binary forms, with or without
22# modification, are permitted.
23################################################################################
24
25################################################################################
26# from vtp2john.py
27####
28# Parser for VTP MD5 authentication packets.
29#
30# This software is Copyright (c) 2014 Alexey Lapitsky <lex at realisticgroup.com> and Dhiru Kholia <dhiru at
31# openwall.com>, and it is hereby released to the general public under the following terms:
32#
33# Redistribution and use in source and binary forms, with or without
34# modification, are permitted.
35#
36# Output Hash Format:
37#
38# $vtp$1/2/3$vlans_data_length$vlans_data$salt_length$salt$hash
39################################################################################
40
41################################################################################
42# from vrrp2john.py
43####
44# Cracker for VRRP authentication (cisco variant).
45#
46# Output Format,
47# packet_number:$vrrp$algo_type$salt$have_extra_salt$extra_salt$hash
48#
49# $ md5sum i86bi-linux-l3-ipbase-12.4.bin
50# 3e79a8010a4174dc316a55e6d1886f3c  i86bi-linux-l3-ipbase-12.4.bin
51#
52# $ md5sum i86bi-linux-l3-adventerprisek9-15.4.1T.bin
53# 2eabae17778316c49cbc80e8e81262f9  i86bi-linux-l3-adventerprisek9-15.4.1T.bin
54#
55# This software is Copyright (c) 2014 m3g9tr0n (Spiros Fraganastasis)
56# <spirosfr.1985 at gmail.com> and Dhiru Kholia <dhiru at openwall.com>, and it
57# is hereby released to the general public under the following terms:
58#
59# Redistribution and use in source and binary forms, with or without
60# modification, are permitted.
61################################################################################
62
63################################################################################
64# from tcpmd5tojohn.py
65####
66# Cracker for "TCP MD5 Signatures", http://www.ietf.org/rfc/rfc2385.txt
67# Written by Dhiru Kholia <dhiru at openwall.com> in October 2013
68################################################################################
69
70################################################################################
71# from s7tojohn.py
72####
73# s7tojohn.py, parse .pcap files and output JtR compatible hashes.
74# Extended by Narendra Kangralkar <narendrakangralkar at gmail.com>
75# and Dhiru Kholia <dhiru at openwall.com>
76#
77# S7 protocol, is used for communication between Engineering Stations,
78# SCADA, HMI & PLC and can be protected by password.
79#
80# Original Authors: Alexander Timorin, Dmitry Sklyarov
81#
82# http://scadastrangelove.org
83#
84# __author__      = "Aleksandr Timorin"
85# __copyright__   = "Copyright 2013, Positive Technologies"
86# __license__     = "GNU GPL v3"
87# __version__     = "1.2"
88# __maintainer__  = "Aleksandr Timorin"
89# __email__       = "atimorin@gmail.com"
90# __status__      = "Development"
91#
92################################################################################
93
94################################################################################
95# from rsvp2john.py
96####
97# Based on http://tools.ietf.org/html/rfc2747 and some reversing.
98#
99# Output Format: packet_number:$rsvp$algo_type$salt$$hash
100#
101# This software is Copyright (c) 2014 Dhiru Kholia <dhiru at openwall.com>,
102# and it is hereby released to the general public under the following terms:
103#
104# Redistribution and use in source and binary forms, with or without
105# modification, are permitted.
106################################################################################
107
108################################################################################
109# from ntp2john.py
110####
111# NTP authentication parser.
112#
113# http://tools.ietf.org/html/rfc5905
114# http://tools.ietf.org/html/rfc1305
115# http://www.eecis.udel.edu/~mills/ntp/html/authentic.html
116#
117# This software is Copyright (c) 2014 Spiros Fraganastasis <spirosfr.1985 at
118# gmail.com> and Dhiru Kholia <dhiru at openwall.com>, and it is hereby
119# released to the general public under the following terms:
120#
121# Redistribution and use in source and binary forms, with or without
122# modification, are permitted.
123################################################################################
124
125################################################################################
126# from isis2john.py
127####
128# Parser for IS-IS MD5 authentication packets.
129#
130# This software is Copyright (c) 2014 Dhiru Kholia <dhiru at openwall.com>, and it is hereby released to the general
131# public under the following terms:
132#
133# Redistribution and use in source and binary forms, with or without modification, are permitted.
134################################################################################
135
136################################################################################
137# from hsrp2john.py
138####
139# Cracker for HSRP v2 MD5 authentication.
140#
141# http://www.rfc-editor.org/rfc/rfc1828.txt
142# https://www.ietf.org/rfc/rfc2281.txt
143# http://www.gotohack.org/2011/01/scapy-hsrp-md5-auth-dissecter-to.html
144# "i86bi-linux-l3-ipbase-12.4.bin" is fun ;)
145#
146# This is dedicated to Darya. You inspire me.
147
148# This software is Copyright (c) 2014 Dhiru Kholia <dhiru at openwall.com>, and
149# it is hereby released to the general public under the following terms:
150#
151# Redistribution and use in source and binary forms, with or without
152# modification, are permitted.
153################################################################################
154
155################################################################################
156# from glbp2john.py
157####
158# Cracker for GLBP authentication. Wireshark dissects GLBP messages pretty
159# nicely.
160#
161# Output Format,
162# packet_number:$glbp$algo_type$salt$have_extra_salt$extra_salt$hash
163#
164# $ md5sum i86bi-linux-l3-ipbase-12.4.bin  # GLBP TLV version 3.0
165# 3e79a8010a4174dc316a55e6d1886f3c  i86bi-linux-l3-ipbase-12.4.bin
166#
167# $ md5sum i86bi-linux-l3-adventerprisek9-15.4.1T.bin  # GLBP TLV version 2.0
168# 2eabae17778316c49cbc80e8e81262f9  i86bi-linux-l3-adventerprisek9-15.4.1T.bin
169#
170# This software is Copyright (c) 2014 Spiros Fraganastasis <spirosfr.1985 at
171# gmail.com> and Dhiru Kholia <dhiru at openwall.com>, and it is hereby
172# released to the general public under the following terms:
173#
174# Redistribution and use in source and binary forms, with or without
175# modification, are permitted.
176################################################################################
177
178################################################################################
179# from gadu2john.py
180####
181# This software is Copyright (c) 2013 Lukas Odzioba <ukasz at openwall dot net>
182# and it is hereby released to the general public under the following terms:
183#
184# Redistribution and use in source and binary forms, with or without
185# modification, are permitted.
186#
187# output format:
188# gadu-gadu number:$dynamic_24$sha1(pass.salt)$HEX$salt$
189#
190# We could use user status description and client language in GECOS field, but
191# this is not currently supported.
192#
193# "GG32" "hash function" used by ancient clients is not supported.
194#
195# Tested on:
196#
197# ekg: 10.1.0.11070
198# kadu 0.12.3
199# pidgin 2.110.6
200#
201################################################################################
202
203################################################################################
204# from eigrp2john.py
205####
206# Cracker for EIGRP authentication (MD5 and SHA-256 variants). Currently, this script is very speculative!
207# http://tools.ietf.org/html/draft-savage-eigrp-02
208#
209# Wireshark dissects EIGRP messages pretty nicely.
210# http://c0decafe.de/svn/codename_loki/trunk/modules/module_eigrp.py is cool
211#
212# Output Format,
213# packet_number:$eigrp$algo_type$salt$have_extra_salt$extra_salt$hash
214#
215# $ md5sum i86bi-linux-l3-ipbase-12.4.bin  # EIGRP TLV version 3.0
216# 3e79a8010a4174dc316a55e6d1886f3c  i86bi-linux-l3-ipbase-12.4.bin
217#
218# $ md5sum i86bi-linux-l3-adventerprisek9-15.4.1T.bin  # EIGRP TLV version 2.0
219# 2eabae17778316c49cbc80e8e81262f9  i86bi-linux-l3-adventerprisek9-15.4.1T.bin
220#
221# "c3660-js-mz.124-11-T.image" uses EIGRP TLV version 1.2 and we can't crack
222# such hashes currently (for unknown reasons).
223#
224# This is dedicated to Darya. You inspire me.
225#
226# This software is Copyright (c) 2014 Dhiru Kholia <dhiru at openwall.com>, and
227# it is hereby released to the general public under the following terms:
228#
229# Redistribution and use in source and binary forms, with or without
230# modification, are permitted.
231################################################################################
232