1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-27 00:48:13 +00:00
hashcat/src/weak_hash.c

106 lines
2.6 KiB
C
Raw Normal View History

2016-09-11 09:42:19 +00:00
/**
* Author......: See docs/credits.txt
2016-09-11 09:42:19 +00:00
* License.....: MIT
*/
#include "common.h"
#include "types.h"
#include "event.h"
#include "opencl.h"
2016-09-30 07:25:51 +00:00
#include "hashes.h"
2016-09-11 09:42:19 +00:00
#include "weak_hash.h"
2016-10-15 17:47:53 +00:00
int weak_hash_check (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 salt_pos)
{
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
hashes_t *hashes = hashcat_ctx->hashes;
straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx;
user_options_t *user_options = hashcat_ctx->user_options;
2016-09-16 15:01:18 +00:00
salt_t *salt_buf = &hashes->salts_buf[salt_pos];
device_param->kernel_params_buf32[27] = salt_pos;
device_param->kernel_params_buf32[30] = 1;
device_param->kernel_params_buf32[31] = salt_buf->digests_cnt;
device_param->kernel_params_buf32[32] = salt_buf->digests_offset;
device_param->kernel_params_buf32[33] = 0;
device_param->kernel_params_buf32[34] = 1;
2016-10-04 04:35:49 +00:00
u32 cmd0_rule_old = straight_ctx->kernel_rules_buf[0].cmds[0];
straight_ctx->kernel_rules_buf[0].cmds[0] = 0;
/**
* run the kernel
*/
2016-10-15 17:47:53 +00:00
int CL_rc;
if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL)
{
if (user_options->optimized_kernel_enable == true)
{
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 1, false, 0);
2016-10-15 17:47:53 +00:00
if (CL_rc == -1) return -1;
}
else
{
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 1, false, 0);
if (CL_rc == -1) return -1;
}
}
else
{
2016-10-15 17:47:53 +00:00
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 1, false, 0);
if (CL_rc == -1) return -1;
2016-10-04 04:35:49 +00:00
u32 loop_step = 16;
2016-10-04 04:35:49 +00:00
const u32 iter = salt_buf->salt_iter;
2016-10-04 04:35:49 +00:00
for (u32 loop_pos = 0; loop_pos < iter; loop_pos += loop_step)
{
2016-10-04 04:35:49 +00:00
u32 loop_left = iter - loop_pos;
loop_left = MIN (loop_left, loop_step);
device_param->kernel_params_buf32[28] = loop_pos;
device_param->kernel_params_buf32[29] = loop_left;
2016-10-15 17:47:53 +00:00
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 1, false, 0);
if (CL_rc == -1) return -1;
}
2016-10-15 17:47:53 +00:00
CL_rc = run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 1, false, 0);
if (CL_rc == -1) return -1;
}
/**
* result
*/
check_cracked (hashcat_ctx, device_param, salt_pos);
/**
* cleanup
*/
device_param->kernel_params_buf32[27] = 0;
device_param->kernel_params_buf32[28] = 0;
device_param->kernel_params_buf32[29] = 0;
device_param->kernel_params_buf32[30] = 0;
device_param->kernel_params_buf32[31] = 0;
device_param->kernel_params_buf32[32] = 0;
device_param->kernel_params_buf32[33] = 0;
device_param->kernel_params_buf32[34] = 0;
straight_ctx->kernel_rules_buf[0].cmds[0] = cmd0_rule_old;
2016-10-15 17:47:53 +00:00
return 0;
}