Do not modify the original positions of mac1, mac2, nonce1 and nonce2 in hccap files

Should fix https://github.com/hashcat/oclHashcat/issues/288
pull/299/head
Jens Steube 8 years ago
parent e7a205cee6
commit 1bc9e3ec85

@ -1433,6 +1433,10 @@ typedef struct
u32 eapol[64];
int eapol_size;
int keyver;
u8 orig_mac1[6];
u8 orig_mac2[6];
u8 orig_nonce1[32];
u8 orig_nonce2[32];
} wpa_t;
@ -1600,7 +1604,7 @@ typedef struct
/* key-file handling */
u32 keyfile_len;
u32 keyfile[8];
u32 final_random_seed[8];
u32 transf_random_seed[8];
u32 enc_iv[4];

@ -64,6 +64,10 @@ typedef struct
uint eapol[64];
int eapol_size;
int keyver;
u8 orig_mac1[6];
u8 orig_mac2[6];
u8 orig_nonce1[32];
u8 orig_nonce2[32];
} wpa_t;
@ -144,7 +148,7 @@ typedef struct
/* key-file handling */
u32 keyfile_len;
u32 keyfile[8];
u32 final_random_seed[8];
u32 transf_random_seed[8];
u32 enc_iv[4];

@ -1070,35 +1070,20 @@ void status_display ()
{
wpa_t *wpa = (wpa_t *) data.esalts_buf;
uint pke[25] = { 0 };
char *pke_ptr = (char *) pke;
for (uint i = 0; i < 25; i++)
{
pke[i] = byte_swap_32 (wpa->pke[i]);
}
char mac1[6] = { 0 };
char mac2[6] = { 0 };
memcpy (mac1, pke_ptr + 23, 6);
memcpy (mac2, pke_ptr + 29, 6);
log_info ("Hash.Target....: %s (%02x:%02x:%02x:%02x:%02x:%02x <-> %02x:%02x:%02x:%02x:%02x:%02x)",
(char *) data.salts_buf[0].salt_buf,
mac1[0] & 0xff,
mac1[1] & 0xff,
mac1[2] & 0xff,
mac1[3] & 0xff,
mac1[4] & 0xff,
mac1[5] & 0xff,
mac2[0] & 0xff,
mac2[1] & 0xff,
mac2[2] & 0xff,
mac2[3] & 0xff,
mac2[4] & 0xff,
mac2[5] & 0xff);
wpa->orig_mac1[0],
wpa->orig_mac1[1],
wpa->orig_mac1[2],
wpa->orig_mac1[3],
wpa->orig_mac1[4],
wpa->orig_mac1[5],
wpa->orig_mac2[0],
wpa->orig_mac2[1],
wpa->orig_mac2[2],
wpa->orig_mac2[3],
wpa->orig_mac2[4],
wpa->orig_mac2[5]);
}
else if (data.hash_mode == 5200)
{
@ -4176,28 +4161,14 @@ static void *thread_outfile_remove (void *p)
wpa_t *wpas = (wpa_t *) data.esalts_buf;
wpa_t *wpa = &wpas[salt_pos];
uint pke[25] = { 0 };
char *pke_ptr = (char *) pke;
for (uint i = 0; i < 25; i++)
{
pke[i] = byte_swap_32 (wpa->pke[i]);
}
u8 mac1[6] = { 0 };
u8 mac2[6] = { 0 };
memcpy (mac1, pke_ptr + 23, 6);
memcpy (mac2, pke_ptr + 29, 6);
// compare hex string(s) vs binary MAC address(es)
for (uint i = 0, j = 0; i < 6; i++, j += 2)
{
if (mac1[i] != hex_to_u8 ((const u8 *) &mac1_pos[j]))
if (wpa->orig_mac1[i] != hex_to_u8 ((const u8 *) &mac1_pos[j]))
{
cracked = 0;
break;
}
}
@ -4207,9 +4178,10 @@ static void *thread_outfile_remove (void *p)
for (uint i = 0, j = 0; i < 6; i++, j += 2)
{
if (mac2[i] != hex_to_u8 ((const u8 *) &mac2_pos[j]))
if (wpa->orig_mac2[i] != hex_to_u8 ((const u8 *) &mac2_pos[j]))
{
cracked = 0;
break;
}
}
@ -11096,16 +11068,23 @@ int main (int argc, char **argv)
wpa_t *wpa = (wpa_t *) hashes_buf[hashes_cnt].esalt;
u8 *pke_ptr = (u8 *) wpa->pke;
// do the appending task
snprintf (salt_ptr + cur_pos,
rem_len,
":%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x",
pke_ptr[20], pke_ptr[27], pke_ptr[26], pke_ptr[25], pke_ptr[24], pke_ptr[31], // MAC1
pke_ptr[30], pke_ptr[29], pke_ptr[28], pke_ptr[35], pke_ptr[34], pke_ptr[33]); // MAC2
wpa->orig_mac1[0],
wpa->orig_mac1[1],
wpa->orig_mac1[2],
wpa->orig_mac1[3],
wpa->orig_mac1[4],
wpa->orig_mac1[5],
wpa->orig_mac2[0],
wpa->orig_mac2[1],
wpa->orig_mac2[2],
wpa->orig_mac2[3],
wpa->orig_mac2[4],
wpa->orig_mac2[5]);
// memset () the remaining part of the salt
@ -11972,28 +11951,14 @@ int main (int argc, char **argv)
{
wpa_t *wpa = (wpa_t *) found->esalt;
uint pke[25] = { 0 };
char *pke_ptr = (char *) pke;
for (uint i = 0; i < 25; i++)
{
pke[i] = byte_swap_32 (wpa->pke[i]);
}
u8 mac1[6] = { 0 };
u8 mac2[6] = { 0 };
memcpy (mac1, pke_ptr + 23, 6);
memcpy (mac2, pke_ptr + 29, 6);
// compare hex string(s) vs binary MAC address(es)
for (uint i = 0, j = 0; i < 6; i++, j += 2)
{
if (mac1[i] != hex_to_u8 ((const u8 *) &mac1_pos[j]))
if (wpa->orig_mac1[i] != hex_to_u8 ((const u8 *) &mac1_pos[j]))
{
found = NULL;
break;
}
}
@ -12003,9 +11968,10 @@ int main (int argc, char **argv)
for (uint i = 0, j = 0; i < 6; i++, j += 2)
{
if (mac2[i] != hex_to_u8 ((const u8 *) &mac2_pos[j]))
if (wpa->orig_mac2[i] != hex_to_u8 ((const u8 *) &mac2_pos[j]))
{
found = NULL;
break;
}
}

@ -6581,35 +6581,20 @@ void ascii_digest (char *out_buf, uint salt_pos, uint digest_pos)
wpa_t *wpa = &wpas[salt_pos];
uint pke[25] = { 0 };
char *pke_ptr = (char *) pke;
for (uint i = 0; i < 25; i++)
{
pke[i] = byte_swap_32 (wpa->pke[i]);
}
unsigned char mac1[6] = { 0 };
unsigned char mac2[6] = { 0 };
memcpy (mac1, pke_ptr + 23, 6);
memcpy (mac2, pke_ptr + 29, 6);
snprintf (out_buf, len-1, "%s:%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x",
(char *) salt.salt_buf,
mac1[0],
mac1[1],
mac1[2],
mac1[3],
mac1[4],
mac1[5],
mac2[0],
mac2[1],
mac2[2],
mac2[3],
mac2[4],
mac2[5]);
wpa->orig_mac1[0],
wpa->orig_mac1[1],
wpa->orig_mac1[2],
wpa->orig_mac1[3],
wpa->orig_mac1[4],
wpa->orig_mac1[5],
wpa->orig_mac2[0],
wpa->orig_mac2[1],
wpa->orig_mac2[2],
wpa->orig_mac2[3],
wpa->orig_mac2[4],
wpa->orig_mac2[5]);
}
else if (hash_mode == 4400)
{
@ -8787,19 +8772,10 @@ void to_hccap_t (hccap_t *hccap, uint salt_pos, uint digest_pos)
memcpy (hccap->eapol, wpa->eapol, wpa->eapol_size);
}
uint pke_tmp[25] = { 0 };
for (int i = 5; i < 25; i++)
{
pke_tmp[i] = byte_swap_32 (wpa->pke[i]);
}
char *pke_ptr = (char *) pke_tmp;
memcpy (hccap->mac1, pke_ptr + 23, 6);
memcpy (hccap->mac2, pke_ptr + 29, 6);
memcpy (hccap->nonce1, pke_ptr + 67, 32);
memcpy (hccap->nonce2, pke_ptr + 35, 32);
memcpy (hccap->mac1, wpa->orig_mac1, 6);
memcpy (hccap->mac2, wpa->orig_mac2, 6);
memcpy (hccap->nonce1, wpa->orig_nonce1, 32);
memcpy (hccap->nonce2, wpa->orig_nonce2, 32);
char *digests_buf_ptr = (char *) data.digests_buf;
@ -10259,6 +10235,11 @@ int wpa_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
wpa->pke[i] = byte_swap_32 (wpa->pke[i]);
}
memcpy (wpa->orig_mac1, in.mac1, 6);
memcpy (wpa->orig_mac2, in.mac2, 6);
memcpy (wpa->orig_nonce1, in.nonce1, 32);
memcpy (wpa->orig_nonce2, in.nonce2, 32);
wpa->keyver = in.keyver;
if (wpa->keyver > 255)

Loading…
Cancel
Save