以下是 4 次握手中第二条消息的 EAPOL 数据(在逻辑链路控制之后立即开始):
unsigned char eapol[] =
{
'\x01', // Version
'\x03', // Type
'\x00','\x77', // Length
'\xfe', // Key Descriptor Type
'\x01','\x0a', // Key information
'\x00','\x10', // Key length
// Replay counter
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x01',
// WPA Key Nounce
'\x77','\xd6','\x54','\xad','\x0c','\x1f','\xea','\x2f',
'\x20','\x99','\xf1','\xdd','\x1c','\xae','\xdb','\xd8',
'\xf7','\xe8','\x86','\xb0','\x81','\x60','\xed','\x7f',
'\x70','\xdd','\xbb','\x33','\xb6','\xf1','\xd9','\x98',
// Key IV
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key RSC
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key ID
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// MIC **************** CHANGE HERE ********************
// '\x0a','\x62','\x24','\x07','\x11','\x36','\xd5','\x67',
// '\x87','\xc0','\x7b','\x82','\x6b','\x06','\xf7','\xff',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key Data Length
'\x00','\x18',
// Key Data
'\xdd','\x16','\x00','\x50','\xf2','\x01','\x01','\x00',
'\x00','\x50','\xf2','\x04','\x01','\x00','\x00','\x50',
'\xf2','\x04','\x01','\x00','\x00','\x50','\xf2','\x02'
};
确保将 16 个字节的 MIC 字段替换为“\x00”,这样您就可以准备好根据 Michael 算法进行计算的有效 EAPOL 数据。
另外,请确保您使用基于 WPA 版本的正确算法。 WPA1 使用带有 MD5 哈希函数的 HMAC,WPA2 使用带有 SHA1 哈希的 HMAC,如您在 aircrack-ng 源代码中看到的:
if (ap->wpa.keyver == 1)
HMAC(EVP_md5(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);
else
HMAC(EVP_sha1(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);
我认为Python在HMAC对象中默认使用MD5。