digtaalfathir/bayrecon

GitHub: digtaalfathir/bayrecon

基于 ESP8266 的便携式 WiFi 安全与侦察工具包,支持 TFT 独立操作和串口 CLI 双模式,涵盖扫描嗅探、deauth 攻击与监测、evil twin 等渗透测试功能。

Stars: 2 | Forks: 0

# BayRecon **适用于实验室的 ESP8266 WiFi 安全与侦察工具包。** 这是一款基于 **Wemos D1 Mini (ESP8266)** 的 WiFi **安全与侦察**工具包,用于在本地/实验室环境中进行研究、学习和测试网络安全。可以通过 **TFT 屏幕 + 3 个按钮**完全独立操作(无需笔记本电脑),也可以通过**串口 CLI** 进行控制。 功能:WiFi 扫描器与嗅探器、统计 station、beacon 泛洪、deauth 监测(防御性)、deauth、精准 deauth,以及带有 captive portal + 密码验证 + 自动 deauth 的 evil twin。 **版本:** 0.2.0 · **状态:** 7 个模块已激活并经过测试,完整的 TFT UI + 锁屏(照片)。 ![演示](https://raw.githubusercontent.com/digtaalfathir/bayrecon/main/docs/demo.png) ## ⚠️ 负责任使用 / 免责声明 **仅限于你拥有所有权,或获得书面授权进行测试的网络。** - 用于在本地/实验室环境中进行网络安全**教育与研究**。 - **严禁**在未经许可的情况下访问、攻击或干扰他人的网络/设备。 - 用户**须自行全权负责**遵守所在地区的相关适用法律。 详情:[法律与道德声明](#catatan-legal--etis)。 ## 目录 - [硬件与接线](#hardware--wiring) - [环境配置与构建](#setup--build) - [两种控制方式:TFT 与 CLI](#dua-cara-kontrol-tft--cli) - [功能与使用说明](#fitur--cara-pakai) - [Evil Twin(详情)](#evil-twin-detail) - [代码架构](#arsitektur-kode) - [SDK 补丁 (deauth)](#sdk-patch-deauth) - [疑难解答](#troubleshooting) - [开发路线](#roadmap) - [技术栈](#tech-stack) - [License](#license) - [法律与道德声明](#catatan-legal--etis) ## 硬件与接线 | 组件 | 详情 | |---|---| | **MCU** | Wemos D1 Mini (ESP8266, 4MB flash) | | **显示屏** | TFT 240×280 **ST7789** (SPI, 如 1.69" IPS) | | **输入** | 3 个轻触按键 (UP / DOWN / OK) | | **电源** | USB micro-B / 充电宝 | ### TFT (硬件 SPI) | TFT | Wemos | GPIO | 说明 | |---|---|---|---| | VCC | 3V3 | — | 3.3V | | GND | GND | — | Ground | | SCL/SCK | D5 | 14 | SPI Clock (HSPI) | | SDA/MOSI | D7 | 13 | SPI MOSI (HSPI) | | RES/RST | D0 | 16 | Reset | | DC/A0 | D2 | 4 | Data/Command | | CS | D8 | 15 | Chip Select | | BLK/LED | 3V3 | — | Backlight (常亮) | | 按钮 | Wemos | GPIO | 备注 | |---|---|---|---| | **UP** | D1 | 5 | 空闲引脚 | | **DOWN** | D4 | 2 | 共用板载 LED (轻微闪烁,无害) | | **OK** | D3 | 0 | **开机/复位时切勿按住** (会进入 flash 模式) | ## 环境配置与构建 使用 **PlatformIO**(VSCode 扩展)。库与工具链会在首次构建时自动下载。 ``` # 串口权限 (Linux/Zorin) — 仅需一次 sudo usermod -aG dialout $USER # lalu logout/login ulang sudo apt remove brltty # fix bug CH340 "dibajak" brltty # Build + upload + monitor pio run -t upload && pio device monitor ``` TFT 配置与 SDK 补丁已在 [`platformio.ini`](platformio.ini) 中设置完毕 (build_flags TFT_eSPI + `extra_scripts = pre:patch_sdk.py`)。无需手动编辑库文件。 ## 两种控制方式:TFT 与 CLI 两者**并行**运行,并控制同一个核心引擎。 ### TFT + 按钮 (独立运行) - **UP/DOWN** = 导航 · **OK** = 选择/操作 · **长按 OK** = 返回/停止 - 开机 → **锁屏 (照片)** → 按下 **OK** 解锁 → 显示 8 个功能的菜单 · 在菜单中闲置 30 秒 → 自动返回锁屏 - 需要目标的功能 (统计/deauth/精准/evil) → 从扫描屏幕选择 AP → 显示实时操作界面 ### 串口 CLI (115200 baud) 输入 `help` 获取命令列表: | 命令 | 功能 | |---|---| | `help` / `info` | 帮助 / 设备状态 | | `scan` | 扫描活跃的 AP | | `sniff` / `sniff stop` | promiscuous 嗅探器 | | `channel <1-13>` / `hop [on\|off]` | 频道控制 | | `stats` | 帧计数器 | | `count` / `count stop` | 统计 station (选择 AP) | | `stations` / `stations clear` | 导出所有 AP→client | | `beacon` | beacon 泛洪菜单 | | `dmon` / `dmon stop` / `dmon test` | deauth 监测 | | `deauth` / `deauth stop` | 广播 deauth (选择 AP) | | `pdeauth` / `pdeauth stop` | 针对单一 client 的精准 deauth | | `evil` / `evil stop` | evil twin + portal | ## 功能与使用说明 ### 1. 嗅探器与扫描器 所有模块的基础。实现 802.11 帧的 promiscuous 捕获与频道跳变。 - **TFT → 扫描 AP**: AP 列表 (滚动查看,按 OK 重新扫描)。 - **TFT → 嗅探器**: 实时计数器 (总数/管理帧/数据帧/deauth);UP/DOWN 切换频道,OK 切换跳频模式。 - **CLI**: `scan`, `sniff`, `channel`, `hop`, `stats`。 ### 2. 统计 Station 统计连接到 1 个目标 AP 的 client 数量。 - **流程**: 选择 AP → 显示实时的 **"N station"** 界面。 - 频道锁定至目标 AP (保证准确性)。MAC 随机化可能导致数值偏高。 - **CLI**: `count` → 选择编号 → `count stop`。 ### 3. Beacon 泛洪 广播大量伪造的 SSID (扫频 ch 1-13)。 - **TFT → Beacon 泛洪**: OK 开始/停止,UP 增加 5 个随机 SSID,DOWN 清除。 - **CLI**: `beacon` → 菜单 (手动/随机/开始)。 - 每帧设置 `delay(1)` 以防止 TX 缓冲区溢出。 ### 4. Deauth 监测 (防御性) 检测 deauth/disassoc 攻击,并在突发流量时触发警报。 - **TFT → Deauth 监测**: 显示 **安全/攻击** 横幅状态与速率;OK = 测试警报 (注入合成帧)。 - **CLI**: `dmon`, `dmon test`, `dmon stop`。默认阈值为 8 帧/秒 ([deauthmon.cpp](src/deauthmon.cpp) `DM_THRESHOLD`)。 ### 5. Deauth (广播) 将目标 AP 的所有 client 踢下线。 - **流程**: 选择 AP → 显示 **攻击中** 横幅与实时成功/失败状态。 - 帧:mgmt subtype 12 + 10,addr1=broadcast,addr2/3=BSSID 伪造。 - **CLI**: `deauth` → 选择编号 → `deauth stop`。 ### 6. 精准 Deauth (针对单一 client) 向特定 client 发送双向的 unicast deauth (更具针对性)。 - **流程**: 选择 AP → 实时收集 client → 选择 client 编号 (或 **">> 所有 client"**) → 发起攻击。 - **CLI**: `pdeauth` → 选择 AP → 输入 client 编号 / `a` 全选 / `r` 重置 / `q`。 ### 7. Evil Twin 请参阅下方专门的章节介绍。 ## Evil Twin (详情) 部署克隆 AP (SSID 相同,但为**开放网络**) + captive portal,以此捕获 Wi-Fi 密码并**向原始 AP 进行验证**。 ### 流程 ``` evil → pilih AP → twin nyala (Auto-deauth default OFF) → korban masuk twin → captive portal "Masuk ke Wi-Fi" (minta password) → SALAH : portal minta ulang → BENAR : halaman "menyelesaikan koneksi" (progress bar ~8s) → deauth auto-OFF → twin auto-bongkar (~9s) → korban auto-reconnect ke AP asli (mulus, tak curiga) ``` ### 自动 deauth (在 Evil Twin 界面按 OK 切换) | | OFF (默认) | ON | |---|---|---| | 原始 AP | 保持正常 | 持续受到 deauth 攻击 | | 受害者接入 twin | 自愿接入 (被诱骗) | 被迫切换 | | 检测情况 | 隐蔽 | 会被 `dmon` 检测到 | | 适用场景 | 公共 Wi-Fi / 新设备 | 强制将设备从活跃 Wi-Fi 踢出 | ### 核心技术说明 - 在运行 portal 期间采用**纯 AP 模式** (关闭 STA) → 保持 DHCP 稳定;STA 仅在验证密码时短暂开启。 - **使用 ESP 默认 MAC** (twin 的 BSSID ≠ 原始 AP) → 自动 deauth 不会将 twin 自身的 client 踢下线。*(克隆自定义 MAC 会导致 ESP8266 上的关联/DHCP 失败,因此避免使用。)* - **实时验证**: 通过 `WiFi.begin(ssid, pwd)` 连接原始 AP — 连接成功即表示密码正确。 - 密码验证成功后实现**自动拆除 (Auto-teardown)** → 网络恢复正常。 ### 局限性 已将原始 AP 保存为 **WPA2** 的设备有时会拒绝加入开放的 twin 网络 (操作系统的防降级保护机制)。Evil twin 对**公共/开放 Wi-Fi**或尚未保存目标网络的设备效果最好。 ## 代码架构 ``` src/ main.cpp entry: init semua modul + loop cli.h/.cpp control plane serial (command + mode input terpandu) buttons.h/.cpp 3 tombol (debounce + long-press = back) ui.h/.cpp UI TFT (menu + layar tiap fitur) sniffer.h/.cpp promiscuous engine (fondasi) + ring buffer + channel hop station.h/.cpp count station beacon.h/.cpp beacon spam deauthmon.h/.cpp deauth monitor (defensif) deauth.h/.cpp deauth broadcast pdeauth.h/.cpp precise deauth per-client evil.h/.cpp evil twin + captive portal + auto-deauth patch_sdk.py pre-build: buka blokir injection deauth di SDK platformio.ini config board + TFT_eSPI + SDK patch hook ``` **引擎→处理器模式**: 分析模块 (station/dmon/pdeauth) 通过 `sniffer_add_handler()` 将处理器挂载到嗅探器上。攻击与 UI 模块调用各个模块的**编程 API** (`*_attack`, `*_on`, `*_stats`) — 因此 CLI 和 TFT 就像是同一个引擎的两个“遥控器”,无需重复编写逻辑代码。 ## SDK 补丁 (deauth) ESP8266 库默认屏蔽了 deauth/disassoc 帧 (`ieee80211_freedom_output` 仅允许发送 data/beacon/probe)。[`patch_sdk.py`](patch_sdk.py) (预构建,自动运行) 会修改所有 NONOSDK 版本中 `libnet80211.a` 的 1 条指令,使得**所有管理帧**都能顺利发送: - 幂等操作 + 自动备份 `.orig` · 每次构建时自动重新应用 - **全局生效** (`~/.platformio/...`) → 会影响此设备上的其他 ESP8266 项目 - **还原**: 删除 `platformio.ini` 中的 `extra_scripts` 行,或通过 `libnet80211.a.orig` 恢复 / 重新安装平台环境 ## 疑难解答 **TFT 相关 (在 [platformio.ini](platformio.ini) / [ui.cpp](src/ui.cpp) 中调整):** | 症状 | 解决方法 | |---|---| | 空白/白屏 | 检查接线 DC=D2, CS=D8, RST=D0, VCC=3V3 | | 反色 | 设置 `-D TFT_INVERSION_OFF=1` | | 红蓝互换 | 设置 `-D TFT_RGB_ORDER=TFT_BGR` | | 画面偏移/反转 | 在 `ui_init()` 中修改 `tft.setRotation(0)` (尝试设为 2) | | 边缘被裁切 | 调大 ui.cpp 中的 `MX` (边距) | **其他:** - `/dev/ttyUSB0: Permission denied` → `dialout` 用户组未生效 (需重新登录)。 - 921600 上传失败 → 设置 `upload_speed = 115200`。 - Beacon/deauth `失败率`偏高 → 确认 SDK 补丁已应用 (查看构建日志 `[BayRecon] ... DIPATCH`)。 - 在网络密集区域嗅探器 `dropped` 数值升高 → 正常现象 (环形缓冲区为 24,回调函数刻意保持轻量化)。锁定 1 个频道可提高准确性。 - Evil twin: 手机无法获取 IP → 确保使用最新版本 (已移除 MAC 克隆功能)。已保存原始 WPA2 的设备 → 需先“忘记”网络才能进行测试。 ## 开发路线 待开发事项 (按优先级排序): 1. 持久化凭证记录 (SPIFFS) + `/log` 页面 2. 多 SSID evil twin 3.额外的 OLED 屏 / 状态指示灯 4. 持久化设置 (LittleFS) 5. PCAP 导出 (Wireshark),事件记录器 6. OUI 查询 (MAC 厂商),频道图表 ## 技术栈 | 层级 | 使用技术 | |---|---| | **MCU / 框架** | ESP8266 (Wemos D1 Mini) · Arduino · PlatformIO | | **显示驱动** | TFT_eSPI — ST7789 240×280 | | **WiFi** | ESP8266 NONOS SDK (promiscuous + `wifi_send_pkt_freedom`) | | **存储** | EEPROM (持久化设置) | | **语言与工具** | C/C++ · Python (SDK 补丁 + 图像→头文件转换) | ## License MIT © 2026 Rifky Andigta Al-Fathir — 详见 [LICENSE](LICENSE)。 ## 法律与道德声明 **仅限用于自有网络、受控实验室环境,或获得书面授权的渗透测试 (pentest)。** - ✅ **合法**: 测试自己的路由器、学习 802.11 协议、CTF、已获授权的红队演练。 - ❌ **非法**: 未经授权攻击他人网络、窃取凭证、对公共服务发起 DoS 攻击。 未经授权擅自使用部分功能 (deauth, evil twin, 密码捕获) 属于违法行为。请务必负责任地使用。 *BayRecon — 在 ESP8266 上进行 WiFi 安全探索。坚守道德底线,持续学习。* 🛡️
标签:ESP8266, UML, WiFi审计, 客户端加密, 插件系统, 物联网, 硬件工具, 逆向工具