拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

wifit3 hc22000 文件格式深度解析:为什么 M2 帧才是 WPA 握手的基石

wifit3 hc22000 文件格式深度解析:为什么 M2 帧才是 WPA 握手的基石

wifit3 hc22000 文件格式深度解析:为什么 M2 帧才是 WPA 握手的基石

【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3

wifit3 是一款跨平台的纯 USB 无线审计工具,支持 Linux、Windows 与 macOS,能被动嗅探或主动驱离客户端来捕获 WPA/WPA2 四次握手,并直接导出 hashcat-m 22000格式(.hc22000)的破解文件。这篇文章带你彻底看懂 hc22000 文件格式的 9 个字段,并回答一个关键问题:为什么 M2 帧才是整个握手能"可破解"的基石。哪怕你是第一次接触 WPA 破解的新手,也能读完就上手。

先搞懂:hc22000 文件到底是什么?

.hc22000是 hashcat-m 22000(WPA-PBKDF2-PMKID+EAPOL)模式的输入文件。它不是抓包文件,而是"给破解器喂的浓缩配方":每行一条记录,只保留 hashcat 暴力猜密码所需的最小信息——猜对了就重算校验值比对,猜错继续下一轮。

wifit3 为每个路由器(AP)维护一个聚合文件,命名规则是SSID_BSSID.hc22000(如MyHome_12-34-56-78-9a-bc.hc22000),握手与 PMKID 记录都追加进去并按值去重,见 src/wifit3/persist/save.py。

通用格式:一行 9 个字段

一条 hashline 用*分隔,共 9 个字段(规格定义在 src/wifit3/crack/hc22000_format.py):

WPA*类型*PMKID或MIC*路由器MAC*客户端MAC*SSID的HEX*ANonce*EAPOL载荷HEX*消息对
字段说明WPA*01(PMKID)行WPA*02(EAPOL)行
1协议名,固定WPA✅✅
2类型:01=PMKID /02=EAPOL 握手✅✅
3PMKID(01)或 MIC 校验值(02),HEX✅✅
4路由器 MAC,紧凑 12 位 HEX✅✅
5客户端 MAC,紧凑 12 位 HEX✅✅
6SSID 的 UTF-8 HEX(隐 SSID 为空)✅✅
7ANonce(64 位 HEX)留空✅
8完整 EAPOL 载荷 HEX(MIC 已置零)留空✅
9消息对 + 容错位(如c0)留空✅

所以PMKID 行只有 6 个字段,EAPOL 行填满 9 个——这也是解析器 parse_hc22000() 去重时区分两者的依据。

基石解析:M1~M4 中谁真正有价值?

WPA/WPA2 四次握手由 4 条 EAPOL-Key 消息组成。hashcat 的破解原理是:猜出 PMK 后,用ANonce + SNonce + 两个 MAC推导出 PTK,再重算捕获帧的 MIC 并比对。它需要两样东西:ANonce(来自 AP)和SNonce + MIC + EAPOL 原始字节(来自客户端)。四条消息的"含金量"完全不同:

消息方向携带的 Nonce带 MIC?对破解的价值
M1AP → 客户端ANonce❌只能当 ANonce"捐赠者"
M2客户端 → APSNonce✅钥匙石:SNonce + MIC + EAPOL 全齐
M3AP → 客户端ANonce(重发)✅又是 ANonce 捐赠者
M4客户端 → AP通常被置零✅仅当 SNonce 未被清零才可用

  • M1 不行:它压根没有 MIC,hashcat 拿它没法重算校验;
  • M4 通常不行:很多客户端(如 iPhone)把 M4 里的 SNonce 清零,而 hashcat 恰恰要从"带 MIC 的那条帧"里读回 SNonce——读不到就算完;
  • M2 是基石:它是唯一稳定同时提供 SNonce、MIC 和完整 EAPOL 字节的消息,所以 wifit3 的配对算法只认"完整 M2(或罕见的非零 M4)"作为钥匙石,见 src/wifit3/crack/handshake.py。

消息对对照表:哪些组合能破解?

有了钥匙石,还需要一个同次握手的 ANonce 捐赠者(M1 或 M3),就构成 hashcat 认可的"消息对":

消息对消息对字节能否破解
M1+M20x00✅ 永远可以(M2 完整)
M2+M30x02✅ 永远可以
M3+M40x05⚠️ 仅当 M4 的 nonce 非零
M1+M40x01⚠️ 仅当 M4 的 nonce 非零
以 M3 为 EAPOL 源的0x03/0x04—hashcat 标记"unused",wifit3 从不输出

wifit3 的配对逻辑(crackable_pairs())模拟了 hcxpcapngtool 的容错:捐赠者与钥匙石的重放计数器差距 ≤ 8、两帧到达时间差 ≤ 5 秒、且较低编号消息必须先到;候选按"差距最小 → AP 已确认的对(M2+M3/M3+M4)优先 → 时间最近"择优。每个钥匙石、每个 ANonce 只输出一次,避免跨关联误配,而真正的重新握手(ANonce 刷新)会新增一行记录。

从捕获到落盘:wifit3 如何生成 hc22000 文件

wifit3 的设计原则是**"已捕获"与"可破解"永不矛盾**:判定"捕获成功"和生成 hashline 走的是同一条代码路径(crackable_pairs())。落盘流程:

  1. 配对成立 → 逐条生成WPA*02行(EAPOL 载荷中 MIC 位置置零,由 hashcat 重算);
  2. 有 PMKID 且为纯 PSK 时 → 额外生成一行WPA*01;
  3. 写入{SSID}_{BSSID}.hc22000:02 行按ANonce去重,01 行按PMKID 值去重,只追加新记录;
  4. 旧版拆分文件(_handshake.hc22000/_pmkid.hc22000)启动时自动合并进聚合文件(consolidate_hc_files());
  5. 若开启 pcap 保存,还会同时导出原始.pcap备查。

相关源码:行生成 hc22000_format.py、配对与 AKM 门槛 handshake.py、落盘去重 save.py、行解析 persist/common.py、格式测试 tests/crack/test_hc22000.py。

AKM 门槛:抓到 M2 也未必能破

最后一道关卡是加密套件(AKM)。只有PMK 由密码派生(PBKDF2)时 22000 模式才有意义:

  • EAPOL(02 行):SAE(WPA3)、FT 快速漫游、企业 EAP、OWE 一律判为不可破解,wifit3 会给出SAE/EAP/OWE/FT标签而非假装成功;
  • PMKID(01 行):22000 的 PMKID 路径只支持 HMAC-SHA1,因此仅纯 PSK的 PMKID 会输出,其余一律静默丢弃。

这也是 wifit3 宁可少存、也不让你白跑破解器的原因。

拿到文件之后:3 步丢给 hashcat

hashcat -m 22000 MyHome_12-34-56-78-9a-bc.hc22000 rockyou.txt
  1. 把.hc22000文件拷到装有 hashcat 的机器;
  2. 指定一个密码字典(或规则文件);
  3. 命中后输出行首对应WPA*02记录的 SSID,即明文密码;WPA*01行则是 M2 缺席时 PMKID 的备胎。

总结

hc22000 的本质是"把 hashcat 需要的东西原样递过去",而M2 帧恰好是唯一同时握有 SNonce、MIC 与 EAPOL 字节的消息——这就是它成为握手基石的原因。记住三个判断口诀:

  • 看 M2:有完整 M2(或 nonce 非零的 M4)才有WPA*02行;
  • 看 ANonce:M1/M3 只负责捐 ANonce,同一 ANonce 去重后只留一行;
  • 看 AKM:SAE/EAP/OWE/FT 抓到也白抓,wifit3 会如实标注。

对新手而言,只要 wifit3 提示"握手已保存",就代表文件里已有一行可破解的WPA*02记录,直接交给 hashcat 即可。

【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表