mirror of
https://github.com/hashcat/hashcat
synced 2024-11-20 23:27:31 +01:00
Merge branch 'master' into fix_31400
This commit is contained in:
commit
3109ebc2c7
@ -38,7 +38,7 @@ typedef struct md5_double_salt
|
|||||||
|
|
||||||
} md5_double_salt_t;
|
} md5_double_salt_t;
|
||||||
|
|
||||||
KERNEL_FQ void m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t))
|
KERNEL_FQ void m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t))
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* modifier
|
* modifier
|
||||||
@ -180,7 +180,7 @@ KERNEL_FQ void m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KERNEL_FQ void m31700_sxx (KERN_ATTR_ESALT (md5_double_salt_t))
|
KERNEL_FQ void m31700_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t))
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* modifier
|
* modifier
|
||||||
|
@ -52,13 +52,17 @@
|
|||||||
- Skip chained generated rules that exceed the maximum number of function calls
|
- Skip chained generated rules that exceed the maximum number of function calls
|
||||||
- Fixed incorrect plaintext check for 25400 and 26610. Increased plaintext check to 32 bytes to prevent false positives.
|
- Fixed incorrect plaintext check for 25400 and 26610. Increased plaintext check to 32 bytes to prevent false positives.
|
||||||
- Fixed bug in --stdout that caused certain rules to malfunction
|
- Fixed bug in --stdout that caused certain rules to malfunction
|
||||||
|
- Fixed bug in 18400 module_hash_encode
|
||||||
|
- Fixed bug in 26900 module_hash_encode
|
||||||
- Fixed bug in grep out-of-memory workaround on Unit Test
|
- Fixed bug in grep out-of-memory workaround on Unit Test
|
||||||
- Fixed bug in input_tokenizer when TOKEN_ATTR_FIXED_LENGTH is used and refactor modules
|
- Fixed bug in input_tokenizer when TOKEN_ATTR_FIXED_LENGTH is used and refactor modules
|
||||||
- Fixed build failed for 18400 with Apple Metal
|
- Fixed build failed for 18400 with Apple Metal
|
||||||
- Fixed build failed for 18600 with Apple Metal
|
- Fixed build failed for 18600 with Apple Metal
|
||||||
|
- Fixed build failed for 31700 with Apple Metal
|
||||||
- Fixed display problem of the "Optimizers applied" list for algorithms using OPTI_TYPE_SLOW_HASH_SIMD_INIT2 and/or OPTI_TYPE_SLOW_HASH_SIMD_LOOP2
|
- Fixed display problem of the "Optimizers applied" list for algorithms using OPTI_TYPE_SLOW_HASH_SIMD_INIT2 and/or OPTI_TYPE_SLOW_HASH_SIMD_LOOP2
|
||||||
- Fixed incompatible pointer types (salt1 and salt2 buf) in 31700 a3 kernel
|
- Fixed incompatible pointer types (salt1 and salt2 buf) in 31700 a3 kernel
|
||||||
- Fixed incompatible pointer types (salt1 and salt2 buf) in 3730 a3 kernel
|
- Fixed incompatible pointer types (salt1 and salt2 buf) in 3730 a3 kernel
|
||||||
|
- Fixed minimum password length in module of hash-mode 28200
|
||||||
- Handle signed/unsigned PDF permission P value for all PDF hash-modes
|
- Handle signed/unsigned PDF permission P value for all PDF hash-modes
|
||||||
- Fixed minimum password length in module of hash-mode 29800
|
- Fixed minimum password length in module of hash-mode 29800
|
||||||
- Fixed buffer overflow on module_26600.c / module_hash_encode()
|
- Fixed buffer overflow on module_26600.c / module_hash_encode()
|
||||||
@ -80,6 +84,8 @@
|
|||||||
- User Options: Added error message when mixing --username and --show to warn users of exponential delay
|
- User Options: Added error message when mixing --username and --show to warn users of exponential delay
|
||||||
- MetaMask: update extraction tool to support MetaMask Mobile wallets
|
- MetaMask: update extraction tool to support MetaMask Mobile wallets
|
||||||
- SecureCRT MasterPassphrase v2: update module, pure kernels and test unit. Add optimized kernels.
|
- SecureCRT MasterPassphrase v2: update module, pure kernels and test unit. Add optimized kernels.
|
||||||
|
- Metal Backend: added workaround to prevent 'Infinite Loop' bug when build kernels
|
||||||
|
- User Options: added --metal-compiler-runtime option
|
||||||
|
|
||||||
* changes v6.2.5 -> v6.2.6
|
* changes v6.2.5 -> v6.2.6
|
||||||
|
|
||||||
|
@ -674,6 +674,7 @@ typedef enum user_options_defaults
|
|||||||
MARKOV_DISABLE = false,
|
MARKOV_DISABLE = false,
|
||||||
MARKOV_INVERSE = false,
|
MARKOV_INVERSE = false,
|
||||||
MARKOV_THRESHOLD = 0,
|
MARKOV_THRESHOLD = 0,
|
||||||
|
METAL_COMPILER_RUNTIME = 120,
|
||||||
NONCE_ERROR_CORRECTIONS = 8,
|
NONCE_ERROR_CORRECTIONS = 8,
|
||||||
BACKEND_IGNORE_CUDA = false,
|
BACKEND_IGNORE_CUDA = false,
|
||||||
BACKEND_IGNORE_HIP = false,
|
BACKEND_IGNORE_HIP = false,
|
||||||
@ -793,56 +794,57 @@ typedef enum user_options_map
|
|||||||
IDX_MARKOV_HCSTAT2 = 0xff2d,
|
IDX_MARKOV_HCSTAT2 = 0xff2d,
|
||||||
IDX_MARKOV_INVERSE = 0xff2e,
|
IDX_MARKOV_INVERSE = 0xff2e,
|
||||||
IDX_MARKOV_THRESHOLD = 't',
|
IDX_MARKOV_THRESHOLD = 't',
|
||||||
IDX_NONCE_ERROR_CORRECTIONS = 0xff2f,
|
IDX_METAL_COMPILER_RUNTIME = 0xff2f,
|
||||||
|
IDX_NONCE_ERROR_CORRECTIONS = 0xff30,
|
||||||
IDX_OPENCL_DEVICE_TYPES = 'D',
|
IDX_OPENCL_DEVICE_TYPES = 'D',
|
||||||
IDX_OPTIMIZED_KERNEL_ENABLE = 'O',
|
IDX_OPTIMIZED_KERNEL_ENABLE = 'O',
|
||||||
IDX_MULTIPLY_ACCEL_DISABLE = 'M',
|
IDX_MULTIPLY_ACCEL_DISABLE = 'M',
|
||||||
IDX_OUTFILE_AUTOHEX_DISABLE = 0xff30,
|
IDX_OUTFILE_AUTOHEX_DISABLE = 0xff31,
|
||||||
IDX_OUTFILE_CHECK_DIR = 0xff31,
|
IDX_OUTFILE_CHECK_DIR = 0xff32,
|
||||||
IDX_OUTFILE_CHECK_TIMER = 0xff32,
|
IDX_OUTFILE_CHECK_TIMER = 0xff33,
|
||||||
IDX_OUTFILE_FORMAT = 0xff33,
|
IDX_OUTFILE_FORMAT = 0xff34,
|
||||||
IDX_OUTFILE = 'o',
|
IDX_OUTFILE = 'o',
|
||||||
IDX_POTFILE_DISABLE = 0xff34,
|
IDX_POTFILE_DISABLE = 0xff35,
|
||||||
IDX_POTFILE_PATH = 0xff35,
|
IDX_POTFILE_PATH = 0xff36,
|
||||||
IDX_PROGRESS_ONLY = 0xff36,
|
IDX_PROGRESS_ONLY = 0xff37,
|
||||||
IDX_QUIET = 0xff37,
|
IDX_QUIET = 0xff38,
|
||||||
IDX_REMOVE = 0xff38,
|
IDX_REMOVE = 0xff39,
|
||||||
IDX_REMOVE_TIMER = 0xff39,
|
IDX_REMOVE_TIMER = 0xff3a,
|
||||||
IDX_RESTORE = 0xff3a,
|
IDX_RESTORE = 0xff3b,
|
||||||
IDX_RESTORE_DISABLE = 0xff3b,
|
IDX_RESTORE_DISABLE = 0xff3c,
|
||||||
IDX_RESTORE_FILE_PATH = 0xff3c,
|
IDX_RESTORE_FILE_PATH = 0xff3d,
|
||||||
IDX_RP_FILE = 'r',
|
IDX_RP_FILE = 'r',
|
||||||
IDX_RP_GEN_FUNC_MAX = 0xff3d,
|
IDX_RP_GEN_FUNC_MAX = 0xff3e,
|
||||||
IDX_RP_GEN_FUNC_MIN = 0xff3e,
|
IDX_RP_GEN_FUNC_MIN = 0xff3f,
|
||||||
IDX_RP_GEN_FUNC_SEL = 0xff3f,
|
IDX_RP_GEN_FUNC_SEL = 0xff40,
|
||||||
IDX_RP_GEN = 'g',
|
IDX_RP_GEN = 'g',
|
||||||
IDX_RP_GEN_SEED = 0xff40,
|
IDX_RP_GEN_SEED = 0xff41,
|
||||||
IDX_RULE_BUF_L = 'j',
|
IDX_RULE_BUF_L = 'j',
|
||||||
IDX_RULE_BUF_R = 'k',
|
IDX_RULE_BUF_R = 'k',
|
||||||
IDX_RUNTIME = 0xff41,
|
IDX_RUNTIME = 0xff42,
|
||||||
IDX_SCRYPT_TMTO = 0xff42,
|
IDX_SCRYPT_TMTO = 0xff43,
|
||||||
IDX_SEGMENT_SIZE = 'c',
|
IDX_SEGMENT_SIZE = 'c',
|
||||||
IDX_SELF_TEST_DISABLE = 0xff43,
|
IDX_SELF_TEST_DISABLE = 0xff44,
|
||||||
IDX_SEPARATOR = 'p',
|
IDX_SEPARATOR = 'p',
|
||||||
IDX_SESSION = 0xff44,
|
IDX_SESSION = 0xff45,
|
||||||
IDX_SHOW = 0xff45,
|
IDX_SHOW = 0xff46,
|
||||||
IDX_SKIP = 's',
|
IDX_SKIP = 's',
|
||||||
IDX_SLOW_CANDIDATES = 'S',
|
IDX_SLOW_CANDIDATES = 'S',
|
||||||
IDX_SPEED_ONLY = 0xff46,
|
IDX_SPEED_ONLY = 0xff47,
|
||||||
IDX_SPIN_DAMP = 0xff47,
|
IDX_SPIN_DAMP = 0xff48,
|
||||||
IDX_STATUS = 0xff48,
|
IDX_STATUS = 0xff49,
|
||||||
IDX_STATUS_JSON = 0xff49,
|
IDX_STATUS_JSON = 0xff4a,
|
||||||
IDX_STATUS_TIMER = 0xff4a,
|
IDX_STATUS_TIMER = 0xff4b,
|
||||||
IDX_STDOUT_FLAG = 0xff4b,
|
IDX_STDOUT_FLAG = 0xff4c,
|
||||||
IDX_STDIN_TIMEOUT_ABORT = 0xff4c,
|
IDX_STDIN_TIMEOUT_ABORT = 0xff4d,
|
||||||
IDX_TRUECRYPT_KEYFILES = 0xff4d,
|
IDX_TRUECRYPT_KEYFILES = 0xff4e,
|
||||||
IDX_USERNAME = 0xff4e,
|
IDX_USERNAME = 0xff4f,
|
||||||
IDX_VERACRYPT_KEYFILES = 0xff4f,
|
IDX_VERACRYPT_KEYFILES = 0xff50,
|
||||||
IDX_VERACRYPT_PIM_START = 0xff50,
|
IDX_VERACRYPT_PIM_START = 0xff51,
|
||||||
IDX_VERACRYPT_PIM_STOP = 0xff51,
|
IDX_VERACRYPT_PIM_STOP = 0xff52,
|
||||||
IDX_VERSION_LOWER = 'v',
|
IDX_VERSION_LOWER = 'v',
|
||||||
IDX_VERSION = 'V',
|
IDX_VERSION = 'V',
|
||||||
IDX_WORDLIST_AUTOHEX_DISABLE = 0xff52,
|
IDX_WORDLIST_AUTOHEX_DISABLE = 0xff53,
|
||||||
IDX_WORKLOAD_PROFILE = 'w',
|
IDX_WORKLOAD_PROFILE = 'w',
|
||||||
|
|
||||||
} user_options_map_t;
|
} user_options_map_t;
|
||||||
@ -2311,6 +2313,7 @@ typedef struct user_options
|
|||||||
bool remove_timer_chgd;
|
bool remove_timer_chgd;
|
||||||
bool rp_gen_seed_chgd;
|
bool rp_gen_seed_chgd;
|
||||||
bool runtime_chgd;
|
bool runtime_chgd;
|
||||||
|
bool metal_compiler_runtime_chgd;
|
||||||
bool segment_size_chgd;
|
bool segment_size_chgd;
|
||||||
bool workload_profile_chgd;
|
bool workload_profile_chgd;
|
||||||
bool skip_chgd;
|
bool skip_chgd;
|
||||||
@ -2435,6 +2438,7 @@ typedef struct user_options
|
|||||||
u32 rp_gen_func_min;
|
u32 rp_gen_func_min;
|
||||||
u32 rp_gen_seed;
|
u32 rp_gen_seed;
|
||||||
u32 runtime;
|
u32 runtime;
|
||||||
|
u32 metal_compiler_runtime;
|
||||||
u32 scrypt_tmto;
|
u32 scrypt_tmto;
|
||||||
u32 segment_size;
|
u32 segment_size;
|
||||||
u32 status_timer;
|
u32 status_timer;
|
||||||
|
@ -681,7 +681,8 @@ int hc_mtlCreateCommandQueue (void *hashcat_ctx, mtl_device_id metal_device, mtl
|
|||||||
|
|
||||||
int hc_mtlCreateKernel (void *hashcat_ctx, mtl_device_id metal_device, mtl_library metal_library, const char *func_name, mtl_function *metal_function, mtl_pipeline *metal_pipeline)
|
int hc_mtlCreateKernel (void *hashcat_ctx, mtl_device_id metal_device, mtl_library metal_library, const char *func_name, mtl_function *metal_function, mtl_pipeline *metal_pipeline)
|
||||||
{
|
{
|
||||||
backend_ctx_t *backend_ctx = ((hashcat_ctx_t *) hashcat_ctx)->backend_ctx;
|
backend_ctx_t *backend_ctx = ((hashcat_ctx_t *) hashcat_ctx)->backend_ctx;
|
||||||
|
user_options_t *user_options = ((hashcat_ctx_t *) hashcat_ctx)->user_options;
|
||||||
|
|
||||||
MTL_PTR *mtl = (MTL_PTR *) backend_ctx->mtl;
|
MTL_PTR *mtl = (MTL_PTR *) backend_ctx->mtl;
|
||||||
|
|
||||||
@ -708,7 +709,7 @@ int hc_mtlCreateKernel (void *hashcat_ctx, mtl_device_id metal_device, mtl_libra
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSError *error = nil;
|
__block NSError *error = nil;
|
||||||
|
|
||||||
NSString *f_name = [NSString stringWithCString: func_name encoding: NSUTF8StringEncoding];
|
NSString *f_name = [NSString stringWithCString: func_name encoding: NSUTF8StringEncoding];
|
||||||
|
|
||||||
@ -721,6 +722,9 @@ int hc_mtlCreateKernel (void *hashcat_ctx, mtl_device_id metal_device, mtl_libra
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// workaround for MTLCompilerService 'Infinite Loop' bug
|
||||||
|
|
||||||
|
/*
|
||||||
mtl_pipeline mtl_pipe = [metal_device newComputePipelineStateWithFunction: mtl_func error: &error];
|
mtl_pipeline mtl_pipe = [metal_device newComputePipelineStateWithFunction: mtl_func error: &error];
|
||||||
|
|
||||||
if (error != nil)
|
if (error != nil)
|
||||||
@ -729,6 +733,46 @@ int hc_mtlCreateKernel (void *hashcat_ctx, mtl_device_id metal_device, mtl_libra
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
error = nil;
|
||||||
|
|
||||||
|
__block mtl_pipeline mtl_pipe;
|
||||||
|
|
||||||
|
dispatch_group_t group = dispatch_group_create ();
|
||||||
|
dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
||||||
|
|
||||||
|
// if no user-defined runtime, set to METAL_COMPILER_RUNTIME
|
||||||
|
long timeout = (user_options->metal_compiler_runtime > 0) ? user_options->metal_compiler_runtime : METAL_COMPILER_RUNTIME;
|
||||||
|
|
||||||
|
dispatch_time_t when = dispatch_time (DISPATCH_TIME_NOW,NSEC_PER_SEC * timeout);
|
||||||
|
|
||||||
|
__block int rc_async_err = 0;
|
||||||
|
|
||||||
|
dispatch_group_async (group, queue, ^(void)
|
||||||
|
{
|
||||||
|
mtl_pipe = [metal_device newComputePipelineStateWithFunction: mtl_func error: &error];
|
||||||
|
|
||||||
|
if (error != nil)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "%s(): failed to create '%s' pipeline, %s", __func__, func_name, [[error localizedDescription] UTF8String]);
|
||||||
|
|
||||||
|
rc_async_err = -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
long rc_queue = dispatch_group_wait (group, when);
|
||||||
|
|
||||||
|
dispatch_release (group);
|
||||||
|
|
||||||
|
if (rc_async_err != 0) return -1;
|
||||||
|
|
||||||
|
if (rc_queue != 0)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "%s(): failed to create '%s' pipeline, timeout reached (status %ld)", __func__, func_name, rc_queue);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (mtl_pipe == nil)
|
if (mtl_pipe == nil)
|
||||||
{
|
{
|
||||||
|
@ -248,15 +248,13 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
|
|
||||||
// ct
|
// ct
|
||||||
|
|
||||||
u32 ct_buf[256];
|
u8 ct_buf[(256 * 4 * 2) + 1];
|
||||||
|
|
||||||
for (int i = 0; i < 256; i++) ct_buf[i] = byte_swap_32 (odf12->encrypted_data[i]);
|
memset (ct_buf, 0, sizeof (ct_buf));
|
||||||
|
|
||||||
u8 ct_buf8[(256 * 4 * 2) + 1];
|
const int ct_len = hex_encode ((const u8 *) odf12->encrypted_data, odf12->encrypted_len, ct_buf);
|
||||||
|
|
||||||
const int ct_len = hex_encode ((const u8 *) ct_buf, odf12->encrypted_len, ct_buf8);
|
ct_buf[ct_len] = 0;
|
||||||
|
|
||||||
ct_buf8[ct_len] = 0;
|
|
||||||
|
|
||||||
const int out_len = snprintf (line_buf, line_size, "%s*1*1*%u*32*%08x%08x%08x%08x%08x%08x%08x%08x*16*%08x%08x%08x%08x*16*%08x%08x%08x%08x*0*%s",
|
const int out_len = snprintf (line_buf, line_size, "%s*1*1*%u*32*%08x%08x%08x%08x%08x%08x%08x%08x*16*%08x%08x%08x%08x*16*%08x%08x%08x%08x*0*%s",
|
||||||
SIGNATURE_ODF,
|
SIGNATURE_ODF,
|
||||||
@ -277,7 +275,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
byte_swap_32 (salt->salt_buf[1]),
|
byte_swap_32 (salt->salt_buf[1]),
|
||||||
byte_swap_32 (salt->salt_buf[2]),
|
byte_swap_32 (salt->salt_buf[2]),
|
||||||
byte_swap_32 (salt->salt_buf[3]),
|
byte_swap_32 (salt->salt_buf[3]),
|
||||||
(char *) ct_buf8);
|
(char *) ct_buf);
|
||||||
|
|
||||||
return out_len;
|
return out_len;
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,19 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
|
|
||||||
out_len++;
|
out_len++;
|
||||||
|
|
||||||
out_len += hex_encode ((u8 *) snmpv3->engineID_buf, snmpv3->engineID_len, out_buf + out_len);
|
// remove zero padding from snmpv3->engineID_buf
|
||||||
|
|
||||||
|
u8 *engineID_buf_tmp = (u8 *) snmpv3->engineID_buf;
|
||||||
|
|
||||||
|
u32 engineID_len = snmpv3->engineID_len;
|
||||||
|
|
||||||
|
while (engineID_buf_tmp[engineID_len] == 0x00) engineID_len--;
|
||||||
|
|
||||||
|
engineID_len++;
|
||||||
|
|
||||||
|
// append to output
|
||||||
|
|
||||||
|
out_len += hex_encode ((u8 *) snmpv3->engineID_buf, engineID_len, out_buf + out_len);
|
||||||
|
|
||||||
out_buf[out_len] = '$';
|
out_buf[out_len] = '$';
|
||||||
|
|
||||||
|
@ -131,6 +131,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
|
|
||||||
hc_token_t token;
|
hc_token_t token;
|
||||||
|
|
||||||
|
memset (&token, 0, sizeof (hc_token_t));
|
||||||
|
|
||||||
token.token_cnt = 4;
|
token.token_cnt = 4;
|
||||||
|
|
||||||
token.signatures_cnt = 1;
|
token.signatures_cnt = 1;
|
||||||
@ -141,21 +143,18 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
||||||
|
|
||||||
token.sep[1] = '$';
|
token.sep[1] = '$';
|
||||||
token.len_min[1] = 24;
|
token.len[1] = 24;
|
||||||
token.len_max[1] = 24;
|
token.attr[1] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
|
|
||||||
| TOKEN_ATTR_VERIFY_BASE64A;
|
| TOKEN_ATTR_VERIFY_BASE64A;
|
||||||
|
|
||||||
token.sep[2] = '$';
|
token.sep[2] = '$';
|
||||||
token.len_min[2] = 32;
|
token.len[2] = 32;
|
||||||
token.len_max[2] = 32;
|
token.attr[2] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
|
||||||
| TOKEN_ATTR_VERIFY_HEX;
|
| TOKEN_ATTR_VERIFY_HEX;
|
||||||
|
|
||||||
token.sep[3] = '$';
|
token.sep[3] = '$';
|
||||||
token.len_min[3] = 24;
|
token.len[3] = 24;
|
||||||
token.len_max[3] = 24;
|
token.attr[3] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
|
||||||
| TOKEN_ATTR_VERIFY_BASE64A;
|
| TOKEN_ATTR_VERIFY_BASE64A;
|
||||||
|
|
||||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||||
|
@ -624,7 +624,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
|
|||||||
|
|
||||||
salt_t *salt_buf = &hashes->st_salts_buf[salt_pos];
|
salt_t *salt_buf = &hashes->st_salts_buf[salt_pos];
|
||||||
|
|
||||||
const u32 salt_repeats = hashes->salts_buf[salt_pos].salt_repeats;
|
const u32 salt_repeats = salt_buf->salt_repeats;
|
||||||
|
|
||||||
for (u32 salt_repeat = 0; salt_repeat <= salt_repeats; salt_repeat++)
|
for (u32 salt_repeat = 0; salt_repeat <= salt_repeats; salt_repeat++)
|
||||||
{
|
{
|
||||||
|
@ -634,6 +634,37 @@ void compress_terminal_line_length (char *out_buf, const size_t keep_from_beginn
|
|||||||
*ptr1 = 0;
|
*ptr1 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void json_encode (char *text, char *escaped)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Based on https://www.freeformatter.com/json-escape.html, below these 7 different chars
|
||||||
|
* are getting escaped before being printed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
size_t len = strlen (text);
|
||||||
|
unsigned long i, j;
|
||||||
|
|
||||||
|
for (i = 0, j = 0; i < len; i++, j++)
|
||||||
|
{
|
||||||
|
char c = text[i];
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\b': c = 'b'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '\t': c = 't'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '\n': c = 'n'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '\f': c = 'f'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '\r': c = 'r'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '\\': c = '\\'; escaped[j] = '\\'; j++; break;
|
||||||
|
case '"': c = '"'; escaped[j] = '\\'; j++; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
escaped[j] = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
escaped[j] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void hash_info_single_json (hashcat_ctx_t *hashcat_ctx, user_options_extra_t *user_options_extra)
|
void hash_info_single_json (hashcat_ctx_t *hashcat_ctx, user_options_extra_t *user_options_extra)
|
||||||
{
|
{
|
||||||
if (hashconfig_init (hashcat_ctx) == 0)
|
if (hashconfig_init (hashcat_ctx) == 0)
|
||||||
@ -692,14 +723,20 @@ void hash_info_single_json (hashcat_ctx_t *hashcat_ctx, user_options_extra_t *us
|
|||||||
{
|
{
|
||||||
printf ("\"example_hash_format\": \"%s\", ", "hex-encoded (binary file only)");
|
printf ("\"example_hash_format\": \"%s\", ", "hex-encoded (binary file only)");
|
||||||
}
|
}
|
||||||
printf ("\"example_hash\": \"%s\", ", hashconfig->st_hash);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf ("\"example_hash_format\": \"%s\", ", "plain");
|
printf ("\"example_hash_format\": \"%s\", ", "plain");
|
||||||
printf ("\"example_hash\": \"%s\", ", hashconfig->st_hash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *example_hash_json_encoded = (char *) hcmalloc (strlen (hashconfig->st_hash) * 2);
|
||||||
|
|
||||||
|
json_encode ((char *)hashconfig->st_hash, example_hash_json_encoded);
|
||||||
|
|
||||||
|
printf ("\"example_hash\": \"%s\", ", example_hash_json_encoded);
|
||||||
|
|
||||||
|
hcfree (example_hash_json_encoded);
|
||||||
|
|
||||||
if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options_extra->separator, false))
|
if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options_extra->separator, false))
|
||||||
{
|
{
|
||||||
char *tmp_buf = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
char *tmp_buf = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
||||||
@ -1760,37 +1797,6 @@ void status_display_machine_readable (hashcat_ctx_t *hashcat_ctx)
|
|||||||
hcfree (hashcat_status);
|
hcfree (hashcat_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void json_encode (char *text, char *escaped)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Based on https://www.freeformatter.com/json-escape.html, below these 7 different chars
|
|
||||||
* are getting escaped before being printed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
size_t len = strlen (text);
|
|
||||||
unsigned long i, j;
|
|
||||||
|
|
||||||
for (i = 0, j = 0; i < len; i++, j++)
|
|
||||||
{
|
|
||||||
char c = text[i];
|
|
||||||
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\b': c = 'b'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '\t': c = 't'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '\n': c = 'n'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '\f': c = 'f'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '\r': c = 'r'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '\\': c = '\\'; escaped[j] = '\\'; j++; break;
|
|
||||||
case '"': c = '"'; escaped[j] = '\\'; j++; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
escaped[j] = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
escaped[j] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void status_display_status_json (hashcat_ctx_t *hashcat_ctx)
|
void status_display_status_json (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
const status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
const status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
||||||
|
@ -49,6 +49,7 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] =
|
|||||||
" --markov-classic | | Enables classic markov-chains, no per-position |",
|
" --markov-classic | | Enables classic markov-chains, no per-position |",
|
||||||
" --markov-inverse | | Enables inverse markov-chains, no per-position |",
|
" --markov-inverse | | Enables inverse markov-chains, no per-position |",
|
||||||
" -t, --markov-threshold | Num | Threshold X when to stop accepting new markov-chains | -t 50",
|
" -t, --markov-threshold | Num | Threshold X when to stop accepting new markov-chains | -t 50",
|
||||||
|
" --metal-compiler-runtime | Num | Abort Metal kernel build after X seconds of runtime | --metal-compiler-runtime=180",
|
||||||
" --runtime | Num | Abort session after X seconds of runtime | --runtime=10",
|
" --runtime | Num | Abort session after X seconds of runtime | --runtime=10",
|
||||||
" --session | Str | Define specific session name | --session=mysession",
|
" --session | Str | Define specific session name | --session=mysession",
|
||||||
" --restore | | Restore session from --session |",
|
" --restore | | Restore session from --session |",
|
||||||
|
@ -94,6 +94,7 @@ static const struct option long_options[] =
|
|||||||
{"markov-hcstat2", required_argument, NULL, IDX_MARKOV_HCSTAT2},
|
{"markov-hcstat2", required_argument, NULL, IDX_MARKOV_HCSTAT2},
|
||||||
{"markov-inverse", no_argument, NULL, IDX_MARKOV_INVERSE},
|
{"markov-inverse", no_argument, NULL, IDX_MARKOV_INVERSE},
|
||||||
{"markov-threshold", required_argument, NULL, IDX_MARKOV_THRESHOLD},
|
{"markov-threshold", required_argument, NULL, IDX_MARKOV_THRESHOLD},
|
||||||
|
{"metal-compiler-runtime", required_argument, NULL, IDX_METAL_COMPILER_RUNTIME},
|
||||||
{"nonce-error-corrections", required_argument, NULL, IDX_NONCE_ERROR_CORRECTIONS},
|
{"nonce-error-corrections", required_argument, NULL, IDX_NONCE_ERROR_CORRECTIONS},
|
||||||
{"opencl-device-types", required_argument, NULL, IDX_OPENCL_DEVICE_TYPES},
|
{"opencl-device-types", required_argument, NULL, IDX_OPENCL_DEVICE_TYPES},
|
||||||
{"optimized-kernel-enable", no_argument, NULL, IDX_OPTIMIZED_KERNEL_ENABLE},
|
{"optimized-kernel-enable", no_argument, NULL, IDX_OPTIMIZED_KERNEL_ENABLE},
|
||||||
@ -236,6 +237,7 @@ int user_options_init (hashcat_ctx_t *hashcat_ctx)
|
|||||||
user_options->markov_hcstat2 = NULL;
|
user_options->markov_hcstat2 = NULL;
|
||||||
user_options->markov_inverse = MARKOV_INVERSE;
|
user_options->markov_inverse = MARKOV_INVERSE;
|
||||||
user_options->markov_threshold = MARKOV_THRESHOLD;
|
user_options->markov_threshold = MARKOV_THRESHOLD;
|
||||||
|
user_options->metal_compiler_runtime = METAL_COMPILER_RUNTIME;
|
||||||
user_options->nonce_error_corrections = NONCE_ERROR_CORRECTIONS;
|
user_options->nonce_error_corrections = NONCE_ERROR_CORRECTIONS;
|
||||||
user_options->opencl_device_types = NULL;
|
user_options->opencl_device_types = NULL;
|
||||||
user_options->optimized_kernel_enable = OPTIMIZED_KERNEL_ENABLE;
|
user_options->optimized_kernel_enable = OPTIMIZED_KERNEL_ENABLE;
|
||||||
@ -330,6 +332,7 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
|||||||
case IDX_STATUS_TIMER:
|
case IDX_STATUS_TIMER:
|
||||||
case IDX_HASH_MODE:
|
case IDX_HASH_MODE:
|
||||||
case IDX_RUNTIME:
|
case IDX_RUNTIME:
|
||||||
|
case IDX_METAL_COMPILER_RUNTIME:
|
||||||
case IDX_ATTACK_MODE:
|
case IDX_ATTACK_MODE:
|
||||||
case IDX_RP_GEN:
|
case IDX_RP_GEN:
|
||||||
case IDX_RP_GEN_FUNC_MIN:
|
case IDX_RP_GEN_FUNC_MIN:
|
||||||
@ -436,6 +439,8 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
|||||||
user_options->hash_mode_chgd = true; break;
|
user_options->hash_mode_chgd = true; break;
|
||||||
case IDX_RUNTIME: user_options->runtime = hc_strtoul (optarg, NULL, 10);
|
case IDX_RUNTIME: user_options->runtime = hc_strtoul (optarg, NULL, 10);
|
||||||
user_options->runtime_chgd = true; break;
|
user_options->runtime_chgd = true; break;
|
||||||
|
case IDX_METAL_COMPILER_RUNTIME: user_options->metal_compiler_runtime = hc_strtoul (optarg, NULL, 10);
|
||||||
|
user_options->metal_compiler_runtime_chgd = true; break;
|
||||||
case IDX_ATTACK_MODE: user_options->attack_mode = hc_strtoul (optarg, NULL, 10);
|
case IDX_ATTACK_MODE: user_options->attack_mode = hc_strtoul (optarg, NULL, 10);
|
||||||
user_options->attack_mode_chgd = true; break;
|
user_options->attack_mode_chgd = true; break;
|
||||||
case IDX_RP_FILE: user_options->rp_files[user_options->rp_files_cnt++] = optarg; break;
|
case IDX_RP_FILE: user_options->rp_files[user_options->rp_files_cnt++] = optarg; break;
|
||||||
@ -732,6 +737,15 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --metal-compiler-runtime is really used only on Apple
|
||||||
|
|
||||||
|
if (user_options->metal_compiler_runtime_chgd == true && user_options->metal_compiler_runtime == 0)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "Invalid --metal-compiler-runtime value specified (must be > 0).");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (user_options->limit_chgd == true && user_options->loopback == true)
|
if (user_options->limit_chgd == true && user_options->loopback == true)
|
||||||
{
|
{
|
||||||
event_log_error (hashcat_ctx, "Combining --limit with --loopback is not allowed.");
|
event_log_error (hashcat_ctx, "Combining --limit with --loopback is not allowed.");
|
||||||
@ -3204,6 +3218,7 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx)
|
|||||||
logfile_top_uint (user_options->markov_disable);
|
logfile_top_uint (user_options->markov_disable);
|
||||||
logfile_top_uint (user_options->markov_inverse);
|
logfile_top_uint (user_options->markov_inverse);
|
||||||
logfile_top_uint (user_options->markov_threshold);
|
logfile_top_uint (user_options->markov_threshold);
|
||||||
|
logfile_top_uint (user_options->metal_compiler_runtime);
|
||||||
logfile_top_uint (user_options->multiply_accel_disable);
|
logfile_top_uint (user_options->multiply_accel_disable);
|
||||||
logfile_top_uint (user_options->backend_info);
|
logfile_top_uint (user_options->backend_info);
|
||||||
logfile_top_uint (user_options->backend_vector_width);
|
logfile_top_uint (user_options->backend_vector_width);
|
||||||
|
@ -12,7 +12,7 @@ use Crypt::AuthEnc::GCM;
|
|||||||
use Crypt::ScryptKDF qw (scrypt_raw);
|
use Crypt::ScryptKDF qw (scrypt_raw);
|
||||||
use MIME::Base64 qw (decode_base64 encode_base64);
|
use MIME::Base64 qw (decode_base64 encode_base64);
|
||||||
|
|
||||||
sub module_constraints { [[0, 256], [64, 64], [-1, -1], [-1, -1], [-1, -1]] }
|
sub module_constraints { [[4, 256], [64, 64], [-1, -1], [-1, -1], [-1, -1]] }
|
||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user