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。仅限对你拥有或已获得书面授权的网络进行测试。
标签:逆向工具