S8C88/WPA-Cracker
GitHub: S8C88/WPA-Cracker
一款用于捕获 WPA/WPA2 握手包或 PMKID 并通过字典离线破解预共享密钥的无线网络安全教学工具。
Stars: 0 | Forks: 0
# WPA-Cracker
## 流程
```
graph TD
WiFi["Monitor Mode Interface (wlan0mon)"] --> Capture["wpacracker.py capture"]
Capture --> Pcap["capture.pcap"]
Pcap --> Detect["Handshake Detection"]
Pcap --> PMKID["PMKID Detection"]
Detect --> Handshake["4-Way Handshake (EAPOL)"]
Handshake --> Crack["PSK Cracking"]
PMKID --> Crack
Wordlist["wordlist.txt"] --> Crack
Crack --> Result["PSK Found / Not Found"]
subgraph "Cracking Engine"
Crack --> PMK["PMK = PBKDF2(HMAC-SHA1, PSK, SSID, 4096)"]
PMK --> PTK["PTK = PRF(PMK, A-nonce, S-nonce, MACs)"]
PTK --> MIC["MIC Verify (EAPOL frame)"]
end
```
## IEEE 802.11 背景
对于初学者——WPA/WPA2-PSK 使用 4 次握手:
1. AP → STA:A-nonce(AP 的随机数)
2. STA → AP:S-nonce(客户端的随机数)+ MIC(消息完整性代码)
3. AP → STA:GTK(组临时密钥)+ MIC
4. STA → AP:ACK
破解原理是:PSK → PMK (PBKDF2) → PTK (PRF-384) → 比较 MIC。如果 MIC 匹配,则 PSK 正确。
### PMKID 攻击
PMKID = HMAC-SHA1(PMK, "PMK Name" + AP MAC + STA MAC)
某些 AP 会在第一个 EAPOL 帧中包含 PMKID。如果存在,你就不需要完整的握手——只需要第一帧即可。
## 用法
### 从监听模式捕获
```
# 首先将 interface 设置为 monitor mode:
# sudo ip link set wlan0 down
# sudo iw dev wlan0 set type monitor
# sudo ip link set wlan0 up
python wpacracker.py -i wlan0mon -w wordlist.txt
```
### 分析捕获的 Pcap
```
python wpacracker.py -r capture.pcap -w wordlist.txt
```
### 选项
| Flag | 描述 |
|------|-------------|
| `-i` | 用于实时捕获的监听模式接口 |
| `-r` | 从 pcap 文件读取(而非实时捕获) |
| `-w` | 用于 PSK 破解的字典 |
| `-o` | 结果输出文件 |
| `--timeout` | 捕获持续时间,以秒为单位(默认值:60) |
| `--pmkid-only` | 仅尝试 PMKID 攻击 |
| `--bssid` | 按 BSSID (MAC) 过滤 |
| `--essid` | 按 SSID 过滤 |
### 输出格式
```
WPA-Cracker Results
====================
BSSID ESSID PSK Status
AA:BB:CC:DD:EE:FF MyNetwork hunter2 FOUND
11:22:33:44:55:66 GuestNet [not in list] NOT FOUND
```
## 握手检测
该工具会查找 EtherType 为 0x888E(IEEE 802.1X)且 Key Descriptor Type = 2(RSN Key Descriptor)的 EAPOL 帧。完整的握手需要 4 次握手的全部 4 条消息。如果存在 PMKID,则会从消息 1 中提取。
## 破解引擎
- 采用 PBKDF2-HMAC-SHA1 算法,迭代 4096 次(依据 IEEE 802.11i-2004 标准)
- 依据 IEEE 802.11-2012 第 11.6.1.2 节进行 PTK 派生
- 使用 NIST SP 800-38B CCM 模式对 EAPOL-Key 帧进行 MIC 验证
### 性能
- 约 500 次 PSK 尝试/秒(单核,受限于 PBKDF2)
- Hashcat 的速度大约快 100 倍——请将此工具用于测试/学习,而不是生产环境的破解
## 待办事项
- [ ] WPA3/SAE 握手捕获(帧格式不同——需要实现)
- [ ] Hashcat 输出模式(-o hashcat.hc22000)
- [ ] 仅 PMKID 模式没有正确检查消息顺序。需在第 203 行修复
- [ ] 在 5GHz 上进行实时捕获需要配置 `iw` 监管域设置
- [ ] 解析隐藏 SSID 的 Beacon(回退使用 Probe Response)
- [ ] 通过 pyopencl 实现 GPU 加速
## 已知问题
- 监听模式设置需要 root 权限。请使用 sudo 运行。
- 在繁忙的信道上,scapy 的 `dot11` 层解析速度很慢。请使用 `--timeout` 来限制捕获时间。
- PMKID 检测属于启发式方法——有些 AP 会发送它,有些则不会。如果未找到 PMKID,则回退到握手模式。
- PTK 派生不处理 BIP (Broadcast Integrity Protocol) GTK——这对破解无关紧要,但已作记录。
- 修复待办:在某些极端情况下,pmkid_crack() 中的 PMKID 计算结果与 hashcat 输出不匹配。需要使用参考实现进行验证。
## 许可证
MIT。仅限对你拥有或已获得书面授权的网络进行测试。
标签:逆向工具