Archived. The hash modes that read this format are deprecated and refuse to run. Convert your capture and use -m 22000, see Cracking WPA/WPA2. This page is kept for reference and is listed in the Archive.
hccapx is an outdated custom format developed specifically for hashcat.
The hash modes that read this format are deprecated. hashcat refuses -m 2500, -m 2501, -m 16800 and -m 16801 and tells you to use -m 22000 instead. --deprecated-check-disable forces them to run, but the format itself cannot carry what 22000 carries. Convert your capture with hcxpcapngtool and use the 22000 workflow.
The hccapx format is an improved version of the old hccap format. Both were designed for hash mode -m 2500 (WPA/WPA2).
A valid hashcat binary file (with the .hccapx extension) contains one or more instances of the structure documented below. To merge several .hccapx files into one file (for example, multi.hccapx), concatenate them:
Linux:
cat single_hccapxs/*.hccapx > all_in_one/multi.hccapx
Windows:
copy /b single_hccapxs\*.hccapx all_in_one\multi.hccapx
or select single ones:
copy /b single_hccapxs\1.hccapx + single_hccapxs\2.hccapx all_in_one\multi.hccapx
We strongly recommend using cap2hccapx from hashcat-utils to convert .cap files to .hccapx files. Use the generated files as input to hashcat.
hccapx files are binary, not plain-text files. To inspect one, use a hex editor (such as xxd on Linux). If you open an .hccapx file in a text editor, you will see what looks like a random set of bytes.
The structure of .hccapx is detailed below. The screenshot also shows the offsets in a simple example.
The signature of a .hccapx file is always “HCPX” (or 0x58504348):
#define HCCAPX_SIGNATURE 0x58504348 // HCPX
The .hccapx format contains a version number. Version 4 is the latest version of this format. Earlier .hccapx files used version 2. The old .hccap format used version 1.
struct hccapx
{
u32 signature;
u32 version;
u8 message_pair;
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];
} __attribute__((packed));
| Field name | Offsets (hex) | Offsets (dec) | Field description |
|---|---|---|---|
| signature | 0x00 to 0x03 | 0 to 3 | the signature (file magic) of .hccapx files, it is always the string HCPX |
| version | 0x04 to 0x07 | 4 to 7 | the version number of the .hccapx file format |
| message_pair | 0x08 | 8 | possible values range from 0 to 5 or 128 to 133 (see message_pair table below) 1 |
| essid_len | 0x09 | 9 | the length of the network name (ESSID) |
| essid | 0x0a to 0x29 | 10 to 41 | the network name (ESSID) |
| keyver | 0x2a | 42 | set to 1 if WPA is used, other values (preferably 2) means WPA2 |
| keymic | 0x2b to 0x3a | 43 to 58 | the actual hash value (MD5 for WPA, SHA1 for WPA2) truncated to 128 bit (16 bytes) |
| mac_ap | 0x3b to 0x40 | 59 to 64 | the mac address of the access point (BSSID) |
| nonce_ap | 0x41 to 0x60 | 65 to 96 | nonce (random salt) generated by the access point |
| mac_sta | 0x61 to 0x66 | 97 to 102 | the mac address of the client connecting to the access point |
| nonce_sta | 0x67 to 0x86 | 103 to 134 | nonce (random salt) generated by the client connecting to the access point |
| eapol_len | 0x87 to 0x88 | 135 to 136 | the length of the EAPOL |
| eapol | 0x89 to 0x188 | 137 to 392 | the EAPOL (max 256 bytes) |
Note: each .hccapx structure has 393 bytes (with offset 0 - first byte - to offset 392 - last byte -)
1 message_pair was extended with some additional information: the highest bit could be used to indicate if the message pair matching was done based on replay counter or not. Whenever the highest bit (bit 8) was set to 1 it means that the replay counter was ignored (i.e. it was not considered at all by the matching algorithm):
| message_pair (hex) | message_pair (dec) | Highest bit | Meaning |
|---|---|---|---|
| 0x00 to 0x05 | 0 to 5 | 0 | Message pair according to table below with replay counter matching |
| 0x80 to 0x85 | 128 to 133 | 1 | Message pair according to table below, replay counter was ignored |
Hashcat currently takes no action based on this bit, but the information may be useful to third-party tools and for analysis or statistics. Hashcat could also use it in the future.
The message_pair value describes which two messages from the four-way handshake were combined to form the .hccapx structure. The pair always consists of one message from the AP (access point) and one from the STA (client).
The message_pair value also indicates which of the two messages the EAPOL comes from. This is interesting data, but not necessarily needed for hashcat to be able to crack the hash.
It can also be important to know whether only messages 1 and 2 were captured, or whether messages 3 and/or 4 were captured as well. Capturing message 3 or 4 is strong evidence that the connection was established and that the client used the correct password.
The following table lists all values currently allowed for the message_pair field:
| message_pair value | Messages of the handshake | Source of the EAPOL | AP message | STA message | Replay counter matching |
|---|---|---|---|---|---|
| 0 | M1 + M2 | M2 | M1 | M2 | Yes |
| 1 | M1 + M4 | M4 | M1 | M4 | Yes |
| 2 | M2 + M3 | M2 | M3 | M2 | Yes |
| 3 | M2 + M3 | M3 | M3 | M2 | Yes |
| 4 | M3 + M4 | M3 | M3 | M4 | Yes |
| 5 | M3 + M4 | M4 | M3 | M4 | Yes |
| 128 | M1 + M2 | M2 | M1 | M2 | No |
| 129 | M1 + M4 | M4 | M1 | M4 | No |
| 130 | M2 + M3 | M2 | M3 | M2 | No |
| 131 | M2 + M3 | M3 | M3 | M2 | No |
| 132 | M3 + M4 | M3 | M3 | M4 | No |
| 133 | M3 + M4 | M4 | M3 | M4 | No |
Note: M1 means message 1 of the handshake, M2 means message 2 of the handshake, M3 means message 3 of the handshake and M4 means message 4 of the 4-way handshake