Table of Contents

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 format description

Description

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

cap2hccapx recommendation

We strongly recommend using cap2hccapx from hashcat-utils to convert .cap files to .hccapx files. Use the generated files as input to hashcat.

Format overview

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.

Screenshot

hccapx_specs.jpg

C Structure

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));

Detailed Structure

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.

Message pair table

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