From bea228dabe79dfce0d657ad0cc8fb49c259ab46d Mon Sep 17 00:00:00 2001 From: jsteube Date: Thu, 6 Oct 2016 22:18:20 +0200 Subject: [PATCH] Add straight_ctx_update_loop() --- include/straight.h | 5 +- src/hashcat.c | 186 ++++++--------------------------------------- src/interface.c | 1 - src/mpsp.c | 14 ++++ src/straight.c | 139 +++++++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 166 deletions(-) diff --git a/include/straight.h b/include/straight.h index 2a9435170..6fd04b15c 100644 --- a/include/straight.h +++ b/include/straight.h @@ -10,7 +10,8 @@ #define INCR_DICTS 1000 -int straight_ctx_init (hashcat_ctx_t *hashcat_ctx); -void straight_ctx_destroy (hashcat_ctx_t *hashcat_ctx); +int straight_ctx_update_loop (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 diff --git a/src/hashcat.c b/src/hashcat.c index 4f64c6467..a792c1bb7 100644 --- a/src/hashcat.c +++ b/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) { - const combinator_ctx_t *combinator_ctx = hashcat_ctx->combinator_ctx; - const hashes_t *hashes = hashcat_ctx->hashes; - const logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx; - const mask_ctx_t *mask_ctx = hashcat_ctx->mask_ctx; - const opencl_ctx_t *opencl_ctx = hashcat_ctx->opencl_ctx; - const restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx; - const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; - - 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; + hashes_t *hashes = hashcat_ctx->hashes; + induct_ctx_t *induct_ctx = hashcat_ctx->induct_ctx; + logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx; + opencl_ctx_t *opencl_ctx = hashcat_ctx->opencl_ctx; + restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx; + status_ctx_t *status_ctx = hashcat_ctx->status_ctx; + user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + user_options_t *user_options = hashcat_ctx->user_options; //status_ctx->run_main_level1 = 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); - // figure out wordlist based workload - - 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); + /** + * Update attack-mode specific stuff based on mask + */ - fclose (fd2); + mask_ctx_update_loop (hashcat_ctx); - if (status_ctx->words_cnt == 0) - { - logfile_sub_msg ("STOP"); + /** + * Update attack-mode specific stuff based on wordlist + */ - return 0; - } - } + straight_ctx_update_loop (hashcat_ctx); // words base @@ -536,12 +419,9 @@ static int inner2_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; 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_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_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 */ @@ -1046,15 +904,17 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx) myfree (inner_threads); - /** - * Clean up - */ + // finalize potfile - status_progress_destroy (hashcat_ctx); + potfile_write_close (hashcat_ctx); + + // finalize session opencl_session_destroy (hashcat_ctx); - potfile_write_close (hashcat_ctx); + // clean up + + status_progress_destroy (hashcat_ctx); bitmap_ctx_destroy (hashcat_ctx); diff --git a/src/interface.c b/src/interface.c index a61859370..f74199071 100644 --- a/src/interface.c +++ b/src/interface.c @@ -20100,7 +20100,6 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) break; } - return 0; } diff --git a/src/mpsp.c b/src/mpsp.c index db203c700..432ba01aa 100644 --- a/src/mpsp.c +++ b/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); + // 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) u32 mask_min = hashconfig->pw_min; diff --git a/src/straight.c b/src/straight.c index 636dd75d6..b00981a4f 100644 --- a/src/straight.c +++ b/src/straight.c @@ -11,12 +11,14 @@ #include "types.h" #include "memory.h" #include "logging.h" +#include "logfile.h" #include "shared.h" #include "filehandling.h" #include "folder.h" #include "rp.h" #include "rp_cpu.h" #include "straight.h" +#include "wordlist.h" 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++; } +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) { hashconfig_t *hashconfig = hashcat_ctx->hashconfig;