-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparams.h
368 lines (324 loc) · 10.5 KB
/
params.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
/*
* This file is part of John the Ripper password cracker,
* Copyright (c) 1996-2019 by Solar Designer
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted.
*
* There's ABSOLUTELY NO WARRANTY, express or implied.
*/
/*
* Some global parameters.
*/
#ifndef _JOHN_PARAMS_H
#define _JOHN_PARAMS_H
#include <limits.h>
#include "arch.h"
/*
* John's version number.
*/
#define JOHN_VERSION "1.9.0"
/*
* Notes to packagers of John for *BSD "ports", Linux distributions, etc.:
*
* You do need to set JOHN_SYSTEMWIDE to 1, but you do not need to patch this
* file for that. Instead, you can pass -DJOHN_SYSTEMWIDE=1 in CFLAGS. You
* also do not need to patch the Makefile for that since you can pass the
* CFLAGS via "make" command line. Similarly, you do not need to patch
* anything to change JOHN_SYSTEMWIDE_EXEC and JOHN_SYSTEMWIDE_HOME (although
* the defaults for these should be fine).
*
* JOHN_SYSTEMWIDE_EXEC should be set to the _directory_ where John will look
* for its "CPU fallback" program binary (which should be another build of John
* itself). This is activated when John is compiled with -DCPU_FALLBACK=1.
* The fallback program binary name is defined with CPU_FALLBACK_BINARY in
* architecture-specific header files such as x86-64.h (and the default should
* be fine - no need to patch it). On x86-64, this may be used to
* transparently fallback from a -64-xop build to -64-avx, then to plain -64
* (which implies SSE2). On 32-bit x86, this may be used to fallback from -xop
* to -avx, then to -sse2, then to -mmx, and finally to -any. Please do make
* use of this functionality in your package if it is built for x86-64 or
* 32-bit x86 (yes, you may need to make five builds of John for a single
* 32-bit x86 binary package).
*
* Similarly, -DOMP_FALLBACK=1 activates fallback to OMP_FALLBACK_BINARY in the
* JOHN_SYSTEMWIDE_EXEC directory when an OpenMP-enabled build of John
* determines that it would otherwise run only one thread, which would often
* be less optimal than running a non-OpenMP build.
*
* CPU_FALLBACK and OMP_FALLBACK may be used together, but in that case you
* need to override some of the default fallback binary filenames such that you
* can have both OpenMP-enabled and non-OpenMP fallback binaries that use the
* same CPU instruction set extensions. You can do these overrides with
* options like -DOMP_FALLBACK_BINARY='"john-non-omp-non-avx"' (leaving
* CPU_FALLBACK_BINARY at its default of "john-non-avx") or
* -DOMP_FALLBACK_BINARY='"john-sse2"' and
* -DCPU_FALLBACK_BINARY='"john-omp-sse2"' as fallbacks from an OpenMP-enabled
* -avx build. Please note that you do not need to patch any John files for
* this, not even the Makefile. For an example of passing these settings from
* an RPM spec file, please refer to john.spec used in Owl.
*
* "$JOHN" is supposed to be expanded at runtime. Please do not replace
* it with a specific path, neither in this file nor in the default
* john.conf, if at all possible.
*/
/*
* Is this a system-wide installation? *BSD "ports" and Linux distributions
* will want to set this to 1 for their builds of John - please refer to the
* notes above.
*/
#ifndef JOHN_SYSTEMWIDE
#define JOHN_SYSTEMWIDE 0
#endif
#if JOHN_SYSTEMWIDE
#ifndef JOHN_SYSTEMWIDE_EXEC /* please refer to the notes above */
#define JOHN_SYSTEMWIDE_EXEC "/usr/libexec/john"
#endif
#ifndef JOHN_SYSTEMWIDE_HOME
#define JOHN_SYSTEMWIDE_HOME "/usr/share/john"
#endif
#define JOHN_PRIVATE_HOME "~/.john"
#endif
#ifndef OMP_FALLBACK
#define OMP_FALLBACK 0
#endif
#if OMP_FALLBACK && !defined(OMP_FALLBACK_BINARY)
#define OMP_FALLBACK_BINARY "john-non-omp"
#endif
/*
* Crash recovery file format version strings.
*/
#define RECOVERY_V0 "REC0"
#define RECOVERY_V1 "REC1"
#define RECOVERY_V2 "REC2"
#define RECOVERY_V3 "REC3"
#define RECOVERY_V4 "REC4"
#define RECOVERY_V RECOVERY_V4
/*
* Charset file format version string.
*/
#define CHARSET_V3 "CHR3"
#define CHARSET_V CHARSET_V3
/*
* Timer interval in seconds.
*/
#define TIMER_INTERVAL 1
/*
* Default crash recovery file saving delay in timer intervals.
*/
#define TIMER_SAVE_DELAY (600 / TIMER_INTERVAL)
/*
* Default benchmark time in seconds (per cracking algorithm).
*/
#define BENCHMARK_TIME 5
/*
* Number of salts to assume when benchmarking.
*/
#define BENCHMARK_MANY 0x100
/*
* File names.
*/
#ifdef __DJGPP__
#define CFG_FULL_NAME "$JOHN/john.ini"
#else
#define CFG_FULL_NAME "$JOHN/john.conf"
#endif
#if JOHN_SYSTEMWIDE
#ifdef __DJGPP__
#define CFG_PRIVATE_FULL_NAME JOHN_PRIVATE_HOME "/john.ini"
#else
#define CFG_PRIVATE_FULL_NAME JOHN_PRIVATE_HOME "/john.conf"
#endif
#define POT_NAME JOHN_PRIVATE_HOME "/john.pot"
#define LOG_NAME JOHN_PRIVATE_HOME "/john.log"
#define RECOVERY_NAME JOHN_PRIVATE_HOME "/john"
#else
#define POT_NAME "$JOHN/john.pot"
#define LOG_NAME "$JOHN/john.log"
#define RECOVERY_NAME "$JOHN/john"
#endif
#define LOG_SUFFIX ".log"
#define RECOVERY_SUFFIX ".rec"
#define WORDLIST_NAME "$JOHN/password.lst"
/*
* Configuration file section names.
*/
#define SECTION_OPTIONS "Options"
#define SECTION_RULES "List.Rules:"
#define SUBSECTION_SINGLE "Single"
#define SUBSECTION_WORDLIST "Wordlist"
#define SECTION_INC "Incremental:"
#define SECTION_EXT "List.External:"
#define SECTION_DEBUG "Debug"
/*
* Number of different password hash table sizes.
* This is not really configurable, but we define it here in order to have
* the number hard-coded in fewer places.
*/
#define PASSWORD_HASH_SIZES 7
/*
* Which hash table size (out of those listed below) the loader should use for
* its own purposes. This does not affect password cracking speed after the
* loading is complete.
*/
#define PASSWORD_HASH_SIZE_FOR_LDR 4
/*
* Hash table sizes. These may also be hardcoded into the hash functions.
*/
#define SALT_HASH_LOG 20
#define SALT_HASH_SIZE (1 << SALT_HASH_LOG)
#define PASSWORD_HASH_SIZE_0 0x100
#define PASSWORD_HASH_SIZE_1 0x1000
#define PASSWORD_HASH_SIZE_2 0x10000
#define PASSWORD_HASH_SIZE_3 0x100000
#define PASSWORD_HASH_SIZE_4 0x1000000
#define PASSWORD_HASH_SIZE_5 0x8000000
#define PASSWORD_HASH_SIZE_6 0x40000000
#define PH_MASK_0 (PASSWORD_HASH_SIZE_0 - 1)
#define PH_MASK_1 (PASSWORD_HASH_SIZE_1 - 1)
#define PH_MASK_2 (PASSWORD_HASH_SIZE_2 - 1)
#define PH_MASK_3 (PASSWORD_HASH_SIZE_3 - 1)
#define PH_MASK_4 (PASSWORD_HASH_SIZE_4 - 1)
#define PH_MASK_5 (PASSWORD_HASH_SIZE_5 - 1)
#define PH_MASK_6 (PASSWORD_HASH_SIZE_6 - 1)
/*
* Password hash table thresholds. These are the counts of entries required
* to enable the corresponding bitmap size. The corresponding hash table size
* may be smaller as determined by PASSWORD_HASH_SHR.
*/
#define PASSWORD_HASH_THRESHOLD_0 3
#define PASSWORD_HASH_THRESHOLD_1 (PASSWORD_HASH_SIZE_0 / 25)
#define PASSWORD_HASH_THRESHOLD_2 (PASSWORD_HASH_SIZE_1 / 20)
#define PASSWORD_HASH_THRESHOLD_3 (PASSWORD_HASH_SIZE_2 / 10)
#define PASSWORD_HASH_THRESHOLD_4 (PASSWORD_HASH_SIZE_3 / 10)
#define PASSWORD_HASH_THRESHOLD_5 (PASSWORD_HASH_SIZE_4 / 10)
#define PASSWORD_HASH_THRESHOLD_6 (PASSWORD_HASH_SIZE_5 / 35)
/*
* Tables of the above values.
*/
extern unsigned int password_hash_sizes[PASSWORD_HASH_SIZES];
extern unsigned int password_hash_thresholds[PASSWORD_HASH_SIZES];
/*
* How much smaller should the hash tables be than bitmaps in terms of entry
* count. Setting this to 0 will result in them having the same number of
* entries, 1 will make the hash tables twice smaller than bitmaps, etc.
* 5 or 6 will make them the same size in bytes on systems with 32-bit or
* 64-bit pointers, respectively.
*/
#if ARCH_BITS >= 64
/* Up to 128 MiB bitmap, 2 GiB hash table assuming 64-bit pointers */
#define PASSWORD_HASH_SHR 2
#else
/* Up to 128 MiB bitmap, 512 MiB hash table assuming 32-bit pointers */
#define PASSWORD_HASH_SHR 3
#endif
/*
* Cracked password hash size, used while loading.
*/
#define CRACKED_HASH_LOG 21
#define CRACKED_HASH_SIZE (1 << CRACKED_HASH_LOG)
/*
* Buffered keys hash size, used for "single crack" mode.
*/
#if defined(_OPENMP) && DES_BS && !DES_BS_ASM
#define SINGLE_HASH_LOG 10
#else
#define SINGLE_HASH_LOG 7
#endif
#define SINGLE_HASH_SIZE (1 << SINGLE_HASH_LOG)
/*
* Minimum buffered keys hash size, used if min_keys_per_crypt is even less.
*/
#define SINGLE_HASH_MIN 8
/*
* Shadow file entry hash table size, used by unshadow.
*/
#define SHADOW_HASH_LOG 18
#define SHADOW_HASH_SIZE (1 << SHADOW_HASH_LOG)
/*
* Hash and buffer sizes for unique.
*/
#if ARCH_BITS >= 64
#define UNIQUE_HASH_LOG 25
#define UNIQUE_BUFFER_SIZE 0x80000000U
#else
#define UNIQUE_HASH_LOG 24
#define UNIQUE_BUFFER_SIZE 0x40000000
#endif
#define UNIQUE_HASH_SIZE (1 << UNIQUE_HASH_LOG)
/*
* Maximum number of GECOS words per password to load.
*/
#define LDR_WORDS_MAX 0x10
/*
* Maximum number of partial hash collisions in a db->password_hash[] bucket.
* If this limit is hit, we print a warning and disable detection of duplicate
* hashes (since it could be too slow).
*/
#define LDR_HASH_COLLISIONS_MAX 1000
/*
* How many bitmap entries should the cracker prefetch at once. Set this to 0
* to disable prefetching.
*/
#ifdef __SSE__
#define CRK_PREFETCH 64
#else
#define CRK_PREFETCH 0
#endif
/*
* Maximum number of GECOS words to try in pairs.
*/
#define SINGLE_WORDS_PAIR_MAX 4
/*
* Charset parameters.
*
* Please note that changes to these parameters make your build of John
* incompatible with charset files generated with other builds.
*/
#define CHARSET_MIN 0x01
#define CHARSET_MAX 0xff
#define CHARSET_LENGTH 24
/*
* Compiler parameters.
*/
#define C_TOKEN_SIZE 0x100
#define C_UNGET_SIZE (C_TOKEN_SIZE + 4)
#define C_EXPR_SIZE 0x100
#define C_STACK_SIZE ((C_EXPR_SIZE + 4) * 4)
#define C_ARRAY_SIZE 0x1000000
#define C_DATA_SIZE 0x8000000
/*
* Buffer size for rules.
*/
#define RULE_BUFFER_SIZE 0x100
/*
* Maximum number of character ranges for rules.
*/
#define RULE_RANGES_MAX 30
/*
* Buffer size for words while applying rules, should be at least as large
* as PLAINTEXT_BUFFER_SIZE.
*/
#define RULE_WORD_SIZE 0x80
/*
* Buffer size for plaintext passwords.
*/
#define PLAINTEXT_BUFFER_SIZE 0x80
/*
* Buffer size for fgets().
*/
#define LINE_BUFFER_SIZE 0x400
/*
* john.pot and log file buffer sizes, can be zero.
*/
#define POT_BUFFER_SIZE 0x100000
#define LOG_BUFFER_SIZE 0x100000
/*
* Buffer size for path names.
*/
#ifdef PATH_MAX
#define PATH_BUFFER_SIZE PATH_MAX
#else
#define PATH_BUFFER_SIZE 0x400
#endif
#endif