From 1bc9e3ec85c377ce2684fe2cd050121427830b53 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 17 Apr 2016 10:44:14 +0200 Subject: [PATCH] Do not modify the original positions of mac1, mac2, nonce1 and nonce2 in hccap files Should fix https://github.com/hashcat/oclHashcat/issues/288 --- OpenCL/types_ocl.c | 6 ++- include/types.h | 6 ++- src/oclHashcat.c | 98 +++++++++++++++------------------------------- src/shared.c | 61 ++++++++++------------------- 4 files changed, 63 insertions(+), 108 deletions(-) diff --git a/OpenCL/types_ocl.c b/OpenCL/types_ocl.c index 730eae0d4..3a57b1266 100644 --- a/OpenCL/types_ocl.c +++ b/OpenCL/types_ocl.c @@ -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]; diff --git a/include/types.h b/include/types.h index ef31a3e1c..3306aeeeb 100644 --- a/include/types.h +++ b/include/types.h @@ -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]; diff --git a/src/oclHashcat.c b/src/oclHashcat.c index 4cd299a40..18da80f02 100644 --- a/src/oclHashcat.c +++ b/src/oclHashcat.c @@ -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; } } diff --git a/src/shared.c b/src/shared.c index bc415de19..8c4fdc3ce 100644 --- a/src/shared.c +++ b/src/shared.c @@ -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)