1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-27 17:08:12 +00:00

Add code to read LZMA compressed hashcat.hcstat2

This commit is contained in:
jsteube 2017-06-23 14:43:43 +02:00
parent d1f57fd3f7
commit a993395f28
2 changed files with 60 additions and 30 deletions

View File

@ -18,6 +18,7 @@
#define SP_PW_MAX 256 #define SP_PW_MAX 256
#define SP_ROOT_CNT (SP_PW_MAX * CHARSIZ) #define SP_ROOT_CNT (SP_PW_MAX * CHARSIZ)
#define SP_MARKOV_CNT (SP_PW_MAX * CHARSIZ * CHARSIZ) #define SP_MARKOV_CNT (SP_PW_MAX * CHARSIZ * CHARSIZ)
#define SP_FILESZ (sizeof (u64) + sizeof (u64) + (sizeof (u64) * SP_ROOT_CNT) + (sizeof (u64) * SP_MARKOV_CNT))
#define INCR_MASKS 1000 #define INCR_MASKS 1000

View File

@ -14,6 +14,7 @@
#include "interface.h" #include "interface.h"
#include "opencl.h" #include "opencl.h"
#include "shared.h" #include "shared.h"
#include "ext_lzma.h"
#include "mpsp.h" #include "mpsp.h"
static const char DEF_MASK[] = "?1?2?2?2?2?2?2?3?3?3?3?d?d?d?d"; static const char DEF_MASK[] = "?1?2?2?2?2?2?2?3?3?3?3?d?d?d?d";
@ -679,6 +680,15 @@ static int sp_setup_tbl (hashcat_ctx_t *hashcat_ctx)
hcstat = hcstat_tmp; hcstat = hcstat_tmp;
} }
hc_stat_t s;
if (hc_stat (hcstat, &s) == -1)
{
event_log_error (hashcat_ctx, "%s: %s", hcstat, strerror (errno));
return -1;
}
FILE *fd = fopen (hcstat, "rb"); FILE *fd = fopen (hcstat, "rb");
if (fd == NULL) if (fd == NULL)
@ -688,47 +698,66 @@ static int sp_setup_tbl (hashcat_ctx_t *hashcat_ctx)
return -1; return -1;
} }
u64 v = 0; u8 *inbuf = (u8 *) hcmalloc (s.st_size);
u64 z = 0;
if (fread (&v, sizeof (u64), 1, fd) != 1) size_t inlen = fread (inbuf, 1, SP_FILESZ, fd);
if (inlen != (size_t) s.st_size)
{ {
event_log_error (hashcat_ctx, "%s: Could not load data.", hcstat); event_log_error (hashcat_ctx, "%s: Could not read data.", hcstat);
fclose (fd); fclose (fd);
return -1; hcfree (inbuf);
}
if (fread (&z, sizeof (u64), 1, fd) != 1)
{
event_log_error (hashcat_ctx, "%s: Could not load data.", hcstat);
fclose (fd);
return -1;
}
if (fread (root_stats_buf, sizeof (u64), SP_ROOT_CNT, fd) != SP_ROOT_CNT)
{
event_log_error (hashcat_ctx, "%s: Could not load data.", hcstat);
fclose (fd);
return -1;
}
if (fread (markov_stats_buf, sizeof (u64), SP_MARKOV_CNT, fd) != SP_MARKOV_CNT)
{
event_log_error (hashcat_ctx, "%s: Could not load data.", hcstat);
fclose (fd);
return -1; return -1;
} }
fclose (fd); fclose (fd);
u8 *outbuf = (u8 *) hcmalloc (SP_FILESZ);
size_t outlen = SP_FILESZ;
ISzAlloc hc_lzma_mem_alloc = {hc_lzma_alloc, hc_lzma_free};
ELzmaStatus status;
#define LZMA2_PROPS 0x1c //
const SRes res = Lzma2Decode (outbuf, &outlen, inbuf, &inlen, (Byte) LZMA2_PROPS, LZMA_FINISH_END, &status, &hc_lzma_mem_alloc);
if (res != SZ_OK)
{
event_log_error (hashcat_ctx, "%s: Could not uncompress data.", hcstat);
hcfree (inbuf);
hcfree (outbuf);
return -1;
}
if (outlen != SP_FILESZ)
{
event_log_error (hashcat_ctx, "%s: Could not uncompress data.", hcstat);
hcfree (inbuf);
hcfree (outbuf);
return -1;
}
u64 *ptr = (u64 *) outbuf;
u64 v = *ptr++;
u64 z = *ptr++;
memcpy (root_stats_buf, ptr, sizeof (u64) * SP_ROOT_CNT); ptr += SP_ROOT_CNT;
memcpy (markov_stats_buf, ptr, sizeof (u64) * SP_MARKOV_CNT); ptr += SP_MARKOV_CNT;
hcfree (inbuf);
hcfree (outbuf);
/** /**
* switch endianess * switch endianess
*/ */