Move benchmark related stuff to benchmark.c

pull/496/head
jsteube 8 years ago
parent 10b4670682
commit e25224a940

@ -6,4 +6,8 @@
#ifndef _BENCHMARK_H
#define _BENCHMARK_H
#define BENCHMARK 0
#define DEFAULT_BENCHMARK_ALGORITHMS_CNT 146
#endif // _BENCHMARK_H

@ -12,9 +12,13 @@
#include <errno.h>
#include <limits.h>
#define HASH_MODE 0
#define HEX_SALT 0
#define SEPARATOR ':'
#define PW_MIN 0
#define PW_MAX 54
#define PW_MAX1 (PW_MAX + 1)
#define HASH_MODE 0
#define HEX_SALT 0
#define SEPARATOR ':'
/**
* weak hashes shutcut
@ -1661,6 +1665,11 @@ void to_hccap_t (hccap_t *hccap, uint salt_pos, uint digest_pos, hashconfig_t *h
void ascii_digest (char *out_buf, uint salt_pos, uint digest_pos, hashconfig_t *hashconfig, void *digests_buf, salt_t *salts_buf, void *esalts_buf, hashinfo_t **hash_info, char *hashfile);
int hashconfig_init (hashconfig_t *hashconfig, const uint hash_mode, const char separator, const uint hex_salt);
int hashconfig_init (hashconfig_t *hashconfig, const uint hash_mode, const char separator, const uint hex_salt);
void hashconfig_destroy (hashconfig_t *hashconfig);
uint hashconfig_general_pw_min (hashconfig_t *hashconfig);
uint hashconfig_general_pw_max (hashconfig_t *hashconfig);
void hashconfig_benchmark_defaults (hashconfig_t *hashconfig, salt_t *salt, void *esalt);
char *hashconfig_benchmark_mask (hashconfig_t *hashconfig);
#endif // _INTERFACE_H

@ -45,6 +45,7 @@ typedef struct
void mp_css_to_uniq_tbl (uint css_cnt, cs_t *css, uint uniq_tbls[SP_PW_MAX][CHARSIZ]);
void mp_cut_at (char *mask, uint max);
uint mp_get_length (char *mask);
void mp_exec (u64 val, char *buf, cs_t *css, int css_cnt);
cs_t *mp_gen_css (char *mask_buf, size_t mask_len, cs_t *mp_sys, cs_t *mp_usr, uint *css_cnt, hashconfig_t *hashconfig);
u64 mp_get_sum (uint css_cnt, cs_t *css);

@ -215,9 +215,6 @@ typedef struct
} wordr_t;
#define RULES_MAX 256
#define PW_MIN 0
#define PW_MAX 54
#define PW_MAX1 (PW_MAX + 1)
#define PW_DICTMAX 31
#define PW_DICTMAX1 (PW_DICTMAX + 1)

@ -5,3 +5,153 @@
#include "common.h"
#include "benchmark.h"
const int DEFAULT_BENCHMARK_ALGORITHMS_BUF[DEFAULT_BENCHMARK_ALGORITHMS_CNT] =
{
900,
0,
5100,
100,
1400,
10800,
1700,
5000,
10100,
6000,
6100,
6900,
11700,
11800,
14000,
14100,
400,
8900,
11900,
12000,
10900,
12100,
23,
2500,
5300,
5400,
5500,
5600,
7300,
7500,
13100,
8300,
11100,
11200,
11400,
121,
2611,
2711,
2811,
8400,
13900,
11,
2612,
7900,
21,
11000,
124,
10000,
3711,
7600,
12,
131,
132,
1731,
200,
300,
3100,
112,
12300,
8000,
141,
1441,
1600,
12600,
1421,
101,
111,
1711,
3000,
1000,
1100,
2100,
12800,
1500,
12400,
500,
3200,
7400,
1800,
122,
1722,
7100,
6300,
6700,
6400,
6500,
2400,
2410,
5700,
9200,
9300,
22,
501,
5800,
8100,
8500,
7200,
9900,
7700,
7800,
10300,
8600,
8700,
9100,
133,
13500,
11600,
13600,
12500,
13000,
13200,
13300,
6211,
6221,
6231,
6241,
13711,
13721,
13731,
13741,
13751,
13761,
8800,
12900,
12200,
9700,
9710,
9800,
9810,
9400,
9500,
9600,
10400,
10410,
10500,
10600,
10700,
9000,
5200,
6800,
6600,
8200,
11300,
12700,
13400,
125
};

@ -96,7 +96,9 @@ extern void (*get_next_word_func) (char *, u32, u32 *, u32 *);
extern const unsigned int full01;
extern const unsigned int full80;
static const char *PROGNAME = "hashcat";
extern const int DEFAULT_BENCHMARK_ALGORITHMS_BUF[];
static const char PROGNAME[] = "hashcat";
const int comptime = COMPTIME;
@ -104,158 +106,6 @@ const int comptime = COMPTIME;
// benchmark
#define BENCHMARK 0
#define NUM_DEFAULT_BENCHMARK_ALGORITHMS 146
static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] =
{
900,
0,
5100,
100,
1400,
10800,
1700,
5000,
10100,
6000,
6100,
6900,
11700,
11800,
14000,
14100,
400,
8900,
11900,
12000,
10900,
12100,
23,
2500,
5300,
5400,
5500,
5600,
7300,
7500,
13100,
8300,
11100,
11200,
11400,
121,
2611,
2711,
2811,
8400,
13900,
11,
2612,
7900,
21,
11000,
124,
10000,
3711,
7600,
12,
131,
132,
1731,
200,
300,
3100,
112,
12300,
8000,
141,
1441,
1600,
12600,
1421,
101,
111,
1711,
3000,
1000,
1100,
2100,
12800,
1500,
12400,
500,
3200,
7400,
1800,
122,
1722,
7100,
6300,
6700,
6400,
6500,
2400,
2410,
5700,
9200,
9300,
22,
501,
5800,
8100,
8500,
7200,
9900,
7700,
7800,
10300,
8600,
8700,
9100,
133,
13500,
11600,
13600,
12500,
13000,
13200,
13300,
6211,
6221,
6231,
6241,
13711,
13721,
13731,
13741,
13751,
13761,
8800,
12900,
12200,
9700,
9710,
9800,
9810,
9400,
9500,
9600,
10400,
10410,
10500,
10600,
10700,
9000,
5200,
6800,
6600,
8200,
11300,
12700,
13400,
125
};
// outfile_check
#define OUTFILE_CHECK_TIMER 5
@ -5887,9 +5737,9 @@ int main (int argc, char **argv)
uint algorithm_pos = 0;
uint algorithm_max = 1;
uint *algorithms = default_benchmark_algorithms;
const int *algorithms = DEFAULT_BENCHMARK_ALGORITHMS_BUF;
if (benchmark == 1 && hash_mode_chgd == 0) algorithm_max = NUM_DEFAULT_BENCHMARK_ALGORITHMS;
if (benchmark == 1 && hash_mode_chgd == 0) algorithm_max = DEFAULT_BENCHMARK_ALGORITHMS_CNT;
for (algorithm_pos = 0; algorithm_pos < algorithm_max; algorithm_pos++)
{
@ -6003,77 +5853,8 @@ int main (int argc, char **argv)
* word len
*/
uint pw_min = PW_MIN;
uint pw_max = PW_MAX;
switch (hashconfig->hash_mode)
{
case 125: if (pw_max > 32) pw_max = 32;
break;
case 400: if (pw_max > 40) pw_max = 40;
break;
case 500: if (pw_max > 16) pw_max = 16;
break;
case 1500: if (pw_max > 8) pw_max = 8;
break;
case 1600: if (pw_max > 16) pw_max = 16;
break;
case 1800: if (pw_max > 16) pw_max = 16;
break;
case 2100: if (pw_max > 16) pw_max = 16;
break;
case 2500: if (pw_min < 8) pw_min = 8;
break;
case 3000: if (pw_max > 7) pw_max = 7;
break;
case 5200: if (pw_max > 24) pw_max = 24;
break;
case 5800: if (pw_max > 16) pw_max = 16;
break;
case 6300: if (pw_max > 16) pw_max = 16;
break;
case 7400: if (pw_max > 16) pw_max = 16;
break;
case 7700: if (pw_max > 8) pw_max = 8;
break;
case 7900: if (pw_max > 48) pw_max = 48;
break;
case 8500: if (pw_max > 8) pw_max = 8;
break;
case 8600: if (pw_max > 16) pw_max = 16;
break;
case 9710: pw_min = 5;
pw_max = 5;
break;
case 9810: pw_min = 5;
pw_max = 5;
break;
case 10410: pw_min = 5;
pw_max = 5;
break;
case 10300: if (pw_max < 3) pw_min = 3;
if (pw_max > 40) pw_max = 40;
break;
case 10500: if (pw_max < 3) pw_min = 3;
if (pw_max > 40) pw_max = 40;
break;
case 10700: if (pw_max > 16) pw_max = 16;
break;
case 11300: if (pw_max > 40) pw_max = 40;
break;
case 11600: if (pw_max > 32) pw_max = 32;
break;
case 12500: if (pw_max > 20) pw_max = 20;
break;
case 12800: if (pw_max > 24) pw_max = 24;
break;
case 14000: if (pw_min < 8) pw_min = 8;
if (pw_max > 8) pw_max = 8;
break;
case 14100: if (pw_min < 24) pw_min = 24;
if (pw_max > 24) pw_max = 24;
break;
}
uint pw_min = hashconfig_general_pw_min (hashconfig);
uint pw_max = hashconfig_general_pw_max (hashconfig);
if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL)
{
@ -6692,394 +6473,9 @@ int main (int argc, char **argv)
}
else
{
if (hashconfig->is_salted)
{
hashes_buf[0].salt->salt_len = 8;
// special salt handling
switch (hashconfig->hash_mode)
{
case 1500: hashes_buf[0].salt->salt_len = 2;
hashes_buf[0].salt->salt_buf[0] = 388; // pure magic
break;
case 1731: hashes_buf[0].salt->salt_len = 4;
break;
case 2410: hashes_buf[0].salt->salt_len = 4;
break;
case 2500: memcpy (hashes_buf[0].salt->salt_buf, "hashcat.net", 11);
break;
case 3100: hashes_buf[0].salt->salt_len = 1;
break;
case 5000: hashes_buf[0].salt->keccak_mdlen = 32;
break;
case 5800: hashes_buf[0].salt->salt_len = 16;
break;
case 6800: hashes_buf[0].salt->salt_len = 32;
break;
case 8400: hashes_buf[0].salt->salt_len = 40;
break;
case 8800: hashes_buf[0].salt->salt_len = 16;
break;
case 8900: hashes_buf[0].salt->salt_len = 16;
hashes_buf[0].salt->scrypt_N = 1024;
hashes_buf[0].salt->scrypt_r = 1;
hashes_buf[0].salt->scrypt_p = 1;
break;
case 9100: hashes_buf[0].salt->salt_len = 16;
break;
case 9300: hashes_buf[0].salt->salt_len = 14;
hashes_buf[0].salt->scrypt_N = 16384;
hashes_buf[0].salt->scrypt_r = 1;
hashes_buf[0].salt->scrypt_p = 1;
break;
case 9400: hashes_buf[0].salt->salt_len = 16;
break;
case 9500: hashes_buf[0].salt->salt_len = 16;
break;
case 9600: hashes_buf[0].salt->salt_len = 16;
break;
case 9700: hashes_buf[0].salt->salt_len = 16;
break;
case 9710: hashes_buf[0].salt->salt_len = 16;
break;
case 9720: hashes_buf[0].salt->salt_len = 16;
break;
case 9800: hashes_buf[0].salt->salt_len = 16;
break;
case 9810: hashes_buf[0].salt->salt_len = 16;
break;
case 9820: hashes_buf[0].salt->salt_len = 16;
break;
case 10300: hashes_buf[0].salt->salt_len = 12;
break;
case 11500: hashes_buf[0].salt->salt_len = 4;
break;
case 11600: hashes_buf[0].salt->salt_len = 4;
break;
case 12400: hashes_buf[0].salt->salt_len = 4;
break;
case 12500: hashes_buf[0].salt->salt_len = 8;
break;
case 12600: hashes_buf[0].salt->salt_len = 64;
break;
case 14000: hashes_buf[0].salt->salt_len = 8;
break;
case 14100: hashes_buf[0].salt->salt_len = 8;
break;
}
// special esalt handling
hashconfig_benchmark_defaults (hashconfig, hashes_buf[0].salt, hashes_buf[0].esalt);
switch (hashconfig->hash_mode)
{
case 2500: ((wpa_t *) hashes_buf[0].esalt)->eapol_size = 128;
break;
case 5300: ((ikepsk_t *) hashes_buf[0].esalt)->nr_len = 1;
((ikepsk_t *) hashes_buf[0].esalt)->msg_len = 1;
break;
case 5400: ((ikepsk_t *) hashes_buf[0].esalt)->nr_len = 1;
((ikepsk_t *) hashes_buf[0].esalt)->msg_len = 1;
break;
case 5500: ((netntlm_t *) hashes_buf[0].esalt)->user_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->domain_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->srvchall_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->clichall_len = 1;
break;
case 5600: ((netntlm_t *) hashes_buf[0].esalt)->user_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->domain_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->srvchall_len = 1;
((netntlm_t *) hashes_buf[0].esalt)->clichall_len = 1;
break;
case 7300: ((rakp_t *) hashes_buf[0].esalt)->salt_len = 32;
break;
case 10400: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 32;
((pdf_t *) hashes_buf[0].esalt)->u_len = 32;
break;
case 10410: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 32;
((pdf_t *) hashes_buf[0].esalt)->u_len = 32;
break;
case 10420: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 32;
((pdf_t *) hashes_buf[0].esalt)->u_len = 32;
break;
case 10500: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 32;
((pdf_t *) hashes_buf[0].esalt)->u_len = 32;
break;
case 10600: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 127;
((pdf_t *) hashes_buf[0].esalt)->u_len = 127;
break;
case 10700: ((pdf_t *) hashes_buf[0].esalt)->id_len = 16;
((pdf_t *) hashes_buf[0].esalt)->o_len = 127;
((pdf_t *) hashes_buf[0].esalt)->u_len = 127;
break;
case 11600: ((seven_zip_t *) hashes_buf[0].esalt)->iv_len = 16;
((seven_zip_t *) hashes_buf[0].esalt)->data_len = 112;
((seven_zip_t *) hashes_buf[0].esalt)->unpack_size = 112;
break;
case 13400: ((keepass_t *) hashes_buf[0].esalt)->version = 2;
break;
case 13500: ((pstoken_t *) hashes_buf[0].esalt)->salt_len = 113;
break;
case 13600: ((zip2_t *) hashes_buf[0].esalt)->salt_len = 16;
((zip2_t *) hashes_buf[0].esalt)->data_len = 32;
((zip2_t *) hashes_buf[0].esalt)->mode = 3;
break;
}
}
// set hashfile
switch (hashconfig->hash_mode)
{
case 5200: data.hashfile = mystrdup ("hashcat.psafe3");
break;
case 5300: data.hashfile = mystrdup ("hashcat.ikemd5");
break;
case 5400: data.hashfile = mystrdup ("hashcat.ikesha1");
break;
case 6211: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6212: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6213: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6221: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6222: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6223: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6231: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6232: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6233: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6241: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6242: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6243: data.hashfile = mystrdup ("hashcat.tc");
break;
case 6600: data.hashfile = mystrdup ("hashcat.agilekey");
break;
case 8200: data.hashfile = mystrdup ("hashcat.cloudkey");
break;
case 9000: data.hashfile = mystrdup ("hashcat.psafe2");
break;
case 13711: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13712: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13713: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13721: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13722: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13723: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13731: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13732: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13733: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13741: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13742: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13743: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13751: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13752: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13753: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13761: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13762: data.hashfile = mystrdup ("hashcat.vc");
break;
case 13763: data.hashfile = mystrdup ("hashcat.vc");
break;
}
// set default iterations
switch (hashconfig->hash_mode)
{
case 400: hashes_buf[0].salt->salt_iter = ROUNDS_PHPASS;
break;
case 500: hashes_buf[0].salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 501: hashes_buf[0].salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 1600: hashes_buf[0].salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 1800: hashes_buf[0].salt->salt_iter = ROUNDS_SHA512CRYPT;
break;
case 2100: hashes_buf[0].salt->salt_iter = ROUNDS_DCC2;
break;
case 2500: hashes_buf[0].salt->salt_iter = ROUNDS_WPA2;
break;
case 3200: hashes_buf[0].salt->salt_iter = ROUNDS_BCRYPT;
break;
case 5200: hashes_buf[0].salt->salt_iter = ROUNDS_PSAFE3;
break;
case 5800: hashes_buf[0].salt->salt_iter = ROUNDS_ANDROIDPIN - 1;
break;
case 6211: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6212: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6213: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6221: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6222: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6223: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6231: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6232: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6233: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6241: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6242: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6243: hashes_buf[0].salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6300: hashes_buf[0].salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 6400: hashes_buf[0].salt->salt_iter = ROUNDS_SHA256AIX;
break;
case 6500: hashes_buf[0].salt->salt_iter = ROUNDS_SHA512AIX;
break;
case 6700: hashes_buf[0].salt->salt_iter = ROUNDS_SHA1AIX;
break;
case 6600: hashes_buf[0].salt->salt_iter = ROUNDS_AGILEKEY;
break;
case 6800: hashes_buf[0].salt->salt_iter = ROUNDS_LASTPASS;
break;
case 7100: hashes_buf[0].salt->salt_iter = ROUNDS_SHA512OSX;
break;
case 7200: hashes_buf[0].salt->salt_iter = ROUNDS_GRUB;
break;
case 7400: hashes_buf[0].salt->salt_iter = ROUNDS_SHA256CRYPT;
break;
case 7900: hashes_buf[0].salt->salt_iter = ROUNDS_DRUPAL7;
break;
case 8200: hashes_buf[0].salt->salt_iter = ROUNDS_CLOUDKEY;
break;
case 8300: hashes_buf[0].salt->salt_iter = ROUNDS_NSEC3;
break;
case 8800: hashes_buf[0].salt->salt_iter = ROUNDS_ANDROIDFDE;
break;
case 8900: hashes_buf[0].salt->salt_iter = 1;
break;
case 9000: hashes_buf[0].salt->salt_iter = ROUNDS_PSAFE2;
break;
case 9100: hashes_buf[0].salt->salt_iter = ROUNDS_LOTUS8;
break;
case 9200: hashes_buf[0].salt->salt_iter = ROUNDS_CISCO8;
break;
case 9300: hashes_buf[0].salt->salt_iter = 1;
break;
case 9400: hashes_buf[0].salt->salt_iter = ROUNDS_OFFICE2007;
break;
case 9500: hashes_buf[0].salt->salt_iter = ROUNDS_OFFICE2010;
break;
case 9600: hashes_buf[0].salt->salt_iter = ROUNDS_OFFICE2013;
break;
case 10000: hashes_buf[0].salt->salt_iter = ROUNDS_DJANGOPBKDF2;
break;
case 10300: hashes_buf[0].salt->salt_iter = ROUNDS_SAPH_SHA1 - 1;
break;
case 10500: hashes_buf[0].salt->salt_iter = ROUNDS_PDF14;
break;
case 10700: hashes_buf[0].salt->salt_iter = ROUNDS_PDF17L8;
break;
case 10900: hashes_buf[0].salt->salt_iter = ROUNDS_PBKDF2_SHA256 - 1;
break;
case 11300: hashes_buf[0].salt->salt_iter = ROUNDS_BITCOIN_WALLET - 1;
break;
case 11600: hashes_buf[0].salt->salt_iter = ROUNDS_SEVEN_ZIP;
break;
case 11900: hashes_buf[0].salt->salt_iter = ROUNDS_PBKDF2_MD5 - 1;
break;
case 12000: hashes_buf[0].salt->salt_iter = ROUNDS_PBKDF2_SHA1 - 1;
break;
case 12100: hashes_buf[0].salt->salt_iter = ROUNDS_PBKDF2_SHA512 - 1;
break;
case 12200: hashes_buf[0].salt->salt_iter = ROUNDS_ECRYPTFS - 1;
break;
case 12300: hashes_buf[0].salt->salt_iter = ROUNDS_ORACLET - 1;
break;
case 12400: hashes_buf[0].salt->salt_iter = ROUNDS_BSDICRYPT - 1;
break;
case 12500: hashes_buf[0].salt->salt_iter = ROUNDS_RAR3;
break;
case 12700: hashes_buf[0].salt->salt_iter = ROUNDS_MYWALLET;
break;
case 12800: hashes_buf[0].salt->salt_iter = ROUNDS_MS_DRSR - 1;
break;
case 12900: hashes_buf[0].salt->salt_iter = ROUNDS_ANDROIDFDE_SAMSUNG - 1;
break;
case 13000: hashes_buf[0].salt->salt_iter = ROUNDS_RAR5 - 1;
break;
case 13200: hashes_buf[0].salt->salt_iter = ROUNDS_AXCRYPT;
break;
case 13400: hashes_buf[0].salt->salt_iter = ROUNDS_KEEPASS;
break;
case 13600: hashes_buf[0].salt->salt_iter = ROUNDS_ZIP2;
break;
case 13711: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13712: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13713: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13721: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13722: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13723: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13731: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13732: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13733: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13741: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13742: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13743: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13751: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13752: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13753: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13761: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
case 13762: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
case 13763: hashes_buf[0].salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
}
data.hashfile = "-";
hashes_cnt = 1;
}
@ -11815,7 +11211,7 @@ int main (int argc, char **argv)
increment = 1;
maskcnt = 1;
maskcnt = 1;
}
}
else
@ -11824,23 +11220,12 @@ int main (int argc, char **argv)
* generate full masks and charsets
*/
masks = (char **) mymalloc (sizeof (char *));
mask = hashconfig_benchmark_mask (hashconfig);
switch (hashconfig->hash_mode)
{
case 1731: pw_min = 5;
pw_max = 5;
mask = mystrdup ("?b?b?b?b?b");
break;
case 12500: pw_min = 5;
pw_max = 5;
mask = mystrdup ("?b?b?b?b?b");
break;
default: pw_min = 7;
pw_max = 7;
mask = mystrdup ("?b?b?b?b?b?b?b");
break;
}
pw_min = mp_get_length (mask);
pw_max = pw_min;
masks = (char **) mymalloc (sizeof (char *));
maskcnt = 1;

@ -19857,3 +19857,423 @@ int hashconfig_init (hashconfig_t *hashconfig, const uint hash_mode, const char
return 0;
}
void hashconfig_destroy (hashconfig_t *hashconfig)
{
myfree (hashconfig);
}
uint hashconfig_general_pw_min (hashconfig_t *hashconfig)
{
uint pw_min = PW_MIN;
switch (hashconfig->hash_mode)
{
case 2500: pw_min = 8;
break;
case 9710: pw_min = 5;
break;
case 9810: pw_min = 5;
break;
case 10410: pw_min = 5;
break;
case 14000: pw_min = 8;
break;
case 14100: pw_min = 24;
break;
}
return pw_min;
}
uint hashconfig_general_pw_max (hashconfig_t *hashconfig)
{
uint pw_max = PW_MAX;
switch (hashconfig->hash_mode)
{
case 125: pw_max = 32;
break;
case 400: pw_max = 40;
break;
case 500: pw_max = 16;
break;
case 1500: pw_max = 8;
break;
case 1600: pw_max = 16;
break;
case 1800: pw_max = 16;
break;
case 2100: pw_max = 16;
break;
case 3000: pw_max = 7;
break;
case 5200: pw_max = 24;
break;
case 5800: pw_max = 16;
break;
case 6300: pw_max = 16;
break;
case 7400: pw_max = 16;
break;
case 7700: pw_max = 8;
break;
case 7900: pw_max = 48;
break;
case 8500: pw_max = 8;
break;
case 8600: pw_max = 16;
break;
case 9710: pw_max = 5;
break;
case 9810: pw_max = 5;
break;
case 10410: pw_max = 5;
break;
case 10300: pw_max = 40;
break;
case 10500: pw_max = 40;
break;
case 10700: pw_max = 16;
break;
case 11300: pw_max = 40;
break;
case 11600: pw_max = 32;
break;
case 12500: pw_max = 20;
break;
case 12800: pw_max = 24;
break;
case 14000: pw_max = 8;
break;
case 14100: pw_max = 24;
break;
}
return pw_max;
}
void hashconfig_benchmark_defaults (hashconfig_t *hashconfig, salt_t *salt, void *esalt)
{
if (hashconfig->is_salted)
{
salt->salt_len = 8;
// special salt handling
switch (hashconfig->hash_mode)
{
case 1500: salt->salt_len = 2;
salt->salt_buf[0] = 388; // pure magic
break;
case 1731: salt->salt_len = 4;
break;
case 2410: salt->salt_len = 4;
break;
case 2500: memcpy (salt->salt_buf, "hashcat.net", 11);
break;
case 3100: salt->salt_len = 1;
break;
case 5000: salt->keccak_mdlen = 32;
break;
case 5800: salt->salt_len = 16;
break;
case 6800: salt->salt_len = 32;
break;
case 8400: salt->salt_len = 40;
break;
case 8800: salt->salt_len = 16;
break;
case 8900: salt->salt_len = 16;
salt->scrypt_N = 1024;
salt->scrypt_r = 1;
salt->scrypt_p = 1;
break;
case 9100: salt->salt_len = 16;
break;
case 9300: salt->salt_len = 14;
salt->scrypt_N = 16384;
salt->scrypt_r = 1;
salt->scrypt_p = 1;
break;
case 9400: salt->salt_len = 16;
break;
case 9500: salt->salt_len = 16;
break;
case 9600: salt->salt_len = 16;
break;
case 9700: salt->salt_len = 16;
break;
case 9710: salt->salt_len = 16;
break;
case 9720: salt->salt_len = 16;
break;
case 9800: salt->salt_len = 16;
break;
case 9810: salt->salt_len = 16;
break;
case 9820: salt->salt_len = 16;
break;
case 10300: salt->salt_len = 12;
break;
case 11500: salt->salt_len = 4;
break;
case 11600: salt->salt_len = 4;
break;
case 12400: salt->salt_len = 4;
break;
case 12500: salt->salt_len = 8;
break;
case 12600: salt->salt_len = 64;
break;
case 14000: salt->salt_len = 8;
break;
case 14100: salt->salt_len = 8;
break;
}
// special esalt handling
switch (hashconfig->hash_mode)
{
case 2500: ((wpa_t *) esalt)->eapol_size = 128;
break;
case 5300: ((ikepsk_t *) esalt)->nr_len = 1;
((ikepsk_t *) esalt)->msg_len = 1;
break;
case 5400: ((ikepsk_t *) esalt)->nr_len = 1;
((ikepsk_t *) esalt)->msg_len = 1;
break;
case 5500: ((netntlm_t *) esalt)->user_len = 1;
((netntlm_t *) esalt)->domain_len = 1;
((netntlm_t *) esalt)->srvchall_len = 1;
((netntlm_t *) esalt)->clichall_len = 1;
break;
case 5600: ((netntlm_t *) esalt)->user_len = 1;
((netntlm_t *) esalt)->domain_len = 1;
((netntlm_t *) esalt)->srvchall_len = 1;
((netntlm_t *) esalt)->clichall_len = 1;
break;
case 7300: ((rakp_t *) esalt)->salt_len = 32;
break;
case 10400: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 32;
((pdf_t *) esalt)->u_len = 32;
break;
case 10410: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 32;
((pdf_t *) esalt)->u_len = 32;
break;
case 10420: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 32;
((pdf_t *) esalt)->u_len = 32;
break;
case 10500: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 32;
((pdf_t *) esalt)->u_len = 32;
break;
case 10600: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 127;
((pdf_t *) esalt)->u_len = 127;
break;
case 10700: ((pdf_t *) esalt)->id_len = 16;
((pdf_t *) esalt)->o_len = 127;
((pdf_t *) esalt)->u_len = 127;
break;
case 11600: ((seven_zip_t *) esalt)->iv_len = 16;
((seven_zip_t *) esalt)->data_len = 112;
((seven_zip_t *) esalt)->unpack_size = 112;
break;
case 13400: ((keepass_t *) esalt)->version = 2;
break;
case 13500: ((pstoken_t *) esalt)->salt_len = 113;
break;
case 13600: ((zip2_t *) esalt)->salt_len = 16;
((zip2_t *) esalt)->data_len = 32;
((zip2_t *) esalt)->mode = 3;
break;
}
}
// set default iterations
switch (hashconfig->hash_mode)
{
case 400: salt->salt_iter = ROUNDS_PHPASS;
break;
case 500: salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 501: salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 1600: salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 1800: salt->salt_iter = ROUNDS_SHA512CRYPT;
break;
case 2100: salt->salt_iter = ROUNDS_DCC2;
break;
case 2500: salt->salt_iter = ROUNDS_WPA2;
break;
case 3200: salt->salt_iter = ROUNDS_BCRYPT;
break;
case 5200: salt->salt_iter = ROUNDS_PSAFE3;
break;
case 5800: salt->salt_iter = ROUNDS_ANDROIDPIN - 1;
break;
case 6211: salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6212: salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6213: salt->salt_iter = ROUNDS_TRUECRYPT_2K;
break;
case 6221: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6222: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6223: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6231: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6232: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6233: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6241: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6242: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6243: salt->salt_iter = ROUNDS_TRUECRYPT_1K;
break;
case 6300: salt->salt_iter = ROUNDS_MD5CRYPT;
break;
case 6400: salt->salt_iter = ROUNDS_SHA256AIX;
break;
case 6500: salt->salt_iter = ROUNDS_SHA512AIX;
break;
case 6700: salt->salt_iter = ROUNDS_SHA1AIX;
break;
case 6600: salt->salt_iter = ROUNDS_AGILEKEY;
break;
case 6800: salt->salt_iter = ROUNDS_LASTPASS;
break;
case 7100: salt->salt_iter = ROUNDS_SHA512OSX;
break;
case 7200: salt->salt_iter = ROUNDS_GRUB;
break;
case 7400: salt->salt_iter = ROUNDS_SHA256CRYPT;
break;
case 7900: salt->salt_iter = ROUNDS_DRUPAL7;
break;
case 8200: salt->salt_iter = ROUNDS_CLOUDKEY;
break;
case 8300: salt->salt_iter = ROUNDS_NSEC3;
break;
case 8800: salt->salt_iter = ROUNDS_ANDROIDFDE;
break;
case 8900: salt->salt_iter = 1;
break;
case 9000: salt->salt_iter = ROUNDS_PSAFE2;
break;
case 9100: salt->salt_iter = ROUNDS_LOTUS8;
break;
case 9200: salt->salt_iter = ROUNDS_CISCO8;
break;
case 9300: salt->salt_iter = 1;
break;
case 9400: salt->salt_iter = ROUNDS_OFFICE2007;
break;
case 9500: salt->salt_iter = ROUNDS_OFFICE2010;
break;
case 9600: salt->salt_iter = ROUNDS_OFFICE2013;
break;
case 10000: salt->salt_iter = ROUNDS_DJANGOPBKDF2;
break;
case 10300: salt->salt_iter = ROUNDS_SAPH_SHA1 - 1;
break;
case 10500: salt->salt_iter = ROUNDS_PDF14;
break;
case 10700: salt->salt_iter = ROUNDS_PDF17L8;
break;
case 10900: salt->salt_iter = ROUNDS_PBKDF2_SHA256 - 1;
break;
case 11300: salt->salt_iter = ROUNDS_BITCOIN_WALLET - 1;
break;
case 11600: salt->salt_iter = ROUNDS_SEVEN_ZIP;
break;
case 11900: salt->salt_iter = ROUNDS_PBKDF2_MD5 - 1;
break;
case 12000: salt->salt_iter = ROUNDS_PBKDF2_SHA1 - 1;
break;
case 12100: salt->salt_iter = ROUNDS_PBKDF2_SHA512 - 1;
break;
case 12200: salt->salt_iter = ROUNDS_ECRYPTFS - 1;
break;
case 12300: salt->salt_iter = ROUNDS_ORACLET - 1;
break;
case 12400: salt->salt_iter = ROUNDS_BSDICRYPT - 1;
break;
case 12500: salt->salt_iter = ROUNDS_RAR3;
break;
case 12700: salt->salt_iter = ROUNDS_MYWALLET;
break;
case 12800: salt->salt_iter = ROUNDS_MS_DRSR - 1;
break;
case 12900: salt->salt_iter = ROUNDS_ANDROIDFDE_SAMSUNG - 1;
break;
case 13000: salt->salt_iter = ROUNDS_RAR5 - 1;
break;
case 13200: salt->salt_iter = ROUNDS_AXCRYPT;
break;
case 13400: salt->salt_iter = ROUNDS_KEEPASS;
break;
case 13600: salt->salt_iter = ROUNDS_ZIP2;
break;
case 13711: salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13712: salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13713: salt->salt_iter = ROUNDS_VERACRYPT_655331;
break;
case 13721: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13722: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13723: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13731: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13732: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13733: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13741: salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13742: salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13743: salt->salt_iter = ROUNDS_VERACRYPT_327661;
break;
case 13751: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13752: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13753: salt->salt_iter = ROUNDS_VERACRYPT_500000;
break;
case 13761: salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
case 13762: salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
case 13763: salt->salt_iter = ROUNDS_VERACRYPT_200000;
break;
}
}
char *hashconfig_benchmark_mask (hashconfig_t *hashconfig)
{
char *mask = "?b?b?b?b?b?b?b";
switch (hashconfig->hash_mode)
{
case 12500: mask = "?b?b?b?b?b";
break;
}
return mask;
}

@ -318,6 +318,22 @@ void mp_exec (u64 val, char *buf, cs_t *css, int css_cnt)
}
}
uint mp_get_length (char *mask)
{
uint len = 0;
uint mask_len = strlen (mask);
for (uint i = 0; i < mask_len; i++)
{
if (mask[i] == '?') i++;
len++;
}
return len;
}
void mp_cut_at (char *mask, uint max)
{
uint i;

Loading…
Cancel
Save