From 26033e5787bd0e6d46f3fca1dd662a1e11e11a56 Mon Sep 17 00:00:00 2001 From: jsteube Date: Fri, 11 Jan 2019 23:11:56 +0100 Subject: [PATCH] Make use of return length from ascii_digest instead of calling strlen() --- include/outfile.h | 2 +- include/potfile.h | 2 +- src/brain.c | 4 +++- src/hashes.c | 12 ++++++------ src/outfile.c | 4 +--- src/potfile.c | 38 ++++++++++++++++++-------------------- src/status.c | 4 ++-- 7 files changed, 32 insertions(+), 34 deletions(-) diff --git a/include/outfile.h b/include/outfile.h index f364b4429..79790cf61 100644 --- a/include/outfile.h +++ b/include/outfile.h @@ -18,6 +18,6 @@ int outfile_init (hashcat_ctx_t *hashcat_ctx); void outfile_destroy (hashcat_ctx_t *hashcat_ctx); int outfile_write_open (hashcat_ctx_t *hashcat_ctx); void outfile_write_close (hashcat_ctx_t *hashcat_ctx); -int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const unsigned char *plain_ptr, const u32 plain_len, const u64 crackpos, const unsigned char *username, const u32 user_len, char tmp_buf[HCBUFSIZ_LARGE]); +int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const int out_len, const unsigned char *plain_ptr, const u32 plain_len, const u64 crackpos, const unsigned char *username, const u32 user_len, char tmp_buf[HCBUFSIZ_LARGE]); #endif // _OUTFILE_H diff --git a/include/potfile.h b/include/potfile.h index 3226a7b03..51fd6d8d9 100644 --- a/include/potfile.h +++ b/include/potfile.h @@ -18,7 +18,7 @@ int potfile_read_open (hashcat_ctx_t *hashcat_ctx); void potfile_read_close (hashcat_ctx_t *hashcat_ctx); int potfile_write_open (hashcat_ctx_t *hashcat_ctx); void potfile_write_close (hashcat_ctx_t *hashcat_ctx); -void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, u8 *plain_ptr, unsigned int plain_len); +void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const int out_len, u8 *plain_ptr, unsigned int plain_len); int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx); void potfile_destroy (hashcat_ctx_t *hashcat_ctx); int potfile_handle_show (hashcat_ctx_t *hashcat_ctx); diff --git a/src/brain.c b/src/brain.c index 16b84852b..7903ec798 100644 --- a/src/brain.c +++ b/src/brain.c @@ -114,7 +114,9 @@ u32 brain_compute_session (hashcat_ctx_t *hashcat_ctx) for (u32 digest_idx = 0; digest_idx < salt_buf->digests_cnt; digest_idx++) { - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salts_idx, digest_idx); + const int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salts_idx, digest_idx); + + out_buf[out_len] = 0; out_bufs[out_idx] = hcstrdup ((char *) out_buf); } diff --git a/src/hashes.c b/src/hashes.c index c2e4d1d2b..7b6ab865e 100644 --- a/src/hashes.c +++ b/src/hashes.c @@ -209,9 +209,9 @@ int save_hash (hashcat_ctx_t *hashcat_ctx) fputc (separator, fp); } - out_buf[0] = 0; + const int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_pos, digest_pos); - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_pos, digest_pos); + out_buf[out_len] = 0; fprintf (fp, "%s" EOL, out_buf); } @@ -271,9 +271,9 @@ void check_hash (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, pl u8 *out_buf = hashes->out_buf; - out_buf[0] = 0; + const int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_pos, digest_pos); - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_pos, digest_pos); + out_buf[out_len] = 0; // plain @@ -316,7 +316,7 @@ void check_hash (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, pl // no need for locking, we're in a mutex protected function - potfile_write_append (hashcat_ctx, (char *) out_buf, plain_ptr, plain_len); + potfile_write_append (hashcat_ctx, (char *) out_buf, out_len, plain_ptr, plain_len); // outfile, can be either to file or stdout // if an error occurs opening the file, send to stdout as fallback @@ -328,7 +328,7 @@ void check_hash (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, pl tmp_buf[0] = 0; - const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, plain_ptr, plain_len, crackpos, NULL, 0, (char *) tmp_buf); + const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, plain_ptr, plain_len, crackpos, NULL, 0, (char *) tmp_buf); outfile_write_close (hashcat_ctx); diff --git a/src/outfile.c b/src/outfile.c index d6ef0f2c4..375ec3c86 100644 --- a/src/outfile.c +++ b/src/outfile.c @@ -426,7 +426,7 @@ void outfile_write_close (hashcat_ctx_t *hashcat_ctx) fclose (outfile_ctx->fp); } -int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const unsigned char *plain_ptr, const u32 plain_len, const u64 crackpos, const unsigned char *username, const u32 user_len, char tmp_buf[HCBUFSIZ_LARGE]) +int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const int out_len, const unsigned char *plain_ptr, const u32 plain_len, const u64 crackpos, const unsigned char *username, const u32 user_len, char tmp_buf[HCBUFSIZ_LARGE]) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const outfile_ctx_t *outfile_ctx = hashcat_ctx->outfile_ctx; @@ -455,8 +455,6 @@ int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const unsign if (outfile_format & OUTFILE_FMT_HASH) { - const size_t out_len = strlen (out_buf); - memcpy (tmp_buf + tmp_len, out_buf, out_len); tmp_len += out_len; diff --git a/src/potfile.c b/src/potfile.c index 029769bff..e2a792ce9 100644 --- a/src/potfile.c +++ b/src/potfile.c @@ -238,7 +238,7 @@ void potfile_write_close (hashcat_ctx_t *hashcat_ctx) fclose (potfile_ctx->fp); } -void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, u8 *plain_ptr, unsigned int plain_len) +void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const int out_len, u8 *plain_ptr, unsigned int plain_len) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const potfile_ctx_t *potfile_ctx = hashcat_ctx->potfile_ctx; @@ -254,8 +254,6 @@ void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, u8 * if (1) { - const size_t out_len = strlen (out_buf); - memcpy (tmp_buf + tmp_len, out_buf, out_len); tmp_len += out_len; @@ -664,15 +662,15 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx) u8 *out_buf = potfile_ctx->out_buf; - out_buf[0] = 0; - - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 0, HCBUFSIZ_LARGE - 0, salt_idx, digest_idx); + int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 0, HCBUFSIZ_LARGE - 0, salt_idx, digest_idx); if (hash2) { - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 16, HCBUFSIZ_LARGE - 16, salt_idx, split_neighbor); + out_len += ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 16, HCBUFSIZ_LARGE - 16, salt_idx, split_neighbor); } + out_buf[out_len] = 0; + // user unsigned char *username = NULL; @@ -726,7 +724,7 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx) } } - const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, (u8 *) mixed_buf, mixed_len, 0, username, user_len, (char *) tmp_buf); + const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, (u8 *) mixed_buf, mixed_len, 0, username, user_len, (char *) tmp_buf); EVENT_DATA (EVENT_POTFILE_HASH_SHOW, tmp_buf, tmp_len); } @@ -752,9 +750,9 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx) u8 *out_buf = potfile_ctx->out_buf; - out_buf[0] = 0; + const int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_idx, digest_idx); - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_idx, digest_idx); + out_buf[out_len] = 0; // user unsigned char *username = NULL; @@ -801,11 +799,11 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx) const size_t pass_unhexified_len = exec_unhexify ((u8 *) hash->pw_buf, hash->pw_len, pass_unhexified, sizeof (pass_unhexified)); - tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, pass_unhexified, (u32) pass_unhexified_len, 0, username, user_len, (char *) tmp_buf); + tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, pass_unhexified, (u32) pass_unhexified_len, 0, username, user_len, (char *) tmp_buf); } else { - tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, (u8 *) hash->pw_buf, hash->pw_len, 0, username, user_len, (char *) tmp_buf); + tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, (u8 *) hash->pw_buf, hash->pw_len, 0, username, user_len, (char *) tmp_buf); } EVENT_DATA (EVENT_POTFILE_HASH_SHOW, tmp_buf, tmp_len); @@ -872,15 +870,15 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx) u8 *out_buf = potfile_ctx->out_buf; - out_buf[0] = 0; - - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 0, HCBUFSIZ_LARGE - 0, salt_idx, digest_idx); + int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 0, HCBUFSIZ_LARGE - 0, salt_idx, digest_idx); if (hash2) { - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 16, HCBUFSIZ_LARGE - 16, salt_idx, split_neighbor); + out_len += ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf + 16, HCBUFSIZ_LARGE - 16, salt_idx, split_neighbor); } + out_buf[out_len] = 0; + // user unsigned char *username = NULL; @@ -901,7 +899,7 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx) tmp_buf[0] = 0; - const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, NULL, 0, 0, username, user_len, (char *) tmp_buf); + const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, NULL, 0, 0, username, user_len, (char *) tmp_buf); EVENT_DATA (EVENT_POTFILE_HASH_LEFT, tmp_buf, tmp_len); } @@ -925,9 +923,9 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx) u8 *out_buf = potfile_ctx->out_buf; - out_buf[0] = 0; + const int out_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_idx, digest_idx); - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, (char *) out_buf, HCBUFSIZ_LARGE, salt_idx, digest_idx); + out_buf[out_len] = 0; hash_t *hash = &hashes_buf[hashes_idx]; @@ -954,7 +952,7 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx) tmp_buf[0] = 0; - const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, NULL, 0, 0, username, user_len, (char *) tmp_buf); + const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, NULL, 0, 0, username, user_len, (char *) tmp_buf); EVENT_DATA (EVENT_POTFILE_HASH_LEFT, tmp_buf, tmp_len); } diff --git a/src/status.c b/src/status.c index 8d964ab70..00c2bd081 100644 --- a/src/status.c +++ b/src/status.c @@ -324,9 +324,9 @@ const char *status_get_hash_target (const hashcat_ctx_t *hashcat_ctx) { char *tmp_buf = (char *) hcmalloc (HCBUFSIZ_LARGE); - tmp_buf[0] = 0; + const int tmp_len = ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, tmp_buf, HCBUFSIZ_LARGE, 0, 0); - ascii_digest (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, tmp_buf, HCBUFSIZ_LARGE, 0, 0); + tmp_buf[tmp_len] = 0; compress_terminal_line_length (tmp_buf, 19, 6); // 19 = strlen ("Hash.Target......: ")