diff --git a/docs/changes.txt b/docs/changes.txt index bb7495ce1..d9e895e53 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -25,11 +25,12 @@ ## Bugs ## -- Fixed 'E' rule in pure kernel mode which was ignoring letters that are in positions that are multiples of 4 - Fixed access violation in hashconfig_destroy if hashcat_ctx_t is only partially initialized +- Fixed 'E' rule in pure kernel mode which was ignoring letters that are in positions that are multiples of 4 - Fixed false negative in hash-mode 15900 (DPAPI masterkey file v2) if password was longer than 64 characters - Fixed hashcat_ctx leak and refactor module and kernel existence checks - Fixed integer overflow in Recovered/Time status view column caused by division > 0 but < 1 +- Fixed invalid ETA if --limit was specified, several salts are in a hash list and some of them were found in a potfile - Fixed memory leak in iconv_ctx and iconv_tmp in backend.c - Fixed missing option to automatically disable kernel cache in -m 25600 and -m 25800 - Fixed out-of-boundary write in slow candidates mode in combinator attack diff --git a/src/status.c b/src/status.c index c271d30bd..6b4084b59 100644 --- a/src/status.c +++ b/src/status.c @@ -1261,9 +1261,10 @@ u64 status_get_progress_cur (const hashcat_ctx_t *hashcat_ctx) u64 status_get_progress_ignore (const hashcat_ctx_t *hashcat_ctx) { - const hashes_t *hashes = hashcat_ctx->hashes; - const status_ctx_t *status_ctx = hashcat_ctx->status_ctx; - const user_options_t *user_options = hashcat_ctx->user_options; + const hashes_t *hashes = hashcat_ctx->hashes; + const status_ctx_t *status_ctx = hashcat_ctx->status_ctx; + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; if (user_options->attack_mode == ATTACK_MODE_ASSOCIATION) { @@ -1273,6 +1274,27 @@ u64 status_get_progress_ignore (const hashcat_ctx_t *hashcat_ctx) return 0; } + u64 words_cnt = status_ctx->words_cnt; + + if (user_options->limit) + { + const combinator_ctx_t *combinator_ctx = hashcat_ctx->combinator_ctx; + const mask_ctx_t *mask_ctx = hashcat_ctx->mask_ctx; + const straight_ctx_t *straight_ctx = hashcat_ctx->straight_ctx; + + words_cnt = MIN (user_options->limit, status_ctx->words_base); + + if (user_options->slow_candidates == true) + { + // nothing to do + } + else + { + if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT) words_cnt *= straight_ctx->kernel_rules_cnt; + else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) words_cnt *= combinator_ctx->combs_cnt; + else if (user_options_extra->attack_kern == ATTACK_KERN_BF) words_cnt *= mask_ctx->bfs_cnt; + } + } // Important for ETA only u64 progress_ignore = 0; @@ -1285,7 +1307,7 @@ u64 status_get_progress_ignore (const hashcat_ctx_t *hashcat_ctx) + status_ctx->words_progress_rejected[salt_pos] + status_ctx->words_progress_restored[salt_pos]; - const u64 left = status_ctx->words_cnt - all; + const u64 left = words_cnt - all; progress_ignore += left; }