ARTICLE DETAIL

资讯详情

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

涂鸦 T5+ hashcat 自动化破解 WPA2:从单缺 M2 到全自动值守的踩坑实录 破解wifi 密码

涂鸦 T5+ hashcat 自动化破解 WPA2:从单缺 M2 到全自动值守的踩坑实录 破解wifi 密码 涂鸦 T5ESP32-S3抓 WPA2 握手 显卡 hashcat 自动化破解——全链路实战复盘合规声明本文所有操作仅在我自有/已获授权的家庭网络上进行。对未经授权的网络实施监听、去认证攻击、密码破解在大多数国家和地区属于违法行为。请读者仅将本文用于学习无线安全原理与防御目的。一、效果一览TL;DR环节结果目标家庭热点SSID602W/602陈WPA2-PSK抓包硬件涂鸦 T5 开发板ESP32-S3约 ¥20破解硬件笔记本 RTX 5060 Laptop GPU最终结果抓到完整M1M2握手后显卡14 秒跑出密码12345678显卡实测速度486.0 kH/s独显/504.5 kH/s含核显合计一句话原理单片机负责偷听 踢人显卡负责猜密码。全程不碰路由器本身只听空气里的无线电波然后离线暴力验证。二、原理单片机干什么显卡干什么2.1 单片机监听器 踢人的门卫普通电脑网卡只收发给自己的数据而 ESP32-S3 的 WiFi 芯片可以切到监听模式promiscuous mode像一台全频收音机把锁定信道上空气中所有原始 802.11 帧都收下来。它干三件事扫描定位找到目标热点在哪个信道实测602W在信道 4RSSI -57602陈同信道 4RSSI -50锁定蹲守踢人发 deauth 去认证帧伪造一个路由器叫你滚下线的无线包发给在线设备。设备被踢后手机会自动重连——重连那一刻必须重新走一遍登录流程四次握手而这个流程是明文飞在空气里的抓拍四次握手的帧飞过空气时被它抄下来通过 USB 串口115200 波特率实时传回电脑存成 pcap 文件。它解不了任何密就是个偷听器 门卫。电脑网卡在 Windows 上干不了这事不能监听、不能发原始帧二十块钱的 ESP32 反而是最顺手的工具。2.2 显卡离线验证机关键点密码从来不通过空气传输。握手里飞的是密码算出来的指纹MIC。所以抓到的东西不能反推出密码但可以验证任何一个猜测候选密码 │ PBKDF2-HMAC-SHA1(密码, SSID, 4096 轮迭代) ← 故意设计得慢 ▼ PMK成对主密钥 │ AP 的 MAC 手机的 MAC 两个随机数ANonce/SNonce ▼ PTK临时密钥→ 取前 16 字节 KCK │ 用 KCK 对抄下来的 M2 帧算签名 ▼ 算出的 MIC vs 空气里抄下来的 MIC 一样 → 这个候选就是真密码 不一样 → 换下一个候选每猜一次要算4096 轮 SHA-1CPU 一秒只能试几千个显卡有几千个核心同一道题上万份并发一起算hashcat速度快两个数量级。2.3 为什么 M2 是唯一的钥匙四次握手四个帧能用来离线验证的只有 M1M2 这一对帧内容能否用于破解M1AP→设备ANonce明文提供一个随机数M2设备→APSNonce MIC唯一同时带 SNonce 和可验证 MIC 的帧M3AP→设备ANonce MIC缺 SNonceM4设备→APMIC但 SNonce 字段全零算不出 PTKM4 自己把 SNonce 清零了所以 M3/M4 拿到手也没用。另外本目标的 M1 不带 PMKIDkeydata 全空PMKID 攻击路线也走不通——M2 是唯一的钥匙。这也是整个项目反复卡壳的地方三次抓包两次 M1M3、一次 M1×3M3M4全都单缺 M2。三、硬件与软件环境类别型号/版本抓包硬件涂鸦 T5 开发板ESP32-S3 内核USB CDC 串口 COM25 115200显卡NVIDIA GeForce RTX 5060 Laptop8GB Intel UHD 770 核显固件工具链PlatformIO Core 6.2.0esptoolpio 内置 v4.11.0破解工具hashcat 7.1.2-m 22000WPA-PBKDF2-PMKIDEAPOL脚本语言Python 3.12 pyserial目录结构工作目录D:\Desktop\wififirmware/src/main.cpp ESP32-S3 嗅探固件v8 sniff_capture.py 串口 → pcap 采集 hs_extract.py pcap → hashcat 22000 哈希含自测 watch_m2.py 自动值守监控 M2 → 提哈希 → 调 GPU → 记录结果 crack_run.py 手动分阶段破解入口 hashcat/hashcat-7.1.2/ hashcat 本体必须在它自己的目录里运行 wifi_dict_*.txt 等 密码本若干四、系统架构┌────────────────────────── ESP32-S3涂鸦 T5──────────────────────────┐ │ 扫描定位目标 SSID/BSSID → 锁信道ch4 │ 空气中的 802.11 帧 │ promiscuous 监听 → 只入队 EAPOL 候选帧 目标相关管理帧队列 20 帧 │ ─────────────────▶│ 学习在线 STA 的 MAC → 周期发 广播单播 deauth 踢人 │ │ 见到 EAPOL 后 4 秒静默不发防自残撞掉 M2 │ └───────────────┬──────────────────────────────────────────────────────┘ │ USB 串口 hex 行带长度XOR 校验 ▼ ┌────────────────────────── Windows PC ─────────────────────────────────┐ │ sniff_capture.py校验 → 组 pcapLINKTYPE 105 │ │ watch_m2.py 每 45 秒轮询 pcap │ │ 出现可配对的 M1M2 → 调 hs_extract 生成 22000 哈希 │ │ → hashcat 11 阶段自动跑字典→纯数字→手机号 │ │ → potfile 出现明文 → 写入 找到密码.txt │ │ 值守还负责抓包进程死了自动拉起按 BSSID 从日志取当前 SSID │ └───────────────────────────────────────────────────────────────────────┘五、固件设计v7 → v85.1 v7 诊断版全链路计数器定位丢帧环节v7 固件的核心是每 10 秒打一行全链路计数把 M2 丢失环节定位到具体一段MSG cb258596 badrx0 mgmt0 data13242 eapol0 m20 qdrop0 printed0 deauth4599 uni2292 stas0 │ │ │ │ │ │ │ │ │ └ 在线 STA 数 │ │ │ │ │ │ │ └────── 单播 deauth 数 │ │ │ │ │ │ └ 打印帧数 │ │ │ │ │ └ 队列丢弃 │ │ │ │ └── 分类为 M2 的帧数 ★核心指标 │ │ │ └── 通过 BSSID 过滤的数据帧 │ │ └ 目标相关管理帧 │ └ FCS 等坏帧 └ 回调总进入靠它发现了两个关键事实data一直涨但eapol0说明设备根本没掉线重连另一个热点接口翻转时data冻结、stas归零。5.2 v8 的三处关键改动改动一单播去认证。v7 只发广播 deauth收件人 FF:FF:FF:FF:FF:FF现代手机普遍无视。v8 从通过 BSSID 过滤的数据帧里学习在线 STA 的 MAC上行看 SA、下行看 DA对每台设备定点单播踢staticvoidlearn_sta(constuint8_t*m){if(m[0]1)return;// 广播/组播不算if(is_tgt_mac(m))return;// AP 自己不算// ...LRU 式 8 槽位表2 分钟内有过数据的才算在线}// 踢人时广播 对每台在线 STA 单播send_deauth(tgt_bssid[t],NULL);// 广播send_deauth(tgt_bssid[t],sta_mac[i]);// 单播定点改动二握手让路防自残。去认证的发射窗口期间芯片听不到东西四次握手全程才几十毫秒v7 的 3 连发 deauth 正好可能蹭掉 M2——前两次抓包就是单缺 M2。v8 检测到目标 EAPOL 后4 秒静默if(now-last_eapol_msEAPOL_QUIET_MS){delay(50);// 握手窗口内让路不发射}改动三扫描避让。周期性重扫描要切信道期间听不到帧。v8 在 EAPOL 活跃后 30 秒内顺延扫描SCAN_AVOID_MS。其余保持 v7队列 20 帧×400 字节、EAPOL 候选帧带 XOR 校验 hex 输出、逐帧元数据行速率/MCS/重试/RSSI输出格式与 PC 端管线完全兼容。5.3 编译与烧录cdfirmware pio run# RAM 15.3% / Flash 18.6%pio run-tupload --upload-port COM25# 623680 字节约 12.6 秒烧完六、PC 侧管线6.1 sniff_capture.py串口 → pcap解析固件的EAPOL/BEACON/MGMThex 行长度 XOR 双校验坏行丢弃并打印写标准 pcapLINKTYPE_IEEE802_11 105追加模式进程重启不丢已抓帧串口自动探测不再写死 COM 号优先原配置口失败则枚举所有 USB 串口。6.2 hs_extract.pypcap → hashcat 22000 哈希解析四次握手帧按 keyinfo 位ACK/MIC/Secure分类 M1–M4配对同 BSSID 同 STA 的 M1M2生成 hashcat 22000 行WPA*02*MIC 32 hex*mac_ap*mac_sta*essid hex*anonce*eapol(MIC清零)*00踩过并修掉的 bug固件对部分非 QoS 数据帧在 LLC 头前多带 2 字节填充固定按 24 字节帧头解析会漏帧一次 M3 就是这样丢的。修复为 24/26 两种偏移都探测 LLC SNAP 头自带--selftest用已知密码合成握手 → 生成哈希 → hashcat 12 秒解出验证整条链路。6.3 watch_m2.py自动值守每 45 秒轮询一次 pcap全自动闭环出现可配对的 M1M2且排除自家那台输错过密码的手机 MAC→ 生成哈希文件依次跑 11 个 hashcat 阶段见第七节独立 potfile每阶段日志落盘potfile 出现明文 → 写入找到密码.txt全程事件 10 分钟心跳写入watchdog.log自愈抓包进程不在了自动重新拉起PID 文件 OpenProcess 探活2 分钟退避SSID 盐映射SSID 是 WPA 哈希的盐热点会改名602陈↔602W两个 BSSID脚本从固件日志的 target 行按 BSSID 取当前SSID否则密码对了也解不出来。值守进程本身用 WMIWin32_Process.Create启动见踩坑 3。七、破解阶段与字典规模11 个阶段按性价比排序命中即停#阶段内容量级01字典wifi_dict_all.txt1,042,86002字典rockyou.txt14,344,39103字典dict_master.txt1,919,55904字典dict_cn_1m.txt1,000,00005字典dict_letter.txt47,60306掩码6 位纯数字?d?d?d?d?d?d100 万07掩码7 位纯数字1,000 万08掩码8 位纯数字1 亿09掩码9 位纯数字10 亿10掩码11 位手机号-1 34567891?1?d?d?d?d?d?d?d?d?d70 亿11掩码10 位纯数字100 亿全部密码本合计19,588,441 行去重前。八、性能实测RTX 5060 Laptop-m 22000实测方法改一个字节 SSID 盐构造永不可能命中的哈希跑完整 rockyou 读速度行。设备速度RTX 5060 Laptop独显486.0 kH/s ≈ 48.6 万次/秒Intel UHD 770核显18,535 H/s合计504.5 kH/s ≈ 50 万次/秒注意一次 完整走一遍 PBKDF2-HMAC-SHA1 4096 轮 PRF MIC 计算相当于每秒约 20 亿次 SHA-1 运算。14,344,391 条的 rockyou 实测20 秒跑完。换算成攻击耗时按 48.6 万次/秒密码空间数量级耗时6 位纯数字10⁶~2 秒7 位纯数字10⁷~21 秒8 位纯数字10⁸~3.4 分钟9 位纯数字10⁹~34 分钟11 位手机号7×10⁹~4 小时10 位纯数字10¹⁰~5.7 小时结论很直白纯数字密码在现代消费级显卡面前等于裸奔字母数字混合到 10 位以上、或用长随机密码才是安全的。九、踩坑清单实战中踩过的坑按时间线假阳性握手输错密码的手机也会算一个签名发出去被显卡解出来的是你输错的那个数本例中是99999999。判断标准只发了 M2、没有 M3/M4 的握手大概率是失败尝试真正联网成功的设备才会有 M3/M4。结论只对单条握手有效已排除 8 位纯数字只对当时那条握手成立换了新握手新设备/新密码必须全部重跑。后台进程静默死亡从终端Start-Process启动的后台 Python 进程会随命令结束被作业对象Job Object连带回收日志戛然而止、无任何报错。解法用 WMIWin32_Process.Create启动脱离作业对象并在值守脚本里加进程自愈。hashcat 找不到 OpenCL 内核它按相对路径找./OpenCL/必须在 hashcat 自己的目录里运行或设 cwd否则秒退。广播 deauth 被 PMF 无视对一台在线设备发了 2200 个单播 deauth 它都不掉线data照涨基本可断定开了 PMF802.11w。此时主动踢人失效只能等设备自然重连锁屏唤醒、断流重试、热点开关都会触发。去认证发射窗口撞掉 M2见 5.2 改动二。SSID 是哈希的盐热点改名602陈↔602W会导致用旧 SSID 提的哈希永远解不出来。必须按 BSSID 动态取当前 SSID。帧头长度想当然非 QoS 数据帧的 LLC 头前可能多 2 字节填充解析要按 LLC SNAP 魔数探测偏移而不是固定 24。串口号会变重新插拔/烧录后 COM 号可能漂移采集脚本要自动探测。十、实战结果时间线全部真实数据09-28 01:47 抓到自己手机输错密码的握手 → 解出 99999999假阳性排除 09-28 09:13 抓到设备 fc:ab:d0:c5:73:99 的 M1M3×4缺 M2 09-28 11:53 抓到设备 48:45:e6:6c:71:43 的 M1×3M3M4缺 M2 09-30 12:24 烧录 v8 固件单播 deauth 生效stas1, uni 递增 09-30 13:18 热点接口翻转602W → 602陈在线设备被甩下线stas 1→0 09-30 15:56:24 设备回连v8 抓到完整 M1M2 → 自动生成哈希 09-30 15:56:38 RTX 5060 从 104 万字典中解出密码14 秒potfile 记录9ee0e9128048e907b6ca12d58b29c51b:7ac62b24e63e:fcabd0c57399:602W:12345678可靠性判据发 M2 的那台设备在此前09-28 09:13就成功完成过认证抓到过它的 M3说明它手机里存的是真密码MIC 数学验证通过——排除了踩坑 1 的假阳性情形。十一、延伸为什么 WPA3 不怕这套防离线猜测WPA3-SAE 的握手设计使抓到的帧无法用来离线验证候选密码显卡这套猜验直接失效PMF/802.11w加密管理帧伪造 deauth 被丢弃——本项目踩坑 5 已实际观察到防御建议路由器开 WPA3或 WPA2/WPA3 过渡、开 PMF、密码 12 位以上随机组合、关闭 WPS。本文基于真实家庭网络授权测试整理文中 MAC/SSID 等信息已获家人同意发布。
返回列表