1
mirror of https://github.com/hashcat/hashcat synced 2024-11-13 17:28:58 +01:00

Add support for hooks in selftest function

This commit is contained in:
jsteube 2017-06-14 12:07:33 +02:00
parent 08fc0ec1fb
commit 94a35ae50a
6 changed files with 68 additions and 14 deletions

View File

@ -1875,7 +1875,7 @@ int ethereum_scrypt_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_bu
* hook functions
*/
void seven_zip_hook_func (hc_device_param_t *device_param, hashes_t *hashes, const u32 salt_pos, const u32 pws_cnt);
void seven_zip_hook_func (hc_device_param_t *device_param, void *hook_salts_buf, const u32 salt_pos, const u32 pws_cnt);
/**
* output functions

View File

@ -798,6 +798,7 @@ typedef struct hashes
void *st_digests_buf;
salt_t *st_salts_buf;
void *st_esalts_buf;
void *st_hook_salts_buf;
} hashes_t;

View File

@ -1522,9 +1522,10 @@ int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx)
if (hashconfig->st_hash == NULL) return 0;
void *st_digests_buf = NULL;
salt_t *st_salts_buf = NULL;
void *st_esalts_buf = NULL;
void *st_digests_buf = NULL;
salt_t *st_salts_buf = NULL;
void *st_esalts_buf = NULL;
void *st_hook_salts_buf = NULL;
st_digests_buf = (void *) hccalloc (1, hashconfig->dgst_size);
@ -1535,12 +1536,17 @@ int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx)
st_esalts_buf = (void *) hccalloc (1, hashconfig->esalt_size);
}
if (hashconfig->hook_salt_size)
{
st_hook_salts_buf = (void *) hccalloc (1, hashconfig->hook_salt_size);
}
hash_t hash;
hash.digest = st_digests_buf;
hash.salt = st_salts_buf;
hash.esalt = st_esalts_buf;
hash.hook_salt = NULL;
hash.hook_salt = st_hook_salts_buf;
hash.cracked = 0;
hash.hash_info = NULL;
hash.pw_buf = NULL;
@ -1559,9 +1565,10 @@ int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx)
return -1;
}
hashes->st_digests_buf = st_digests_buf;
hashes->st_salts_buf = st_salts_buf;
hashes->st_esalts_buf = st_esalts_buf;
hashes->st_digests_buf = st_digests_buf;
hashes->st_salts_buf = st_salts_buf;
hashes->st_esalts_buf = st_esalts_buf;
hashes->st_hook_salts_buf = st_hook_salts_buf;
return 0;
}
@ -1611,6 +1618,7 @@ void hashes_destroy (hashcat_ctx_t *hashcat_ctx)
hcfree (hashes->st_digests_buf);
hcfree (hashes->st_salts_buf);
hcfree (hashes->st_esalts_buf);
hcfree (hashes->st_hook_salts_buf);
memset (hashes, 0, sizeof (hashes_t));
}

View File

@ -38,7 +38,6 @@ static char ST_PASS_BIN_10410[] = "\x6a\x8a\xed\xcc\xb7";
* ST_HASH_05200 file-based
* ST_HASH_062xx file-based
* ST_HASH_09000 file-based
* ST_HASH_11600 hooks not working yet
* ST_HASH_137xx file-based
* ST_HASH_14600 file-based
*/
@ -199,7 +198,7 @@ static char ST_HASH_11200[] = "$mysqlna$2576670568531371763643101056213751754328
static char ST_HASH_11300[] = "$bitcoin$96$c265931309b4a59307921cf054b4ec6b6e4554369be79802e94e16477645777d948ae1d375191831efc78e5acd1f0443$16$8017214013543185$200460$96$480008005625057442352316337722323437108374245623701184230273883222762730232857701607167815448714$66$014754433300175043011633205413774877455616682000536368706315333388";
static char ST_HASH_11400[] = "$sip$*72087*1215344588738747***342210558720*737232616*1215344588738747*8867133055*65600****MD5*e9980869221f9d1182c83b0d5e56a7db";
static char ST_HASH_11500[] = "c762de4a:00000000";
//static char ST_HASH_11600[] = "$7z$0$14$0$$11$33363437353138333138300000000000$2365089182$16$12$d00321533b483f54a523f624a5f63269";
static char ST_HASH_11600[] = "$7z$0$14$0$$11$33363437353138333138300000000000$2365089182$16$12$d00321533b483f54a523f624a5f63269";
static char ST_HASH_11700[] = "57e9e50caec93d72e9498c211d6dc4f4d328248b48ecf46ba7abfa874f666e36";
static char ST_HASH_11800[] = "5d5bdba48c8f89ee6c0a0e11023540424283e84902de08013aeeb626e819950bb32842903593a1d2e8f71897ff7fe72e17ac9ba8ce1d1d2f7e9c4359ea63bdc3";
static char ST_HASH_11900[] = "md5:1000:NjAxMDY4MQ==:a00DtIW9hP9voC85fmEA5uVhgdDx67nSPSm9yADHjkI=";
@ -15486,11 +15485,11 @@ int ethereum_scrypt_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf,
* hook functions
*/
void seven_zip_hook_func (hc_device_param_t *device_param, hashes_t *hashes, const u32 salt_pos, const u32 pws_cnt)
void seven_zip_hook_func (hc_device_param_t *device_param, void *hook_salts_buf, const u32 salt_pos, const u32 pws_cnt)
{
seven_zip_hook_t *hook_items = (seven_zip_hook_t *) device_param->hooks_buf;
seven_zip_hook_salt_t *seven_zips = (seven_zip_hook_salt_t *) hashes->hook_salts_buf;
seven_zip_hook_salt_t *seven_zips = (seven_zip_hook_salt_t *) hook_salts_buf;
seven_zip_hook_salt_t *seven_zip = &seven_zips[salt_pos];
u8 data_type = seven_zip->data_type;
@ -23063,7 +23062,7 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx)
hashconfig->dgst_pos1 = 1;
hashconfig->dgst_pos2 = 2;
hashconfig->dgst_pos3 = 3;
hashconfig->st_hash = NULL;
hashconfig->st_hash = ST_HASH_11600;
hashconfig->st_pass = ST_PASS_HASHCAT_PLAIN;
break;

View File

@ -1240,7 +1240,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param,
switch (hashconfig->hash_mode)
{
// for 7z we only need device_param->hooks_buf, but other hooks could use any info from device_param. All of them should/must update hooks_buf
case 11600: seven_zip_hook_func (device_param, hashes, salt_pos, pws_cnt); break;
case 11600: seven_zip_hook_func (device_param, hashes->hook_salts_buf, salt_pos, pws_cnt); break;
}
/*

View File

@ -322,6 +322,23 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
if (CL_rc == -1) return -1;
if (hashconfig->opts_type & OPTS_TYPE_HOOK12)
{
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_12, 1, false, 0);
if (CL_rc == -1) return -1;
CL_rc = hc_clEnqueueReadBuffer (hashcat_ctx, device_param->command_queue, device_param->d_hooks, CL_TRUE, 0, device_param->size_hooks, device_param->hooks_buf, 0, NULL, NULL);
if (CL_rc == -1) return -1;
// do something with data
CL_rc = hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->command_queue, device_param->d_hooks, CL_TRUE, 0, device_param->size_hooks, device_param->hooks_buf, 0, NULL, NULL);
if (CL_rc == -1) return -1;
}
const u32 salt_pos = 0;
salt_t *salt_buf = &hashes->st_salts_buf[salt_pos];
@ -346,6 +363,35 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
if (CL_rc == -1) return -1;
}
if (hashconfig->opts_type & OPTS_TYPE_HOOK23)
{
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_23, 1, false, 0);
if (CL_rc == -1) return -1;
CL_rc = hc_clEnqueueReadBuffer (hashcat_ctx, device_param->command_queue, device_param->d_hooks, CL_TRUE, 0, device_param->size_hooks, device_param->hooks_buf, 0, NULL, NULL);
if (CL_rc == -1) return -1;
/*
* The following section depends on the hash mode
*/
switch (hashconfig->hash_mode)
{
// for 7z we only need device_param->hooks_buf, but other hooks could use any info from device_param. All of them should/must update hooks_buf
case 11600: seven_zip_hook_func (device_param, hashes->st_hook_salts_buf, 0, 1); break;
}
/*
* END of hash mode specific hook operations
*/
CL_rc = hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->command_queue, device_param->d_hooks, CL_TRUE, 0, device_param->size_hooks, device_param->hooks_buf, 0, NULL, NULL);
if (CL_rc == -1) return -1;
}
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 1, false, 0);
if (CL_rc == -1) return -1;