为什么半次WPA2握手就足够破解?WPA2-HalfHandshake-Crack的加密逻辑深度解析
【免费下载链接】WPA2-HalfHandshake-CrackThis is a POC to show it is possible to capture enough of a handshake with a user from a fake AP to crack a WPA2 network without knowing the passphrase of the actual AP.项目地址: https://gitcode.com/gh_mirrors/wp/WPA2-HalfHandshake-Crack
WPA2-HalfHandshake-Crack 是一款基于 Python 的 WPA2 半次握手破解工具(POC)。它证明了一个反直觉的事实:你不需要守在真实路由器旁等待完整四次握手——只要伪造一个与目标同名 SSID 的接入点(Fake AP),从一次注定失败的认证中截获客户端回传的两个握手报文,就能离线对 Wi-Fi 口令发动字典攻击。本文带你从零拆解这套"半次 WPA2 握手破解"背后的加密逻辑。
📡 项目速览:5 个文件看懂这个工具
| 文件 | 作用 |
|---|---|
| halfHandshake.py | 主程序入口:解析 pcap、按客户端配对半次握手报文 |
| cracker.py | 破解核心:PBKDF2 派生 → PTK 计算 → MIC 校验,多进程字典爆破 |
| pcapParser.py | pcap 捕获文件的读取与解析 |
| dictionary.txt | 内置字典,约 347 万条候选口令 |
| sampleHalfHandshake.cap | 一份可直接运行的"半次握手"示例抓包 |
🤔 温习一下:WPA2 四次握手在做什么?
当客户端连接 WPA2 网络时,双方会交换 4 条 EAPOL-Key 报文:
- Message 1(AP → 客户端):携带ANonce(AP 随机数)
- Message 2(客户端 → AP):携带SNonce(客户端随机数)和MIC(消息认证码)
- Message 3(AP → 客户端):确认并下发组密钥 GTK
- Message 4(客户端 → AP):最终确认
传统字典攻击等的是这 4 条报文"完整出现"。而关键洞察是:攻击者真正需要的只是 Message 1 + Message 2。第 3、4 条只是安装密钥用的确认消息,对离线字典爆破毫无价值。
这就是"半次握手"名字的由来——只有一半,信息量却已经足够。
🎯 为什么半次握手就够?Fake AP 攻击思路
传统攻击必须"守在真实 AP 旁边"等握手发生,WPA2-HalfHandshake-Crack 把这个前提打破了:
- 听:未关联的客户端会周期性广播明文 Probe Request(探测请求),里面写明它正在寻找哪个 SSID;
- 仿:攻击者架设一个SSID 完全相同、口令随意乱设的 Fake AP;
- 诱:客户端发现"家网"回来了,主动连接,完成 Message 1 + Message 2 的交换;
- 败:由于 Fake AP 并不知道真实口令,后续认证必然失败——但这一步已经不重要了;
- 破:拿抓下来的报文在本地跑字典攻击,还原出客户端真实使用的 Wi-Fi 口令。
换句话说:真实 AP 从未登场,客户端却亲手把"我掌握口令"的签名(MIC)递给了攻击者。
🔐 核心加密逻辑:从口令到 MIC 的 4 步推导
这部分对应 cracker.py 的实现。攻击者对字典里的每一句候选口令,都重复同样的推导:
第 1 步:PMK 派生(最耗时的瓶颈)PMK = PBKDF2(口令, SSID, 4096 次迭代, 32 字节)口令与 SSID 共同决定 PMK(预共享主密钥)。4096 次 PBKDF2 迭代正是 WPA2 刻意设置的"算力门槛"——每次猜测都要进行成百上千次哈希运算,这把 GPU 破解速度死死锁在低个位数/秒,所以 WPA2 口令破解拼的是字典命中率而非蛮力。
第 2 步:组装 PKE(密钥扩展材料)PKE = "Pairwise key expansion" + 两端 MAC 地址(按字典序小/大排列)+ ANonce 与 SNonce(同样小/大排列)。
第 3 步:PRF 展开得到 PTK以 PMK 为密钥对 PKE 执行 4 次 HMAC-SHA1 拼接,得到 80 字节的 PTK(成对临时密钥),源码中即hmac4times()函数。
第 4 步:MIC 校验,一击定胜负用 PTK 的前 16 字节(MKID)作密钥,对 Message 2 报文主体做 HMAC,算出 16 字节 MIC;若与客户端在 Message 2 中携带的 MIC 完全一致 →口令命中!
💡 一句话总结加密逻辑:口令 + SSID + 两个随机数 + 两端 MAC,共同决定了一个可验证的签名(MIC)。只要截获 Message 1/2,攻击者就握有完整的验证条件——而 SSID 本身还是明文的。
⚙️ 快速上手:5 分钟跑通示例
git clone https://gitcode.com/gh_mirrors/wp/WPA2-HalfHandshake-Crack cd WPA2-HalfHandshake-Crack python setup.py install python halfHandshake.py -r sampleHalfHandshake.cap -m 48d224f0d128 -s "no place like 127.0.0.1"参数速查:
| 参数 | 含义 |
|---|---|
| -r | pcap 抓包文件(半次/完整握手均可) |
| -m | Fake AP 的 MAC 地址(去掉冒号) |
| -s | AP 的 SSID |
| -d | 可选,自定义字典;缺省使用 dictionary.txt |
两个工程细节值得新手留意:
- cracker.py 用 multiprocessing 按 CPU 核数开进程池,字典放在共享 Queue 里"抢活干",多核近乎线性加速;
- 这是面向 Python 2 的旧代码(setup.py 依赖 pypcapfile 与 pbkdf2_ctypes),新系统上建议直接阅读源码学习加密流程。
📶 实战进阶:如何抓到一次"半次握手"?
- 开启监控模式:
airmon-ng start wlan0,生成 mon0 接口; - 用
airodump-ng mon0观察列表底部 BSSID 为 (not associated) 的客户端 Probe,WPA2 的 SSID 会直接显示出来,这些设备即可作为目标; - 针对目标 SSID 架设同名 Fake AP(Ubuntu 下可用 hostapd 或软 AP 方案);
- 用
tcpdump -i wlan0 -s 65535 -w file.cap持续抓包; - (可选)对附近网络发送 Deauth 包,促使客户端重新探测,提高命中率;
- 把 file.cap 喂给 halfHandshake.py,即可开始字典爆破。
🛡️ 从 POC 看防御:普通用户该怎么做?
- 探测请求是明文的:你的设备会不断"喊出"自己连过的 SSID 与 MAC 地址,暴露使用习惯与位置;
- 弱口令 = 白给:4096 次 PBKDF2 迭代挡不住 347 万条的大字典,建议 12 位以上随机口令;
- 关掉"自动连接":避免被 Fake AP 诱导完成半次握手;
- 给 SSID 加点辨识度:不与他人重名,能降低被"顺手"攻击的概率。
✅ 总结
WPA2-HalfHandshake-Crack 用一个轻量 POC 证明了:WPA2 口令的安全性建立在"握手中客户端的 MIC 签名"上,而这份签名并不依赖真实 AP 在场。理解 PBKDF2 → PTK → MIC 这条链路(见 cracker.py),既看懂了 WPA2 的加密设计,也看懂了它"字典攻击面"的边界。把这个项目当作加密原理的活教材来读,收获会远大于仅仅把它当作一个工具。
【免费下载链接】WPA2-HalfHandshake-CrackThis is a POC to show it is possible to capture enough of a handshake with a user from a fake AP to crack a WPA2 network without knowing the passphrase of the actual AP.项目地址: https://gitcode.com/gh_mirrors/wp/WPA2-HalfHandshake-Crack
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考