From 717da7f4f2d102743f814804b4832cc046f08bc6 Mon Sep 17 00:00:00 2001 From: jsteube Date: Mon, 6 Feb 2017 17:03:42 +0100 Subject: [PATCH] Added support for loading hccapx files --- OpenCL/inc_types.cl | 21 ++++---- OpenCL/m02500.cl | 12 ++--- docs/changes.txt | 1 + include/interface.h | 46 ++++++++++-------- include/types.h | 6 ++- src/hashes.c | 18 +++---- src/interface.c | 116 +++++++++++++++++++++++--------------------- src/status.c | 26 +++++----- src/usage.c | 4 +- 9 files changed, 132 insertions(+), 118 deletions(-) diff --git a/OpenCL/inc_types.cl b/OpenCL/inc_types.cl index f1800fc23..86b5fc794 100644 --- a/OpenCL/inc_types.cl +++ b/OpenCL/inc_types.cl @@ -784,17 +784,18 @@ typedef struct } pdf_t; -typedef struct +typedef struct wpa { - u32 pke[25]; - u32 eapol[64]; - int eapol_size; - int keyver; - u8 orig_mac1[6]; - u8 orig_mac2[6]; - u8 orig_nonce1[32]; - u8 orig_nonce2[32]; - int essid_reuse; + u32 pke[25]; + u32 eapol[64]; + u16 eapol_len; + u8 authenticated; + u8 keyver; + u8 orig_mac_ap[6]; + u8 orig_mac_sta[6]; + u8 orig_nonce_ap[32]; + u8 orig_nonce_sta[32]; + int essid_reuse; } wpa_t; diff --git a/OpenCL/m02500.cl b/OpenCL/m02500.cl index 5def5f32d..04646364c 100644 --- a/OpenCL/m02500.cl +++ b/OpenCL/m02500.cl @@ -916,12 +916,12 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul hmac_md5_pad_S (w0, w1, w2, w3, ipad, opad); - int eapol_size = wpa_bufs[salt_pos].eapol_size; + int eapol_len = wpa_bufs[salt_pos].eapol_len; int eapol_left; int eapol_off; - for (eapol_left = eapol_size, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16) + for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16) { w0[0] = wpa_bufs[salt_pos].eapol[eapol_off + 0]; w0[1] = wpa_bufs[salt_pos].eapol[eapol_off + 1]; @@ -957,7 +957,7 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul w2[3] = wpa_bufs[salt_pos].eapol[eapol_off + 11]; w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12]; w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13]; - w3[2] = (64 + eapol_size) * 8; + w3[2] = (64 + eapol_len) * 8; w3[3] = 0; u32 digest1[4]; @@ -998,12 +998,12 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul hmac_sha1_pad_S (w0, w1, w2, w3, ipad, opad); - int eapol_size = wpa_bufs[salt_pos].eapol_size; + int eapol_len = wpa_bufs[salt_pos].eapol_len; int eapol_left; int eapol_off; - for (eapol_left = eapol_size, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16) + for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16) { w0[0] = wpa_bufs[salt_pos].eapol[eapol_off + 0]; w0[1] = wpa_bufs[salt_pos].eapol[eapol_off + 1]; @@ -1040,7 +1040,7 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12]; w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13]; w3[2] = 0; - w3[3] = (64 + eapol_size) * 8; + w3[3] = (64 + eapol_len) * 8; u32 digest2[5]; diff --git a/docs/changes.txt b/docs/changes.txt index 29da622a7..a6424ce09 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -7,6 +7,7 @@ - Added support for parsing 7-Zip hashes with LZMA/LZMA2 compression indicator set to a non-zero value - Added support for decompressing LZMA1/LZMA2 data for -m 11600 = 7-Zip to validate the CRC - Added support for showing all user names with --show and --left if --username was specified +- Added support for loading hccapx files ## ## Algorithms diff --git a/include/interface.h b/include/interface.h index 08c0d4d03..85c79394b 100644 --- a/include/interface.h +++ b/include/interface.h @@ -176,12 +176,13 @@ typedef struct wpa { u32 pke[25]; u32 eapol[64]; - int eapol_size; - int keyver; - u8 orig_mac1[6]; - u8 orig_mac2[6]; - u8 orig_nonce1[32]; - u8 orig_nonce2[32]; + u16 eapol_len; + u8 authenticated; + u8 keyver; + u8 orig_mac_ap[6]; + u8 orig_mac_sta[6]; + u8 orig_nonce_ap[32]; + u8 orig_nonce_sta[32]; int essid_reuse; } wpa_t; @@ -809,22 +810,27 @@ typedef struct struct_psafe2_hdr } psafe2_hdr; -typedef struct hccap +#define HCCAPX_SIGNATURE 0x58504348 // HCPX + +struct hccapx { - char essid[36]; + u32 signature; + u32 version; + u8 authenticated; + u8 essid_len; + u8 essid[32]; + u8 keyver; + u8 keymic[16]; + u8 mac_ap[6]; + u8 nonce_ap[32]; + u8 mac_sta[6]; + u8 nonce_sta[32]; + u16 eapol_len; + u8 eapol[256]; - u8 mac1[6]; - u8 mac2[6]; - u8 nonce1[32]; - u8 nonce2[32]; +} __attribute__((packed)); - u8 eapol[256]; - int eapol_size; - - int keyver; - u8 keymic[16]; - -} hccap_t; +typedef struct hccapx hccapx_t; /** * hashtypes enums @@ -1722,7 +1728,7 @@ char *stroptitype (const u32 opti_type); char *strhashtype (const u32 hash_mode); char *strparser (const u32 parser_status); -void to_hccap_t (hashcat_ctx_t *hashcat_ctx, hccap_t *hccap, const u32 salt_pos, const u32 digest_pos); +void to_hccapx_t (hashcat_ctx_t *hashcat_ctx, hccapx_t *hccapx, const u32 salt_pos, const u32 digest_pos); void wpa_essid_reuse (hashcat_ctx_t *hashcat_ctx); diff --git a/include/types.h b/include/types.h index 559837419..e607da77a 100644 --- a/include/types.h +++ b/include/types.h @@ -433,8 +433,8 @@ typedef enum parser_rc PARSER_SALT_ITERATION = -8, PARSER_SEPARATOR_UNMATCHED = -9, PARSER_SIGNATURE_UNMATCHED = -10, - PARSER_HCCAP_FILE_SIZE = -11, - PARSER_HCCAP_EAPOL_SIZE = -12, + PARSER_HCCAPX_FILE_SIZE = -11, + PARSER_HCCAPX_EAPOL_LEN = -12, PARSER_PSAFE2_FILE_SIZE = -13, PARSER_PSAFE3_FILE_SIZE = -14, PARSER_TC_FILE_SIZE = -15, @@ -453,6 +453,8 @@ typedef enum parser_rc PARSER_LUKS_KEY_DISABLED = -28, PARSER_LUKS_KEY_STRIPES = -29, PARSER_LUKS_HASH_CIPHER = -30, + PARSER_HCCAPX_SIGNATURE = -31, + PARSER_HCCAPX_VERSION = -32, PARSER_UNKNOWN_ERROR = -255 } parser_rc_t; diff --git a/src/hashes.c b/src/hashes.c index dd5f64183..3ef5f4110 100644 --- a/src/hashes.c +++ b/src/hashes.c @@ -166,11 +166,11 @@ int save_hash (hashcat_ctx_t *hashcat_ctx) { if (hashconfig->hash_mode == 2500) { - hccap_t hccap; + hccapx_t hccapx; - to_hccap_t (hashcat_ctx, &hccap, salt_pos, digest_pos); + to_hccapx_t (hashcat_ctx, &hccapx, salt_pos, digest_pos); - fwrite (&hccap, sizeof (hccap_t), 1, fp); + fwrite (&hccapx, sizeof (hccapx_t), 1, fp); } else { @@ -477,7 +477,7 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx) return -1; } - hashes_avail = st.st_size / sizeof (hccap_t); + hashes_avail = st.st_size / sizeof (hccapx_t); } else if (hashconfig->hash_mode == 14600) { @@ -713,7 +713,7 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx) { if (hash_len == 0) { - event_log_error (hashcat_ctx, "hccap file not specified"); + event_log_error (hashcat_ctx, "hccapx file not specified"); return -1; } @@ -733,18 +733,18 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx) if (hashes_avail < 1) { - event_log_error (hashcat_ctx, "hccap file is empty or corrupt"); + event_log_error (hashcat_ctx, "hccapx file is empty or corrupt"); fclose (fp); return -1; } - char *in = (char *) hcmalloc (sizeof (hccap_t)); + char *in = (char *) hcmalloc (sizeof (hccapx_t)); while (!feof (fp)) { - const int nread = fread (in, sizeof (hccap_t), 1, fp); + const int nread = fread (in, sizeof (hccapx_t), 1, fp); if (nread == 0) break; @@ -755,7 +755,7 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx) break; } - parser_status = hashconfig->parse_func ((u8 *) in, sizeof (hccap_t), &hashes_buf[hashes_cnt], hashconfig); + parser_status = hashconfig->parse_func ((u8 *) in, sizeof (hccapx_t), &hashes_buf[hashes_cnt], hashconfig); if (parser_status != PARSER_OK) { diff --git a/src/interface.c b/src/interface.c index 05fb40082..b7199644a 100644 --- a/src/interface.c +++ b/src/interface.c @@ -51,8 +51,8 @@ static const char PA_007[] = "Salt-value exception"; static const char PA_008[] = "Salt-iteration count exception"; static const char PA_009[] = "Separator unmatched"; static const char PA_010[] = "Signature unmatched"; -static const char PA_011[] = "Invalid hccap filesize"; -static const char PA_012[] = "Invalid eapol size"; +static const char PA_011[] = "Invalid hccapx file size"; +static const char PA_012[] = "Invalid hccapx eapol size"; static const char PA_013[] = "Invalid psafe2 filesize"; static const char PA_014[] = "Invalid psafe3 filesize"; static const char PA_015[] = "Invalid truecrypt filesize"; @@ -71,6 +71,8 @@ static const char PA_027[] = "Invalid LUKS key size"; static const char PA_028[] = "Disabled LUKS key detected"; static const char PA_029[] = "Invalid LUKS key AF stripes count"; static const char PA_030[] = "Invalid combination of LUKS hash type and cipher type"; +static const char PA_031[] = "Invalid hccapx signature"; +static const char PA_032[] = "Invalid hccapx version"; static const char PA_255[] = "Unknown error"; static const char HT_00000[] = "MD5"; @@ -2678,11 +2680,15 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED wpa_t *wpa = (wpa_t *) hash_buf->esalt; - hccap_t in; + hccapx_t in; memcpy (&in, input_buf, input_len); - if (in.eapol_size < 1 || in.eapol_size > 255) return (PARSER_HCCAP_EAPOL_SIZE); + if (in.signature != HCCAPX_SIGNATURE) return (PARSER_HCCAPX_SIGNATURE); + + if (in.version != 3) return (PARSER_HCCAPX_VERSION); + + if (in.eapol_len < 1 || in.eapol_len > 255) return (PARSER_HCCAPX_EAPOL_LEN); memcpy (digest, in.keymic, 16); @@ -2695,11 +2701,11 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED Wireless Device Nonce (referred to as Supplicant Nonce Snonce) */ - u32 salt_len = strlen ((const char *) in.essid); + u32 salt_len = in.essid_len; - if (salt_len > 36) return (PARSER_SALT_LENGTH); + if (salt_len > 32) return (PARSER_SALT_LENGTH); - memcpy (salt->salt_buf, in.essid, salt_len); + memcpy (salt->salt_buf, in.essid, in.essid_len); salt->salt_len = salt_len; @@ -2709,26 +2715,26 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED memcpy (pke_ptr, "Pairwise key expansion", 23); - if (memcmp (in.mac1, in.mac2, 6) < 0) + if (memcmp (in.mac_ap, in.mac_sta, 6) < 0) { - memcpy (pke_ptr + 23, in.mac1, 6); - memcpy (pke_ptr + 29, in.mac2, 6); + memcpy (pke_ptr + 23, in.mac_ap, 6); + memcpy (pke_ptr + 29, in.mac_sta, 6); } else { - memcpy (pke_ptr + 23, in.mac2, 6); - memcpy (pke_ptr + 29, in.mac1, 6); + memcpy (pke_ptr + 23, in.mac_sta, 6); + memcpy (pke_ptr + 29, in.mac_ap, 6); } - if (memcmp (in.nonce1, in.nonce2, 32) < 0) + if (memcmp (in.nonce_ap, in.nonce_sta, 32) < 0) { - memcpy (pke_ptr + 35, in.nonce1, 32); - memcpy (pke_ptr + 67, in.nonce2, 32); + memcpy (pke_ptr + 35, in.nonce_ap, 32); + memcpy (pke_ptr + 67, in.nonce_sta, 32); } else { - memcpy (pke_ptr + 35, in.nonce2, 32); - memcpy (pke_ptr + 67, in.nonce1, 32); + memcpy (pke_ptr + 35, in.nonce_sta, 32); + memcpy (pke_ptr + 67, in.nonce_ap, 32); } for (int i = 0; i < 25; i++) @@ -2736,34 +2742,26 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED 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); + memcpy (wpa->orig_mac_ap, in.mac_ap, 6); + memcpy (wpa->orig_mac_sta, in.mac_sta, 6); + memcpy (wpa->orig_nonce_ap, in.nonce_ap, 32); + memcpy (wpa->orig_nonce_sta, in.nonce_sta, 32); + + wpa->authenticated = in.authenticated; wpa->keyver = in.keyver; - if (wpa->keyver > 255) - { - // not sure yet how to transport this message - //event_log_warning (hashcat_ctx, "ATTENTION!"); - //event_log_warning (hashcat_ctx, " The WPA/WPA2 key version in your .hccap file is invalid!"); - //event_log_warning (hashcat_ctx, " This could be due to a recent aircrack-ng bug."); - //event_log_warning (hashcat_ctx, " The key version was automatically reset to a reasonable value."); - //event_log_warning (hashcat_ctx, ""); + if (wpa->keyver & ~7) return (PARSER_SALT_VALUE); - wpa->keyver &= 0xff; - } - - wpa->eapol_size = in.eapol_size; + wpa->eapol_len = in.eapol_len; u8 *eapol_ptr = (u8 *) wpa->eapol; - memcpy (eapol_ptr, in.eapol, wpa->eapol_size); + memcpy (eapol_ptr, in.eapol, wpa->eapol_len); - memset (eapol_ptr + wpa->eapol_size, 0, 256 - wpa->eapol_size); + memset (eapol_ptr + wpa->eapol_len, 0, 256 - wpa->eapol_len); - eapol_ptr[wpa->eapol_size] = 0x80; + eapol_ptr[wpa->eapol_len] = 0x80; if (wpa->keyver == 1) { @@ -2825,13 +2823,13 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED md5_64 (block, hash); - for (int i = 0; i < 6; i++) block_ptr[i + 0] = wpa->orig_mac1[i]; - for (int i = 0; i < 6; i++) block_ptr[i + 6] = wpa->orig_mac2[i]; + for (int i = 0; i < 6; i++) block_ptr[i + 0] = wpa->orig_mac_ap[i]; + for (int i = 0; i < 6; i++) block_ptr[i + 6] = wpa->orig_mac_sta[i]; md5_64 (block, hash); - for (int i = 0; i < 32; i++) block_ptr[i + 0] = wpa->orig_nonce1[i]; - for (int i = 0; i < 32; i++) block_ptr[i + 32] = wpa->orig_nonce2[i]; + for (int i = 0; i < 32; i++) block_ptr[i + 0] = wpa->orig_nonce_ap[i]; + for (int i = 0; i < 32; i++) block_ptr[i + 32] = wpa->orig_nonce_sta[i]; md5_64 (block, hash); @@ -14695,8 +14693,8 @@ char *strparser (const u32 parser_status) case PARSER_SALT_ITERATION: return ((char *) PA_008); case PARSER_SEPARATOR_UNMATCHED: return ((char *) PA_009); case PARSER_SIGNATURE_UNMATCHED: return ((char *) PA_010); - case PARSER_HCCAP_FILE_SIZE: return ((char *) PA_011); - case PARSER_HCCAP_EAPOL_SIZE: return ((char *) PA_012); + case PARSER_HCCAPX_FILE_SIZE: return ((char *) PA_011); + case PARSER_HCCAPX_EAPOL_LEN: return ((char *) PA_012); case PARSER_PSAFE2_FILE_SIZE: return ((char *) PA_013); case PARSER_PSAFE3_FILE_SIZE: return ((char *) PA_014); case PARSER_TC_FILE_SIZE: return ((char *) PA_015); @@ -14715,12 +14713,14 @@ char *strparser (const u32 parser_status) case PARSER_LUKS_KEY_DISABLED: return ((char *) PA_028); case PARSER_LUKS_KEY_STRIPES: return ((char *) PA_029); case PARSER_LUKS_HASH_CIPHER: return ((char *) PA_030); + case PARSER_HCCAPX_SIGNATURE: return ((char *) PA_031); + case PARSER_HCCAPX_VERSION: return ((char *) PA_032); } return ((char *) PA_255); } -void to_hccap_t (hashcat_ctx_t *hashcat_ctx, hccap_t *hccap, const u32 salt_pos, const u32 digest_pos) +void to_hccapx_t (hashcat_ctx_t *hashcat_ctx, hccapx_t *hccapx, const u32 salt_pos, const u32 digest_pos) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const hashes_t *hashes = hashcat_ctx->hashes; @@ -14729,18 +14729,22 @@ void to_hccap_t (hashcat_ctx_t *hashcat_ctx, hccap_t *hccap, const u32 salt_pos, const salt_t *salts_buf = hashes->salts_buf; const void *esalts_buf = hashes->esalts_buf; - memset (hccap, 0, sizeof (hccap_t)); + memset (hccapx, 0, sizeof (hccapx_t)); + + hccapx->signature = HCCAPX_SIGNATURE; + hccapx->version = 3; const salt_t *salt = &salts_buf[salt_pos]; - memcpy (hccap->essid, salt->salt_buf, salt->salt_len); + memcpy (hccapx->essid, salt->salt_buf, salt->salt_len); wpa_t *wpas = (wpa_t *) esalts_buf; wpa_t *wpa = &wpas[salt_pos]; - hccap->keyver = wpa->keyver; + hccapx->authenticated = wpa->authenticated; + hccapx->keyver = wpa->keyver; - hccap->eapol_size = wpa->eapol_size; + hccapx->eapol_len = wpa->eapol_len; if (wpa->keyver != 1) { @@ -14751,17 +14755,17 @@ void to_hccap_t (hashcat_ctx_t *hashcat_ctx, hccap_t *hccap, const u32 salt_pos, eapol_tmp[i] = byte_swap_32 (wpa->eapol[i]); } - memcpy (hccap->eapol, eapol_tmp, wpa->eapol_size); + memcpy (hccapx->eapol, eapol_tmp, wpa->eapol_len); } else { - memcpy (hccap->eapol, wpa->eapol, wpa->eapol_size); + memcpy (hccapx->eapol, wpa->eapol, wpa->eapol_len); } - 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); + memcpy (hccapx->mac_ap, wpa->orig_mac_ap, 6); + memcpy (hccapx->mac_sta, wpa->orig_mac_sta, 6); + memcpy (hccapx->nonce_ap, wpa->orig_nonce_ap, 32); + memcpy (hccapx->nonce_sta, wpa->orig_nonce_sta, 32); char *digests_buf_ptr = (char *) digests_buf; @@ -14778,11 +14782,11 @@ void to_hccap_t (hashcat_ctx_t *hashcat_ctx, hccap_t *hccap, const u32 salt_pos, digest_tmp[2] = byte_swap_32 (digest_ptr[2]); digest_tmp[3] = byte_swap_32 (digest_ptr[3]); - memcpy (hccap->keymic, digest_tmp, 16); + memcpy (hccapx->keymic, digest_tmp, 16); } else { - memcpy (hccap->keymic, digest_ptr, 16); + memcpy (hccapx->keymic, digest_ptr, 16); } } @@ -22486,7 +22490,7 @@ void hashconfig_benchmark_defaults (hashcat_ctx_t *hashcat_ctx, salt_t *salt, vo switch (hashconfig->hash_mode) { - case 2500: ((wpa_t *) esalt)->eapol_size = 128; + case 2500: ((wpa_t *) esalt)->eapol_len = 128; break; case 5300: ((ikepsk_t *) esalt)->nr_len = 1; ((ikepsk_t *) esalt)->msg_len = 1; diff --git a/src/status.c b/src/status.c index 2508a6030..e449ddea8 100644 --- a/src/status.c +++ b/src/status.c @@ -241,20 +241,20 @@ char *status_get_hash_target (const hashcat_ctx_t *hashcat_ctx) wpa_t *wpa = (wpa_t *) hashes->esalts_buf; - snprintf (tmp_buf, HCBUFSIZ_TINY - 1, "%s (%02x:%02x:%02x:%02x:%02x:%02x <-> %02x:%02x:%02x:%02x:%02x:%02x)", + snprintf (tmp_buf, HCBUFSIZ_TINY - 1, "%s (AP:%02x:%02x:%02x:%02x:%02x:%02x STA:%02x:%02x:%02x:%02x:%02x:%02x)", (char *) hashes->salts_buf[0].salt_buf, - 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]); + wpa->orig_mac_ap[0], + wpa->orig_mac_ap[1], + wpa->orig_mac_ap[2], + wpa->orig_mac_ap[3], + wpa->orig_mac_ap[4], + wpa->orig_mac_ap[5], + wpa->orig_mac_sta[0], + wpa->orig_mac_sta[1], + wpa->orig_mac_sta[2], + wpa->orig_mac_sta[3], + wpa->orig_mac_sta[4], + wpa->orig_mac_sta[5]); return tmp_buf; } diff --git a/src/usage.c b/src/usage.c index 4a02b68cf..2b4f658c2 100644 --- a/src/usage.c +++ b/src/usage.c @@ -8,7 +8,7 @@ static const char *USAGE_MINI[] = { - "Usage: %s [options]... hash|hashfile|hccapfile [dictionary|mask|directory]...", + "Usage: %s [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...", "", "Try --help for more help.", NULL @@ -18,7 +18,7 @@ static const char *USAGE_BIG[] = { "%s, advanced password recovery", "", - "Usage: %s [options]... hash|hashfile|hccapfile [dictionary|mask|directory]...", + "Usage: %s [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...", "", "- [ Options ] -", "",