mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-22 22:58:30 +00:00
Merge pull request #2548 from philsmd/7z_hook_init_term
Improved the hook's memory handling for -m 11600 = 7-Zip
This commit is contained in:
commit
7be7ce3a31
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
- Documentation: Added 3rd party licenses to docs/license_libs
|
- Documentation: Added 3rd party licenses to docs/license_libs
|
||||||
- Module Structure: Add 3rd party library hook management functions. This also requires an update to all existing module_init()
|
- Module Structure: Add 3rd party library hook management functions. This also requires an update to all existing module_init()
|
||||||
|
- Hash-Mode 11600 (7-Zip): Improved memory handling (alloc and free) for the hook function
|
||||||
- Hash-Mode 13200 (AxCrypt): Changed the name to AxCrypt 1 to avoid confusion
|
- Hash-Mode 13200 (AxCrypt): Changed the name to AxCrypt 1 to avoid confusion
|
||||||
- Hash-Mode 13300 (AxCrypt in-memory SHA1): Changed the name to AxCrypt 1 in-memory SHA1
|
- Hash-Mode 13300 (AxCrypt in-memory SHA1): Changed the name to AxCrypt 1 in-memory SHA1
|
||||||
- OpenCL Runtime: Switched default OpenCL device type on macOS from GPU to CPU. Use -D 2 to enable GPU devices.
|
- OpenCL Runtime: Switched default OpenCL device type on macOS from GPU to CPU. Use -D 2 to enable GPU devices.
|
||||||
|
@ -92,6 +92,13 @@ typedef struct seven_zip_hook_salt
|
|||||||
|
|
||||||
} seven_zip_hook_salt_t;
|
} seven_zip_hook_salt_t;
|
||||||
|
|
||||||
|
typedef struct seven_zip_hook_extra
|
||||||
|
{
|
||||||
|
void **aes;
|
||||||
|
void **unp;
|
||||||
|
|
||||||
|
} seven_zip_hook_extra_t;
|
||||||
|
|
||||||
static const char *SIGNATURE_SEVEN_ZIP = "$7z$";
|
static const char *SIGNATURE_SEVEN_ZIP = "$7z$";
|
||||||
|
|
||||||
char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param)
|
char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param)
|
||||||
@ -113,6 +120,59 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY
|
|||||||
return jit_build_options;
|
return jit_build_options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool module_hook_extra_param_init (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const folder_config_t *folder_config, MAYBE_UNUSED const backend_ctx_t *backend_ctx, void *hook_extra_param)
|
||||||
|
{
|
||||||
|
seven_zip_hook_extra_t *seven_zip_hook_extra = (seven_zip_hook_extra_t *) hook_extra_param;
|
||||||
|
|
||||||
|
#define AESSIZE 320 * 1024
|
||||||
|
#define UNPSIZE 9766 * 1024 // or actually maximum is 9999999
|
||||||
|
|
||||||
|
seven_zip_hook_extra->aes = hccalloc (backend_ctx->backend_devices_cnt, sizeof (void *));
|
||||||
|
|
||||||
|
if (seven_zip_hook_extra->aes == NULL) return false;
|
||||||
|
|
||||||
|
seven_zip_hook_extra->unp = hccalloc (backend_ctx->backend_devices_cnt, sizeof (void *));
|
||||||
|
|
||||||
|
if (seven_zip_hook_extra->unp == NULL) return false;
|
||||||
|
|
||||||
|
for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++)
|
||||||
|
{
|
||||||
|
hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx];
|
||||||
|
|
||||||
|
if (device_param->skipped == true) continue;
|
||||||
|
|
||||||
|
seven_zip_hook_extra->aes[backend_devices_idx] = hcmalloc (AESSIZE);
|
||||||
|
|
||||||
|
if (seven_zip_hook_extra->aes[backend_devices_idx] == NULL) return false;
|
||||||
|
|
||||||
|
seven_zip_hook_extra->unp[backend_devices_idx] = hcmalloc (UNPSIZE);
|
||||||
|
|
||||||
|
if (seven_zip_hook_extra->unp[backend_devices_idx] == NULL) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool module_hook_extra_param_term (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const folder_config_t *folder_config, MAYBE_UNUSED const backend_ctx_t *backend_ctx, void *hook_extra_param)
|
||||||
|
{
|
||||||
|
seven_zip_hook_extra_t *seven_zip_hook_extra = (seven_zip_hook_extra_t *) hook_extra_param;
|
||||||
|
|
||||||
|
for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++)
|
||||||
|
{
|
||||||
|
hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx];
|
||||||
|
|
||||||
|
if (device_param->skipped == true) continue;
|
||||||
|
|
||||||
|
hcfree (seven_zip_hook_extra->aes[backend_devices_idx]);
|
||||||
|
hcfree (seven_zip_hook_extra->unp[backend_devices_idx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (seven_zip_hook_extra->aes);
|
||||||
|
hcfree (seven_zip_hook_extra->unp);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *hook_extra_param, const void *hook_salts_buf, const u32 salt_pos, const u64 pw_pos)
|
void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *hook_extra_param, const void *hook_salts_buf, const u32 salt_pos, const u64 pw_pos)
|
||||||
{
|
{
|
||||||
seven_zip_hook_t *hook_items = (seven_zip_hook_t *) device_param->hooks_buf;
|
seven_zip_hook_t *hook_items = (seven_zip_hook_t *) device_param->hooks_buf;
|
||||||
@ -120,6 +180,8 @@ void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *ho
|
|||||||
seven_zip_hook_salt_t *seven_zips = (seven_zip_hook_salt_t *) 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];
|
seven_zip_hook_salt_t *seven_zip = &seven_zips[salt_pos];
|
||||||
|
|
||||||
|
seven_zip_hook_extra_t *seven_zip_hook_extra = (seven_zip_hook_extra_t *) hook_extra_param;
|
||||||
|
|
||||||
u8 data_type = seven_zip->data_type;
|
u8 data_type = seven_zip->data_type;
|
||||||
u32 *data_buf = seven_zip->data_buf;
|
u32 *data_buf = seven_zip->data_buf;
|
||||||
u32 unpack_size = seven_zip->unpack_size;
|
u32 unpack_size = seven_zip->unpack_size;
|
||||||
@ -149,7 +211,7 @@ void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *ho
|
|||||||
iv[2] = seven_zip->iv_buf[2];
|
iv[2] = seven_zip->iv_buf[2];
|
||||||
iv[3] = seven_zip->iv_buf[3];
|
iv[3] = seven_zip->iv_buf[3];
|
||||||
|
|
||||||
u32 out_full[81882];
|
u32 *out_full = (u32 *) seven_zip_hook_extra->aes[device_param->device_id];
|
||||||
|
|
||||||
// if aes_len > 16 we need to loop
|
// if aes_len > 16 we need to loop
|
||||||
|
|
||||||
@ -226,9 +288,7 @@ void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *ho
|
|||||||
|
|
||||||
// output buffers and length
|
// output buffers and length
|
||||||
|
|
||||||
unsigned char *decompressed_data;
|
unsigned char *decompressed_data = (unsigned char *) seven_zip_hook_extra->unp[device_param->device_id];
|
||||||
|
|
||||||
decompressed_data = (unsigned char *) hcmalloc (crc_len);
|
|
||||||
|
|
||||||
SizeT decompressed_data_len = crc_len;
|
SizeT decompressed_data_len = crc_len;
|
||||||
|
|
||||||
@ -276,14 +336,10 @@ void module_hook23 (hc_device_param_t *device_param, MAYBE_UNUSED const void *ho
|
|||||||
{
|
{
|
||||||
hook_item->hook_success = 0;
|
hook_item->hook_success = 0;
|
||||||
|
|
||||||
hcfree (decompressed_data);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
crc = cpu_crc32_buffer (decompressed_data, crc_len);
|
crc = cpu_crc32_buffer (decompressed_data, crc_len);
|
||||||
|
|
||||||
hcfree (decompressed_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crc == seven_zip_crc)
|
if (crc == seven_zip_crc)
|
||||||
@ -310,6 +366,13 @@ u64 module_hook_salt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UN
|
|||||||
return hook_salt_size;
|
return hook_salt_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u64 module_hook_extra_param_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||||
|
{
|
||||||
|
const u64 hook_extra_param_size = (const u64) sizeof (seven_zip_hook_extra_t);
|
||||||
|
|
||||||
|
return hook_extra_param_size;
|
||||||
|
}
|
||||||
|
|
||||||
u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||||
{
|
{
|
||||||
const u64 tmp_size = (const u64) sizeof (seven_zip_tmp_t);
|
const u64 tmp_size = (const u64) sizeof (seven_zip_tmp_t);
|
||||||
@ -748,9 +811,9 @@ void module_init (module_ctx_t *module_ctx)
|
|||||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
module_ctx->module_hook_extra_param_size = module_hook_extra_param_size;
|
||||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
module_ctx->module_hook_extra_param_init = module_hook_extra_param_init;
|
||||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
module_ctx->module_hook_extra_param_term = module_hook_extra_param_term;
|
||||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||||
module_ctx->module_hook23 = module_hook23;
|
module_ctx->module_hook23 = module_hook23;
|
||||||
module_ctx->module_hook_salt_size = module_hook_salt_size;
|
module_ctx->module_hook_salt_size = module_hook_salt_size;
|
||||||
|
Loading…
Reference in New Issue
Block a user