Dictstat: On Windows, the st_ino attribute in the stat struct is not set which can lead to invalid cache hits. Added the filename to the database entry.

pull/2333/head
Jens Steube 4 years ago
parent 8c3808bad5
commit d706f90a75

@ -108,6 +108,7 @@
- Building: Fix for library compilation failure due to multiple defenition of sbob_xx64()
- Building: Updated BUILD.md
- Cracking bcrypt and Password Safe v2: Use a feedback from the compute API backend to dynamically find out optimal thread count
- Dictstat: On Windows, the st_ino attribute in the stat struct is not set which can lead to invalid cache hits. Added the filename to the database entry.
- Documents: Added README on how to build hashcat on MSYS2
- File handling: Print a truncation warning when an oversized line is detected
- My Wallet: Added additional plaintext pattern used in newer versions

@ -18,7 +18,7 @@
#define MAX_DICTSTAT 100000
#define DICTSTAT_FILENAME "hashcat.dictstat2"
#define DICTSTAT_VERSION (0x6863646963743200 | 0x01)
#define DICTSTAT_VERSION (0x6863646963743200 | 0x02)
int sort_by_dictstat (const void *s1, const void *s2);

@ -1656,6 +1656,8 @@ typedef struct dictstat
char encoding_from[64];
char encoding_to[64];
u8 hash_filename[16];
} dictstat_t;
typedef struct hashdump

@ -17,6 +17,10 @@ int sort_by_dictstat (const void *s1, const void *s2)
const dictstat_t *d1 = (const dictstat_t *) s1;
const dictstat_t *d2 = (const dictstat_t *) s2;
const int rc_hash = memcmp (d1->hash_filename, d2->hash_filename, 16);
if (rc_hash != 0) return rc_hash;
const int rc_from = strcmp (d1->encoding_from, d2->encoding_from);
if (rc_from != 0) return rc_from;

@ -13,6 +13,7 @@
#include "rp_cpu.h"
#include "shared.h"
#include "wordlist.h"
#include "emu_inc_hash_sha1.h"
size_t convert_from_hex (hashcat_ctx_t *hashcat_ctx, char *line_buf, const size_t line_len)
{
@ -340,7 +341,7 @@ int count_words (hashcat_ctx_t *hashcat_ctx, HCFILE *fp, const char *dictfile, u
dictstat_t d;
d.cnt = 0;
memset (&d, 0, sizeof (d));
if (fstat (hc_fileno (fp), &d.stat))
{
@ -378,6 +379,19 @@ int count_words (hashcat_ctx_t *hashcat_ctx, HCFILE *fp, const char *dictfile, u
return 0;
}
const size_t dictfile_len = strlen (dictfile);
u32 *dictfile_padded = (u32 *) hcmalloc (dictfile_len + 64); // padding required for sha1_update()
sha1_ctx_t sha1_ctx;
sha1_init (&sha1_ctx);
sha1_update (&sha1_ctx, dictfile_padded, dictfile_len);
sha1_final (&sha1_ctx);
hcfree (dictfile_padded);
memcpy (d.hash_filename, sha1_ctx.h, 16);
const u64 cached_cnt = dictstat_find (hashcat_ctx, &d);
if (run_rule_engine (user_options_extra->rule_len_l, user_options->rule_buf_l) == 0)

Loading…
Cancel
Save