mirror of
https://github.com/hashcat/hashcat.git
synced 2025-07-08 07:38:17 +00:00
Add straight_ctx_update_loop()
This commit is contained in:
parent
4ed2fb4913
commit
bea228dabe
@ -10,7 +10,8 @@
|
|||||||
|
|
||||||
#define INCR_DICTS 1000
|
#define INCR_DICTS 1000
|
||||||
|
|
||||||
int straight_ctx_init (hashcat_ctx_t *hashcat_ctx);
|
int straight_ctx_update_loop (hashcat_ctx_t *hashcat_ctx);
|
||||||
void straight_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
|
int straight_ctx_init (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
void straight_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
#endif // _STRAIGHT_H
|
#endif // _STRAIGHT_H
|
||||||
|
186
src/hashcat.c
186
src/hashcat.c
@ -118,18 +118,14 @@ void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
static int inner2_loop (hashcat_ctx_t *hashcat_ctx)
|
static int inner2_loop (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
const combinator_ctx_t *combinator_ctx = hashcat_ctx->combinator_ctx;
|
hashes_t *hashes = hashcat_ctx->hashes;
|
||||||
const hashes_t *hashes = hashcat_ctx->hashes;
|
induct_ctx_t *induct_ctx = hashcat_ctx->induct_ctx;
|
||||||
const logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx;
|
logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx;
|
||||||
const mask_ctx_t *mask_ctx = hashcat_ctx->mask_ctx;
|
opencl_ctx_t *opencl_ctx = hashcat_ctx->opencl_ctx;
|
||||||
const opencl_ctx_t *opencl_ctx = hashcat_ctx->opencl_ctx;
|
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
||||||
const restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
||||||
const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
||||||
|
user_options_t *user_options = hashcat_ctx->user_options;
|
||||||
induct_ctx_t *induct_ctx = hashcat_ctx->induct_ctx;
|
|
||||||
status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
|
||||||
straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx;
|
|
||||||
user_options_t *user_options = hashcat_ctx->user_options;
|
|
||||||
|
|
||||||
//status_ctx->run_main_level1 = true;
|
//status_ctx->run_main_level1 = true;
|
||||||
//status_ctx->run_main_level2 = true;
|
//status_ctx->run_main_level2 = true;
|
||||||
@ -169,130 +165,17 @@ static int inner2_loop (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
cpt_ctx_reset (hashcat_ctx);
|
cpt_ctx_reset (hashcat_ctx);
|
||||||
|
|
||||||
// figure out wordlist based workload
|
/**
|
||||||
|
* Update attack-mode specific stuff based on mask
|
||||||
|
*/
|
||||||
|
|
||||||
if (user_options->attack_mode == ATTACK_MODE_STRAIGHT)
|
mask_ctx_update_loop (hashcat_ctx);
|
||||||
{
|
|
||||||
if (user_options_extra->wordlist_mode == WL_MODE_FILE)
|
|
||||||
{
|
|
||||||
if (induct_ctx->induction_dictionaries_cnt)
|
|
||||||
{
|
|
||||||
straight_ctx->dict = induct_ctx->induction_dictionaries[induct_ctx->induction_dictionaries_pos];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
straight_ctx->dict = straight_ctx->dicts[straight_ctx->dicts_pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
logfile_sub_string (straight_ctx->dict);
|
/**
|
||||||
|
* Update attack-mode specific stuff based on wordlist
|
||||||
|
*/
|
||||||
|
|
||||||
for (u32 i = 0; i < user_options->rp_files_cnt; i++)
|
straight_ctx_update_loop (hashcat_ctx);
|
||||||
{
|
|
||||||
logfile_sub_var_string ("rulefile", user_options->rp_files[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
FILE *fd2 = fopen (straight_ctx->dict, "rb");
|
|
||||||
|
|
||||||
if (fd2 == NULL)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: %s: %s", straight_ctx->dict, strerror (errno));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, straight_ctx->dict);
|
|
||||||
|
|
||||||
fclose (fd2);
|
|
||||||
|
|
||||||
if (status_ctx->words_cnt == 0)
|
|
||||||
{
|
|
||||||
logfile_sub_msg ("STOP");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (user_options->attack_mode == ATTACK_MODE_COMBI)
|
|
||||||
{
|
|
||||||
logfile_sub_string (combinator_ctx->dict1);
|
|
||||||
logfile_sub_string (combinator_ctx->dict2);
|
|
||||||
|
|
||||||
if (combinator_ctx->combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
|
||||||
{
|
|
||||||
FILE *fd2 = fopen (combinator_ctx->dict1, "rb");
|
|
||||||
|
|
||||||
if (fd2 == NULL)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: %s: %s", combinator_ctx->dict1, strerror (errno));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, combinator_ctx->dict1);
|
|
||||||
|
|
||||||
fclose (fd2);
|
|
||||||
}
|
|
||||||
else if (combinator_ctx->combs_mode == COMBINATOR_MODE_BASE_RIGHT)
|
|
||||||
{
|
|
||||||
FILE *fd2 = fopen (combinator_ctx->dict2, "rb");
|
|
||||||
|
|
||||||
if (fd2 == NULL)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: %s: %s", combinator_ctx->dict2, strerror (errno));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, combinator_ctx->dict2);
|
|
||||||
|
|
||||||
fclose (fd2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status_ctx->words_cnt == 0)
|
|
||||||
{
|
|
||||||
logfile_sub_msg ("STOP");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (user_options->attack_mode == ATTACK_MODE_BF)
|
|
||||||
{
|
|
||||||
logfile_sub_string (mask_ctx->mask);
|
|
||||||
}
|
|
||||||
else if ((user_options->attack_mode == ATTACK_MODE_HYBRID1) || (user_options->attack_mode == ATTACK_MODE_HYBRID2))
|
|
||||||
{
|
|
||||||
if (induct_ctx->induction_dictionaries_cnt)
|
|
||||||
{
|
|
||||||
straight_ctx->dict = induct_ctx->induction_dictionaries[induct_ctx->induction_dictionaries_pos];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
straight_ctx->dict = straight_ctx->dicts[straight_ctx->dicts_pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
logfile_sub_string (straight_ctx->dict);
|
|
||||||
logfile_sub_string (mask_ctx->mask);
|
|
||||||
|
|
||||||
FILE *fd2 = fopen (straight_ctx->dict, "rb");
|
|
||||||
|
|
||||||
if (fd2 == NULL)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: %s: %s", straight_ctx->dict, strerror (errno));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, straight_ctx->dict);
|
|
||||||
|
|
||||||
fclose (fd2);
|
|
||||||
|
|
||||||
if (status_ctx->words_cnt == 0)
|
|
||||||
{
|
|
||||||
logfile_sub_msg ("STOP");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// words base
|
// words base
|
||||||
|
|
||||||
@ -536,12 +419,9 @@ static int inner2_loop (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
|
static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
|
||||||
mask_ctx_t *mask_ctx = hashcat_ctx->mask_ctx;
|
|
||||||
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
||||||
status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
||||||
straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx;
|
straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx;
|
||||||
user_options_t *user_options = hashcat_ctx->user_options;
|
|
||||||
|
|
||||||
//status_ctx->run_main_level1 = true;
|
//status_ctx->run_main_level1 = true;
|
||||||
//status_ctx->run_main_level2 = true;
|
//status_ctx->run_main_level2 = true;
|
||||||
@ -549,28 +429,6 @@ static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
|
|||||||
status_ctx->run_thread_level1 = true;
|
status_ctx->run_thread_level1 = true;
|
||||||
status_ctx->run_thread_level2 = true;
|
status_ctx->run_thread_level2 = true;
|
||||||
|
|
||||||
/**
|
|
||||||
* Update pw_min and pw_max according to next mask
|
|
||||||
*/
|
|
||||||
|
|
||||||
u32 pw_min = hashconfig->pw_min;
|
|
||||||
u32 pw_max = hashconfig->pw_max;
|
|
||||||
|
|
||||||
if (user_options->benchmark == true)
|
|
||||||
{
|
|
||||||
pw_min = mp_get_length (mask_ctx->mask);
|
|
||||||
pw_max = pw_min;
|
|
||||||
}
|
|
||||||
|
|
||||||
hashconfig->pw_min = pw_min;
|
|
||||||
hashconfig->pw_max = pw_max;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update mask in attack-mode specific stuff
|
|
||||||
*/
|
|
||||||
|
|
||||||
mask_ctx_update_loop (hashcat_ctx);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* loop through wordlists
|
* loop through wordlists
|
||||||
*/
|
*/
|
||||||
@ -1046,15 +904,17 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
myfree (inner_threads);
|
myfree (inner_threads);
|
||||||
|
|
||||||
/**
|
// finalize potfile
|
||||||
* Clean up
|
|
||||||
*/
|
|
||||||
|
|
||||||
status_progress_destroy (hashcat_ctx);
|
potfile_write_close (hashcat_ctx);
|
||||||
|
|
||||||
|
// finalize session
|
||||||
|
|
||||||
opencl_session_destroy (hashcat_ctx);
|
opencl_session_destroy (hashcat_ctx);
|
||||||
|
|
||||||
potfile_write_close (hashcat_ctx);
|
// clean up
|
||||||
|
|
||||||
|
status_progress_destroy (hashcat_ctx);
|
||||||
|
|
||||||
bitmap_ctx_destroy (hashcat_ctx);
|
bitmap_ctx_destroy (hashcat_ctx);
|
||||||
|
|
||||||
|
@ -20100,7 +20100,6 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
src/mpsp.c
14
src/mpsp.c
@ -1022,6 +1022,20 @@ int mask_ctx_update_loop (hashcat_ctx_t *hashcat_ctx)
|
|||||||
{
|
{
|
||||||
mask_ctx->css_buf = mp_gen_css (mask_ctx->mask, strlen (mask_ctx->mask), mask_ctx->mp_sys, mask_ctx->mp_usr, &mask_ctx->css_cnt, hashconfig, user_options);
|
mask_ctx->css_buf = mp_gen_css (mask_ctx->mask, strlen (mask_ctx->mask), mask_ctx->mp_sys, mask_ctx->mp_usr, &mask_ctx->css_cnt, hashconfig, user_options);
|
||||||
|
|
||||||
|
// special case for benchmark
|
||||||
|
|
||||||
|
u32 pw_min = hashconfig->pw_min;
|
||||||
|
u32 pw_max = hashconfig->pw_max;
|
||||||
|
|
||||||
|
if (user_options->benchmark == true)
|
||||||
|
{
|
||||||
|
pw_min = mp_get_length (mask_ctx->mask);
|
||||||
|
pw_max = pw_min;
|
||||||
|
}
|
||||||
|
|
||||||
|
hashconfig->pw_min = pw_min;
|
||||||
|
hashconfig->pw_max = pw_max;
|
||||||
|
|
||||||
// check if mask is not too large or too small for pw_min/pw_max (*2 if unicode)
|
// check if mask is not too large or too small for pw_min/pw_max (*2 if unicode)
|
||||||
|
|
||||||
u32 mask_min = hashconfig->pw_min;
|
u32 mask_min = hashconfig->pw_min;
|
||||||
|
139
src/straight.c
139
src/straight.c
@ -11,12 +11,14 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
|
#include "logfile.h"
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "filehandling.h"
|
#include "filehandling.h"
|
||||||
#include "folder.h"
|
#include "folder.h"
|
||||||
#include "rp.h"
|
#include "rp.h"
|
||||||
#include "rp_cpu.h"
|
#include "rp_cpu.h"
|
||||||
#include "straight.h"
|
#include "straight.h"
|
||||||
|
#include "wordlist.h"
|
||||||
|
|
||||||
static void straight_ctx_add_wl (straight_ctx_t *straight_ctx, const char *dict)
|
static void straight_ctx_add_wl (straight_ctx_t *straight_ctx, const char *dict)
|
||||||
{
|
{
|
||||||
@ -32,6 +34,143 @@ static void straight_ctx_add_wl (straight_ctx_t *straight_ctx, const char *dict)
|
|||||||
straight_ctx->dicts_cnt++;
|
straight_ctx->dicts_cnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int straight_ctx_update_loop (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
combinator_ctx_t *combinator_ctx = hashcat_ctx->combinator_ctx;
|
||||||
|
induct_ctx_t *induct_ctx = hashcat_ctx->induct_ctx;
|
||||||
|
logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx;
|
||||||
|
mask_ctx_t *mask_ctx = hashcat_ctx->mask_ctx;
|
||||||
|
status_ctx_t *status_ctx = hashcat_ctx->status_ctx;
|
||||||
|
straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx;
|
||||||
|
user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
||||||
|
user_options_t *user_options = hashcat_ctx->user_options;
|
||||||
|
|
||||||
|
if (user_options->attack_mode == ATTACK_MODE_STRAIGHT)
|
||||||
|
{
|
||||||
|
if (user_options_extra->wordlist_mode == WL_MODE_FILE)
|
||||||
|
{
|
||||||
|
if (induct_ctx->induction_dictionaries_cnt)
|
||||||
|
{
|
||||||
|
straight_ctx->dict = induct_ctx->induction_dictionaries[induct_ctx->induction_dictionaries_pos];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
straight_ctx->dict = straight_ctx->dicts[straight_ctx->dicts_pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
logfile_sub_string (straight_ctx->dict);
|
||||||
|
|
||||||
|
for (u32 i = 0; i < user_options->rp_files_cnt; i++)
|
||||||
|
{
|
||||||
|
logfile_sub_var_string ("rulefile", user_options->rp_files[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *fd2 = fopen (straight_ctx->dict, "rb");
|
||||||
|
|
||||||
|
if (fd2 == NULL)
|
||||||
|
{
|
||||||
|
log_error ("ERROR: %s: %s", straight_ctx->dict, strerror (errno));
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, straight_ctx->dict);
|
||||||
|
|
||||||
|
fclose (fd2);
|
||||||
|
|
||||||
|
if (status_ctx->words_cnt == 0)
|
||||||
|
{
|
||||||
|
logfile_sub_msg ("STOP");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (user_options->attack_mode == ATTACK_MODE_COMBI)
|
||||||
|
{
|
||||||
|
logfile_sub_string (combinator_ctx->dict1);
|
||||||
|
logfile_sub_string (combinator_ctx->dict2);
|
||||||
|
|
||||||
|
if (combinator_ctx->combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||||
|
{
|
||||||
|
FILE *fd2 = fopen (combinator_ctx->dict1, "rb");
|
||||||
|
|
||||||
|
if (fd2 == NULL)
|
||||||
|
{
|
||||||
|
log_error ("ERROR: %s: %s", combinator_ctx->dict1, strerror (errno));
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, combinator_ctx->dict1);
|
||||||
|
|
||||||
|
fclose (fd2);
|
||||||
|
}
|
||||||
|
else if (combinator_ctx->combs_mode == COMBINATOR_MODE_BASE_RIGHT)
|
||||||
|
{
|
||||||
|
FILE *fd2 = fopen (combinator_ctx->dict2, "rb");
|
||||||
|
|
||||||
|
if (fd2 == NULL)
|
||||||
|
{
|
||||||
|
log_error ("ERROR: %s: %s", combinator_ctx->dict2, strerror (errno));
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, combinator_ctx->dict2);
|
||||||
|
|
||||||
|
fclose (fd2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status_ctx->words_cnt == 0)
|
||||||
|
{
|
||||||
|
logfile_sub_msg ("STOP");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (user_options->attack_mode == ATTACK_MODE_BF)
|
||||||
|
{
|
||||||
|
logfile_sub_string (mask_ctx->mask);
|
||||||
|
}
|
||||||
|
else if ((user_options->attack_mode == ATTACK_MODE_HYBRID1) || (user_options->attack_mode == ATTACK_MODE_HYBRID2))
|
||||||
|
{
|
||||||
|
if (induct_ctx->induction_dictionaries_cnt)
|
||||||
|
{
|
||||||
|
straight_ctx->dict = induct_ctx->induction_dictionaries[induct_ctx->induction_dictionaries_pos];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
straight_ctx->dict = straight_ctx->dicts[straight_ctx->dicts_pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
logfile_sub_string (straight_ctx->dict);
|
||||||
|
logfile_sub_string (mask_ctx->mask);
|
||||||
|
|
||||||
|
FILE *fd2 = fopen (straight_ctx->dict, "rb");
|
||||||
|
|
||||||
|
if (fd2 == NULL)
|
||||||
|
{
|
||||||
|
log_error ("ERROR: %s: %s", straight_ctx->dict, strerror (errno));
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_ctx->words_cnt = count_words (hashcat_ctx, fd2, straight_ctx->dict);
|
||||||
|
|
||||||
|
fclose (fd2);
|
||||||
|
|
||||||
|
if (status_ctx->words_cnt == 0)
|
||||||
|
{
|
||||||
|
logfile_sub_msg ("STOP");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int straight_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
int straight_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
||||||
|
Loading…
Reference in New Issue
Block a user