mirror of
https://github.com/hashcat/hashcat.git
synced 2024-11-22 16:18:09 +00:00
Keep output of --show and --left in the original ordering of the input hash file
This commit is contained in:
parent
30f0745252
commit
6adc217bae
@ -30,5 +30,6 @@ void potfile_update_hashes (hashcat_ctx_t *hashcat_ctx, hash_t *hash_buf, cha
|
|||||||
void pot_tree_destroy (pot_tree_entry_t *tree);
|
void pot_tree_destroy (pot_tree_entry_t *tree);
|
||||||
|
|
||||||
int sort_pot_tree_by_hash (const void *v1, const void *v2);
|
int sort_pot_tree_by_hash (const void *v1, const void *v2);
|
||||||
|
int sort_pot_orig_line (const void *v1, const void *v2);
|
||||||
|
|
||||||
#endif // _POTFILE_H
|
#endif // _POTFILE_H
|
||||||
|
@ -834,6 +834,7 @@ typedef struct hash
|
|||||||
hashinfo_t *hash_info;
|
hashinfo_t *hash_info;
|
||||||
char *pw_buf;
|
char *pw_buf;
|
||||||
int pw_len;
|
int pw_len;
|
||||||
|
u64 orig_line_pos;
|
||||||
|
|
||||||
} hash_t;
|
} hash_t;
|
||||||
|
|
||||||
@ -1695,6 +1696,14 @@ typedef struct pot_tree_entry
|
|||||||
|
|
||||||
} pot_tree_entry_t;
|
} pot_tree_entry_t;
|
||||||
|
|
||||||
|
typedef struct pot_orig_line_entry
|
||||||
|
{
|
||||||
|
u8 *hash_buf;
|
||||||
|
int hash_len;
|
||||||
|
int line_pos;
|
||||||
|
|
||||||
|
} pot_orig_line_entry_t;
|
||||||
|
|
||||||
typedef struct restore_data
|
typedef struct restore_data
|
||||||
{
|
{
|
||||||
int version;
|
int version;
|
||||||
|
@ -822,6 +822,12 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
for (u64 hash_pos = 0; hash_pos < hashes_avail; hash_pos++)
|
for (u64 hash_pos = 0; hash_pos < hashes_avail; hash_pos++)
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Initialize some values for later use
|
||||||
|
*/
|
||||||
|
|
||||||
|
hashes_buf[hash_pos].orig_line_pos = hash_pos;
|
||||||
|
|
||||||
hashes_buf[hash_pos].digest = ((char *) digests_buf) + (hash_pos * hashconfig->dgst_size);
|
hashes_buf[hash_pos].digest = ((char *) digests_buf) + (hash_pos * hashconfig->dgst_size);
|
||||||
|
|
||||||
if (hashconfig->is_salted == true)
|
if (hashconfig->is_salted == true)
|
||||||
|
@ -74,6 +74,16 @@ int sort_pot_tree_by_hash (const void *v1, const void *v2)
|
|||||||
return sort_by_hash (h1, h2, hc);
|
return sort_by_hash (h1, h2, hc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this function is used to reproduce the hash ordering based on the original input hash file
|
||||||
|
|
||||||
|
int sort_pot_orig_line (const void *v1, const void *v2)
|
||||||
|
{
|
||||||
|
const pot_orig_line_entry_t *t1 = (const pot_orig_line_entry_t *) v1;
|
||||||
|
const pot_orig_line_entry_t *t2 = (const pot_orig_line_entry_t *) v2;
|
||||||
|
|
||||||
|
return t1->line_pos > t2->line_pos;
|
||||||
|
}
|
||||||
|
|
||||||
// the problem with the GNU tdestroy () function is that it doesn't work with mingw etc
|
// the problem with the GNU tdestroy () function is that it doesn't work with mingw etc
|
||||||
// there are 2 alternatives:
|
// there are 2 alternatives:
|
||||||
// 1. recursively delete the entries with entry->left and entry->right
|
// 1. recursively delete the entries with entry->left and entry->right
|
||||||
@ -648,6 +658,9 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx)
|
|||||||
u32 salts_cnt = hashes->salts_cnt;
|
u32 salts_cnt = hashes->salts_cnt;
|
||||||
salt_t *salts_buf = hashes->salts_buf;
|
salt_t *salts_buf = hashes->salts_buf;
|
||||||
|
|
||||||
|
pot_orig_line_entry_t *final_buf = (pot_orig_line_entry_t *) hccalloc (hashes->hashes_cnt, sizeof (pot_orig_line_entry_t));
|
||||||
|
u32 final_cnt = 0;
|
||||||
|
|
||||||
if (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT)
|
if (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT)
|
||||||
{
|
{
|
||||||
// this implementation will work for LM only
|
// this implementation will work for LM only
|
||||||
@ -757,7 +770,17 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
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);
|
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);
|
//EVENT_DATA (EVENT_POTFILE_HASH_SHOW, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_buf = (u8 *) hcmalloc (tmp_len);
|
||||||
|
|
||||||
|
memcpy (final_buf[final_cnt].hash_buf, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_len = tmp_len;
|
||||||
|
|
||||||
|
final_buf[final_cnt].line_pos = hash1->orig_line_pos;
|
||||||
|
|
||||||
|
final_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -808,7 +831,6 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
tmp_buf[0] = 0;
|
tmp_buf[0] = 0;
|
||||||
|
|
||||||
|
|
||||||
// special case for collider modes: we do not use the $HEX[] format within the hash itself
|
// special case for collider modes: we do not use the $HEX[] format within the hash itself
|
||||||
// therefore we need to convert the $HEX[] password into hexadecimal (without "$HEX[" and "]")
|
// therefore we need to convert the $HEX[] password into hexadecimal (without "$HEX[" and "]")
|
||||||
|
|
||||||
@ -837,11 +859,32 @@ int potfile_handle_show (hashcat_ctx_t *hashcat_ctx)
|
|||||||
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);
|
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);
|
//EVENT_DATA (EVENT_POTFILE_HASH_SHOW, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_buf = (u8 *) hcmalloc (tmp_len);
|
||||||
|
|
||||||
|
memcpy (final_buf[final_cnt].hash_buf, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_len = tmp_len;
|
||||||
|
|
||||||
|
final_buf[final_cnt].line_pos = hash->orig_line_pos;
|
||||||
|
|
||||||
|
final_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qsort (final_buf, final_cnt, sizeof (pot_orig_line_entry_t), sort_pot_orig_line);
|
||||||
|
|
||||||
|
for (u32 final_pos = 0; final_pos < final_cnt; final_pos++)
|
||||||
|
{
|
||||||
|
EVENT_DATA (EVENT_POTFILE_HASH_SHOW, final_buf[final_pos].hash_buf, final_buf[final_pos].hash_len);
|
||||||
|
|
||||||
|
hcfree (final_buf[final_pos].hash_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (final_buf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -857,6 +900,9 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx)
|
|||||||
u32 salts_cnt = hashes->salts_cnt;
|
u32 salts_cnt = hashes->salts_cnt;
|
||||||
salt_t *salts_buf = hashes->salts_buf;
|
salt_t *salts_buf = hashes->salts_buf;
|
||||||
|
|
||||||
|
pot_orig_line_entry_t *final_buf = (pot_orig_line_entry_t *) hccalloc (hashes->hashes_cnt, sizeof (pot_orig_line_entry_t));
|
||||||
|
u32 final_cnt = 0;
|
||||||
|
|
||||||
if (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT)
|
if (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT)
|
||||||
{
|
{
|
||||||
// this implementation will work for LM only
|
// this implementation will work for LM only
|
||||||
@ -933,7 +979,17 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, 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);
|
//EVENT_DATA (EVENT_POTFILE_HASH_LEFT, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_buf = (u8 *) hcmalloc (tmp_len);
|
||||||
|
|
||||||
|
memcpy (final_buf[final_cnt].hash_buf, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_len = tmp_len;
|
||||||
|
|
||||||
|
final_buf[final_cnt].line_pos = hash1->orig_line_pos;
|
||||||
|
|
||||||
|
final_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1008,10 +1064,31 @@ int potfile_handle_left (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
const int tmp_len = outfile_write (hashcat_ctx, (char *) out_buf, out_len, 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);
|
//EVENT_DATA (EVENT_POTFILE_HASH_LEFT, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_buf = (u8 *) hcmalloc (tmp_len);
|
||||||
|
|
||||||
|
memcpy (final_buf[final_cnt].hash_buf, tmp_buf, tmp_len);
|
||||||
|
|
||||||
|
final_buf[final_cnt].hash_len = tmp_len;
|
||||||
|
|
||||||
|
final_buf[final_cnt].line_pos = hash->orig_line_pos;
|
||||||
|
|
||||||
|
final_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qsort (final_buf, final_cnt, sizeof (pot_orig_line_entry_t), sort_pot_orig_line);
|
||||||
|
|
||||||
|
for (u32 final_pos = 0; final_pos < final_cnt; final_pos++)
|
||||||
|
{
|
||||||
|
EVENT_DATA (EVENT_POTFILE_HASH_LEFT, final_buf[final_pos].hash_buf, final_buf[final_pos].hash_len);
|
||||||
|
|
||||||
|
hcfree (final_buf[final_pos].hash_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (final_buf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user