|
|
|
@ -10,8 +10,53 @@
|
|
|
|
|
#include "shared.h"
|
|
|
|
|
#include "loopback.h"
|
|
|
|
|
|
|
|
|
|
void loopback_init (loopback_ctx_t *loopback_ctx, const user_options_t *user_options)
|
|
|
|
|
static void loopback_format_plain (hashcat_ctx_t *hashcat_ctx, const u8 *plain_ptr, const unsigned int plain_len)
|
|
|
|
|
{
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
int needs_hexify = 0;
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < plain_len; i++)
|
|
|
|
|
{
|
|
|
|
|
if (plain_ptr[i] < 0x20)
|
|
|
|
|
{
|
|
|
|
|
needs_hexify = 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (plain_ptr[i] > 0x7f)
|
|
|
|
|
{
|
|
|
|
|
needs_hexify = 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (needs_hexify == 1)
|
|
|
|
|
{
|
|
|
|
|
fprintf (loopback_ctx->fp, "$HEX[");
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < plain_len; i++)
|
|
|
|
|
{
|
|
|
|
|
fprintf (loopback_ctx->fp, "%02x", plain_ptr[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fprintf (loopback_ctx->fp, "]");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fwrite (plain_ptr, plain_len, 1, loopback_ctx->fp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_init (hashcat_ctx_t *hashcat_ctx)
|
|
|
|
|
{
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
user_options_t *user_options = hashcat_ctx->user_options;
|
|
|
|
|
|
|
|
|
|
loopback_ctx->enabled = false;
|
|
|
|
|
|
|
|
|
|
if (user_options->benchmark == true) return;
|
|
|
|
@ -30,15 +75,20 @@ void loopback_init (loopback_ctx_t *loopback_ctx, const user_options_t *user_opt
|
|
|
|
|
loopback_ctx->filename = (char *) mymalloc (HCBUFSIZ_TINY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_destroy (loopback_ctx_t *loopback_ctx)
|
|
|
|
|
void loopback_destroy (hashcat_ctx_t *hashcat_ctx)
|
|
|
|
|
{
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
memset (loopback_ctx, 0, sizeof (loopback_ctx_t));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int loopback_write_open (loopback_ctx_t *loopback_ctx, const induct_ctx_t *induct_ctx)
|
|
|
|
|
int loopback_write_open (hashcat_ctx_t *hashcat_ctx)
|
|
|
|
|
{
|
|
|
|
|
induct_ctx_t *induct_ctx = hashcat_ctx->induct_ctx;
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->enabled == false) return 0;
|
|
|
|
|
|
|
|
|
|
if (induct_ctx->enabled == false) return 0;
|
|
|
|
@ -63,8 +113,10 @@ int loopback_write_open (loopback_ctx_t *loopback_ctx, const induct_ctx_t *induc
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_write_unlink (loopback_ctx_t *loopback_ctx)
|
|
|
|
|
void loopback_write_unlink (hashcat_ctx_t *hashcat_ctx)
|
|
|
|
|
{
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->filename == NULL) return;
|
|
|
|
@ -72,8 +124,10 @@ void loopback_write_unlink (loopback_ctx_t *loopback_ctx)
|
|
|
|
|
unlink (loopback_ctx->filename);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_write_close (loopback_ctx_t *loopback_ctx)
|
|
|
|
|
void loopback_write_close (hashcat_ctx_t *hashcat_ctx)
|
|
|
|
|
{
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
if (loopback_ctx->fp == NULL) return;
|
|
|
|
@ -81,53 +135,15 @@ void loopback_write_close (loopback_ctx_t *loopback_ctx)
|
|
|
|
|
fclose (loopback_ctx->fp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_format_plain (loopback_ctx_t *loopback_ctx, const u8 *plain_ptr, const unsigned int plain_len)
|
|
|
|
|
void loopback_write_append (hashcat_ctx_t *hashcat_ctx, const u8 *plain_ptr, const unsigned int plain_len)
|
|
|
|
|
{
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
int needs_hexify = 0;
|
|
|
|
|
loopback_ctx_t *loopback_ctx = hashcat_ctx->loopback_ctx;
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < plain_len; i++)
|
|
|
|
|
{
|
|
|
|
|
if (plain_ptr[i] < 0x20)
|
|
|
|
|
{
|
|
|
|
|
needs_hexify = 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (plain_ptr[i] > 0x7f)
|
|
|
|
|
{
|
|
|
|
|
needs_hexify = 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (needs_hexify == 1)
|
|
|
|
|
{
|
|
|
|
|
fprintf (loopback_ctx->fp, "$HEX[");
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < plain_len; i++)
|
|
|
|
|
{
|
|
|
|
|
fprintf (loopback_ctx->fp, "%02x", plain_ptr[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fprintf (loopback_ctx->fp, "]");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fwrite (plain_ptr, plain_len, 1, loopback_ctx->fp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loopback_write_append (loopback_ctx_t *loopback_ctx, const u8 *plain_ptr, const unsigned int plain_len)
|
|
|
|
|
{
|
|
|
|
|
if (loopback_ctx->enabled == false) return;
|
|
|
|
|
|
|
|
|
|
FILE *fp = loopback_ctx->fp;
|
|
|
|
|
|
|
|
|
|
loopback_format_plain (loopback_ctx, plain_ptr, plain_len);
|
|
|
|
|
loopback_format_plain (hashcat_ctx, plain_ptr, plain_len);
|
|
|
|
|
|
|
|
|
|
fputc ('\n', fp);
|
|
|
|
|
|
|
|
|
|