JesseCHale/HaleHound-CYD
GitHub: JesseCHale/HaleHound-CYD
专为 ESP32 CYD 开发板设计的多协议攻击性安全工具包,集成 WiFi、蓝牙、SubGHz、2.4GHz 和 NFC 五大无线攻击模块。
Stars: 155 | Forks: 16
```
_ _
.k$$$$$g, ,g$$$$$k.
.k$$$$$$$$$$$a. .a$$$$$$$$$$$k.
.J$$$$$?' `?$?^?, ,?^?$?` `?$$$$$L.
JS$$SI!a, _.JS$ ?, ,? $SL._ ,a$!IS$$SL
k$$$SI!:?$$$$$$$$$xu$$j j$$ux$$$$$$$$$?:!IS$$$k
:I$$SI:J$$?*"$$$$4^?*?: :?*?^4$$$$"*?$$L:iIS$$I:
:IS$$SiJ?` _.'$?`/' ': :' '/'?$'._ `?LiS$$SI:
?ISSik? _ ', ` . ,' _ ?kiSSI?
?i$?` _ k$ . :. $k _ `?$i?
'?I:-?z$$I _._.' ._._ I$$z?-:I?'
'*?- '?$$a louSxuS? ?xuSxuol a$$?' -?*'
i$$$$$$$$$$$S S$$$$$$$$$$$i
?$$$?- -?$$$?
██░ ██ ▄▄▄ ██▓ ▓█████ ██░ ██ ▒█████ █ ██ ███▄ █ ▓█████▄
▓██░ ██▒▒████▄ ▓██▒ ▓█ ▀ ▓██░ ██▒▒██▒ ██▒ ██ ▓██▒ ██ ▀█ █ ▒██▀ ██▌
▒██▀▀██░▒██ ▀█▄ ▒██░ ▒███ ▒██▀▀██░▒██░ ██▒▓██ ▒██░▓██ ▀█ ██▒░██ █▌
░▓█ ░██ ░██▄▄▄▄██ ▒██░ ▒▓█ ▄ ░▓█ ░██ ▒██ ██░▓▓█ ░██░▓██▒ ▐▌██▒░▓█▄ ▌
░▓█▒░██▓ ▓█ ▓██▒░██████▒░▒████▒░▓█▒░██▓░ ████▓▒░▒▒█████▓ ▒██░ ▓██░░▒████▓
▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ ▒ ░░▒░▒░ ▒░▒░▒░ ░▒▓▒ ▒ ▒ ░ ▒░ ▒ ▒ ▒▒▓ ▒
▒ ░▒░ ░ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ ▒ ░▒░ ░ ░ ▒ ▒░ ░░▒░ ░ ░ ░ ░░ ░ ▒░ ░ ▒ ▒
░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░░ ░ ░ ▒ ░░░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
_ _
.k$$$$$g, ,g$$$$$k.
.k$$$$$$$$$$$a. .a$$$$$$$$$$$k.
.J$$$$$?' `?$?^?, ,?^?$?` `?$$$$$L.
JS$$SI!a, _.JS$ ?, ,? $SL._ ,a$!IS$$SL
k$$$SI!:?$$$$$$$$$xu$$j j$$ux$$$$$$$$$?:!IS$$$k
:I$$SI:J$$?*"$$$$4^?*?: :?*?^4$$$$"*?$$L:iIS$$I:
:IS$$SiJ?` _.'$?`/' ': :' '/'?$'._ `?LiS$$SI:
?ISSik? _ ', . . ,' _ ?kiSSI?
?i$?` _ k$ .: :. $k _ `?$i?
'?I:-?z$$I _._.' ._._ I$$z?-:I?'
'*?- '?$$a louSxuS? ?xuSxuol a$$?' -?*'
i$$$$$$$$$$$S S$$$$$$$$$$$i
?$$$?- -?$$$?
```
# HaleHound-CYD
**ESP32-DIV HaleHound 版 —— Cheap Yellow Display**
版本 **v3.2.0 CYD 版** | 作者 [JesseCHale](https://github.com/JesseCHale)
## 概述
HaleHound-CYD 是一个专为 ESP32 "Cheap Yellow Display" (CYD) 平台打造的多协议攻击性安全工具包。支持 2.8 英寸 (ESP32-2432S028) 和 3.5 英寸 (ESP32-3248S035C) 两种 CYD 开发板。外部 CC1101 SubGHz、NRF24L01+PA+LNA 2.4GHz、PN532 NFC/RFID 以及 GPS 模块通过 CYD 的引脚接口连接。
原版 ESP32-DIV 的所有攻击模块均已保留,并新增 CYD 独占功能:全触摸屏导航、EAPOL/PMKID 捕获、Karma 攻击、带 GPS 记录的 Wardriving(战驰)、PN532 RFID 卡扫描/克隆/暴力破解、防御性干扰检测、用于硬件黑客的 UART 串口监视器,以及从 SD 卡进行的 OTA 固件更新。
所有无线电均以最大功率发射。没有任何安全限制。
## 目录
- [硬件需求](#hardware-requirements)
- [支持的开发板](#supported-boards)
- [完整接线指南](#complete-wiring-guide)
- [菜单树](#menu-tree)
- [攻击模块 - 详情](#attack-modules---detailed)
- [WiFi 攻击](#wifi-attacks)
- [蓝牙攻击](#bluetooth-attacks)
- [2.4GHz NRF24 攻击](#24ghz-nrf24-attacks)
- [SubGHz CC1101 攻击](#subghz-cc1101-attacks)
- [SIGINT 行动](#sigint-operations)
- [工具](#tools)
- [设置](#settings)
- [触摸导航](#touch-navigation)
- [TX 功率配置](#tx-power-configuration)
- [SD 卡结构](#sd-card-structure)
- [构建与烧录](#build-and-flash)
- [引脚参考表](#pin-reference-table)
- [SPI 总线共享](#spi-bus-sharing)
- [已知问题](#known-issues)
- [项目结构](#project-structure)
## 硬件需求
### 基础开发板 (二选一)
| 组件 | CYD 2.8" (ESP32-2432S028) | CYD 3.5" (ESP32-3248S035C) |
|-----------|---------------------------|---------------------------|
| MCU | ESP32-WROOM-32 / 32UE | ESP32-WROOM-32 |
| 显示屏 | 2.8" ILI9341 240x320 | 3.5" ST7796 320x480 |
| 触摸 | XPT2046 电阻式 (SPI) | GT911 电容式 (I2C) |
| Flash | 4MB 起 (推荐 16MB) | 4MB 起 (推荐 16MB) |
| USB | CH340C (Micro-USB 或 USB-C) | CH340C (USB-C) |
| SD 卡 | 板载 MicroSD (VSPI) | 板载 MicroSD (VSPI) |
| 电源 | 5V USB 或 LiPo + 升压 | 5V USB 或 LiPo + 升压 |
| 背光 | GPIO 21 | GPIO 27 |
### 外部模块 (完整功能需全部配备)
| 模块 | 型号 | 用途 |
|--------|-------|---------|
| SubGHz 无线电 | CC1101 HW-863 (红板) | 300-928 MHz 信号捕获/重放/干扰 |
| 2.4GHz 无线电 | NRF24L01+PA+LNA | WiFi/BLE/Zigbee 干扰, MouseJack |
| NFC/RFID | PN532 V3 (Elechouse) | 13.56 MHz 卡扫描/读取/克隆/暴力破解 |
| GPS | GT-U7 或 NEO-6M | Wardriving, 位置记录 |
### 可选组件
| 组件 | 用途 |
|-----------|---------|
| 10uF 电容 | NRF24 电源稳定性 (跨接在模块 VCC/GND) |
| MicroSD 卡 | Payload 存储, PCAP 保存, Wardriving 日志 |
| LiPo 电池 + 升压转换器 | 便携操作 |
| 外置天线 | 扩展范围 (若使用 ESP32-WROOM-32UE) |
## 支持的开发板
| 开发板 | 构建目标 | 显示屏 | 触摸 | 状态 |
|-------|-------------|---------|-------|--------|
| ESP32-2432S028 (2.8") | `esp32-cyd` | 240x320 ILI9341 | XPT2046 电阻式 | **已全面测试** |
| ESP32-3248S035C (3.5") | `esp32-cyd-35` | 320x480 ST7796 | GT911 电容式 | **已全面测试** |
| QDtech E32R28T (2.8") | `esp32-e32r28t` | 240x320 ILI9341 | XPT2046 电阻式 | 支持 |
| NM-RF-Hat (2.8") | `esp32-cyd-hat` | 240x320 ILI9341 | XPT2046 电阻式 | 支持 |
开发板选择通过 PlatformIO 构建目标自动完成。构建命令:
```
pio run -e esp32-cyd # 2.8" CYD
pio run -e esp32-cyd-35 # 3.5" CYD
pio run -e esp32-e32r28t # E32R28T
pio run -e esp32-cyd-hat # NM-RF-Hat
```
### 3.5" CYD 差异
3.5" CYD (ESP32-3248S035C) 使用相同的芯片 (ESP32-D0WD-V3),所有外部无线电接线也相同,但在开发板层面有以下差异:
| 特性 | 2.8" CYD | 3.5" CYD |
|---------|----------|----------|
| 分辨率 | 240x320 | 320x480 |
| 显示驱动 | ILI9341 | ST7796 |
| 触摸 | XPT2046 (SPI, 软件模拟) | GT911 (I2C, 电容式) |
| 背光 | GPIO 21 | GPIO 27 |
| CC1101 CS | GPIO 27 | **GPIO 26** (GPIO 27 = 背光) |
| 扬声器 RX | GPIO 26 | N/A (GPIO 26 = CC1101 CS) |
| 触摸引脚 | CLK=25, MOSI=32, MISO=39, CS=33 | SDA=33, SCL=32, RST=21, INT=25 |
所有 UI 坐标通过 `cyd_config.h` 中的 `SCALE_Y`/`SCALE_X`/`SCALE_W`/`SCALE_H` 宏自动缩放。
## 完整接线指南
### SPI 总线架构
CYD 拥有**两条独立的 SPI 总线**。理解这一点至关重要:
```
┌─────────────────────────────────────────────────────────────┐
│ HSPI BUS (Display) │
│ MISO=GPIO12 MOSI=GPIO13 SCLK=GPIO14 CS=GPIO15 │
│ ┌─────────┐ │
│ │ ILI9341 │ DC=GPIO2 BL=GPIO21 RST=EN │
│ │ Display │ │
│ └─────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ SEPARATE TOUCH SPI (Bit-Banged) │
│ CLK=GPIO25 MOSI=GPIO32 MISO=GPIO39 CS=GPIO33 │
│ ┌──────────┐ │
│ │ XPT2046 │ IRQ=GPIO36 │
│ │ Touch │ │
│ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ VSPI BUS (Shared Radio Bus) │
│ SCK=GPIO18 MOSI=GPIO23 MISO=GPIO19 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ SD Card │ │ CC1101 │ │ NRF24 │ │ PN532 │ │
│ │ CS=GPIO5 │ │ CS=GPIO27│ │ CSN=GPIO4│ │ CS=GPIO17│ │
│ │ (built-in│ │ GDO0=G22 │ │ CE=GPIO16│ │ (RFID/ │ │
│ │ slot) │ │ GDO2=G35 │ │ │ │ NFC) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ IMPORTANT: Only ONE device active at a time! │
│ Pull target CS LOW, all others HIGH before SPI transfer. │
│ PN532 uses LSBFIRST (others use MSBFIRST) — handled by │
│ Adafruit library's beginTransaction/endTransaction. │
└─────────────────────────────────────────────────────────────┘
```
### CC1101 SubGHz 无线电接线
```
┌─────────────────┐ ┌──────────────────┐
│ CC1101 │ │ CYD ESP32 │
│ HW-863 │ │ │
├─────────────────┤ ├──────────────────┤
│ VCC ─────────────┼──────────────┤ 3.3V │
│ GND ─────────────┼──────────────┤ GND │
│ SCK ─────────────┼──────────────┤ GPIO 18 (VSPI) │
│ MOSI ────────────┼──────────────┤ GPIO 23 (VSPI) │
│ MISO ────────────┼──────────────┤ GPIO 19 (VSPI) │
│ CS ──────────────┼──────────────┤ GPIO 27 (CN1 hdr) │
│ GDO0 (TX) ───────┼──────────────┤ GPIO 22 (P3 hdr) │
│ GDO2 (RX) ───────┼──────────────┤ GPIO 35 (P3 hdr) │
└─────────────────┘ └──────────────────┘
```
**3.5" CYD 注意:** CC1101 CS 在 3.5" 板上移至 **GPIO 26**,因为 GPIO 27 是背光引脚。所有其他 CC1101 引脚保持不变。
**GDO0/GDO2 引脚命名修正:** 原版 ESP32-DIV 固件 (CiferTech) 存在 TX 和 RX **接反** 的问题。HaleHound 修正了这一点:
- **GDO0** (GPIO 22) = 数据发送**至** CC1101 (TX 线)
- **GDO2** (GPIO 35) = 数据**来自** CC1101 (RX 线)
GPIO 35 在 ESP32 上仅可作为输入,这对 RX 来说是正确的。
### NRF24L01+PA+LNA 接线
```
┌─────────────────┐ ┌──────────────────┐
│ NRF24L01 │ │ CYD ESP32 │
│ +PA+LNA │ │ │
├─────────────────┤ ├──────────────────┤
│ VCC ─────────────┼──────────────┤ 3.3V │
│ GND ─────────────┼──────────────┤ GND │
│ SCK ─────────────┼──────────────┤ GPIO 18 (VSPI) │
│ MOSI ────────────┼──────────────┤ GPIO 23 (VSPI) │
│ MISO ────────────┼──────────────┤ GPIO 19 (VSPI) │
│ CSN ─────────────┼──────────────┤ GPIO 4 (was RGB R)│
│ CE ──────────────┼──────────────┤ GPIO 16 (was RGB G)│
│ IRQ (optional) ──┼──────────────┤ GPIO 17 (was RGB B)│
└─────────────────┘ └──────────────────┘
```
**电源注意:** +PA+LNA 版本耗电较大。如果遇到随机重启或初始化失败,请在 NRF24 模块的 VCC 和 GND 之间直接焊接一个 **10uF 电容**。
**引脚重用:** CYD 的 RGB LED 引脚 (GPIO 4, 16, 17) 已被牺牲用于 NRF24 和 PN532。固件中已禁用 RGB LED (`CYD_HAS_RGB_LED = 0`)。
### PN532 NFC/RFID 接线
```
┌─────────────────┐ ┌──────────────────┐
│ PN532 V3 │ │ CYD ESP32 │
│ (Elechouse) │ │ │
├─────────────────┤ ├──────────────────┤
│ VCC ─────────────┼──────────────┤ 3.3V (CN1 hdr) │
│ GND ─────────────┼──────────────┤ GND (CN1 hdr) │
│ SCK ─────────────┼──────────────┤ GPIO 18 (VSPI) │
│ MOSI ────────────┼──────────────┤ GPIO 23 (VSPI) │
│ MISO ────────────┼──────────────┤ GPIO 19 (VSPI) │
│ SS ──────────────┼──────────────┤ GPIO 17 (was RGB B)│
└─────────────────┘ └──────────────────┘
```
**DIP 拨码开关:** 设置 CH1=OFF, CH2=ON 以启用 SPI 模式。
**SPI 注意:** PN532 使用 LSBFIRST SPI,而所有其他 VSPI 设备使用 MSBFIRST。这是安全的,因为 Adafruit 库在每次传输时都会用 `beginTransaction(LSBFIRST)`/`endTransaction()` 包裹,且 SPI 管理器确保同一时间只有一个设备处于活动状态。
**引脚共享:** GPIO 17 原本是 NRF24 IRQ,但 HaleHound-CYD 从未使用 NRF24 中断线。PN532 CS 重用了此引脚。
### GPS 模块接线
```
┌─────────────────┐ ┌──────────────────┐
│ GT-U7 │ │ CYD P1 Connector │
│ GPS │ │ (JST header) │
├─────────────────┤ ├──────────────────┤
│ VCC ─────────────┼──────────────┤ VIN │
│ GND ─────────────┼──────────────┤ GND │
│ TX ──────────────┼──────────────┤ RX (GPIO 3) │
│ RX (not used) ───┼──────────────┤ TX (GPIO 1) │
└─────────────────┘ └──────────────────┘
```
**USB 冲突:** GPIO 3 与 CH340C USB 串口 RX 共享。当 GPS 激活时,固件调用 `Serial.end()` 释放 GPIO 3 以便进行 UART2 重映射。通过 `Serial.println()` (TX 在 GPIO 1) 的调试输出仍然有效。GPS 退出时会恢复正常串口。
### SD 卡
MicroSD 插槽**内置于 CYD 开发板背面**。无需外部接线。
- CS = GPIO 5 (低电平有效)
- 与无线电共享 VSPI 总线 (GPIO 18/19/23)
- SPI 管理器自动处理访问冲突
## 菜单树
```
HALEHOUND-CYD v3.2.0
│
├── WiFi ──────────────────────────────────────────────────
│ ├── Packet Monitor ......... Real-time 802.11 frame capture
│ ├── Beacon Spammer ......... Flood SSIDs (custom or random)
│ ├── WiFi Deauther .......... Target deauth with network scan
│ ├── Probe Sniffer .......... Capture probe requests → Evil Twin
│ ├── WiFi Scanner ........... Scan APs → Tap-to-Deauth/Clone
│ ├── Captive Portal ......... GARMR Evil Twin credential harvest
│ ├── Station Scanner ........ Enumerate connected clients
│ ├── Auth Flood ............. 802.11 auth frame flood attack
│ └── Back to Main Menu
│
├── Bluetooth ─────────────────────────────────────────────
│ ├── BLE Jammer ............. Flood advertisements
│ ├── BLE Spoofer ............ Clone device identities
│ ├── BLE Beacon ............. Broadcast custom BLE beacons
│ ├── Sniffer ................ Passive BLE traffic analysis
│ ├── BLE Scanner ............ Discover nearby BLE devices
│ ├── WhisperPair ............ CVE-2025-36911 Fast Pair scanner
│ ├── AirTag Detect .......... Apple FindMy tracker detection
│ ├── Lunatic Fringe ......... Multi-platform tracker scanner
│ └── Back to Main Menu
│
├── 2.4GHz (NRF24) ───────────────────────────────────────
│ ├── Scanner ................ Channel activity scanner
│ ├── Spectrum Analyzer ...... Visual RF spectrum display
│ ├── WLAN Jammer ............ 2.4GHz broadband disruption
│ ├── Proto Kill ............. Multi-protocol attack suite
│ └── Back to Main Menu
│
├── SubGHz (CC1101) ──────────────────────────────────────
│ ├── Replay Attack .......... Record and replay RF signals
│ ├── Brute Force ............ Automated code generation
│ ├── SubGHz Jammer .......... Wideband SubGHz disruption
│ ├── Spectrum Analyzer ...... SubGHz RF spectrum display
│ ├── Saved Profile .......... Load saved signal profiles
│ └── Back to Main Menu
│
├── RFID (PN532) ──────────────────────────────────────────
│ ├── NFC Scanner ............ Detect & identify cards in range
│ ├── Card Reader ............ Read MIFARE block data
│ ├── Card Clone ............. Clone UID to writable card
│ ├── Brute Force ............ MIFARE key bruteforce (A/B)
│ ├── Card Emulator .......... Emulate captured card UID
│ └── Back to Main Menu
│
├── Jam Detect ────────────────────────────────────────────
│ ├── WiFi Guardian .......... Detect 802.11 deauth floods
│ ├── BLE Watchdog ........... Detect BLE advertisement floods
│ ├── SubGHz Sentinel ........ Detect SubGHz carrier jamming
│ └── Back to Main Menu
│
├── SIGINT ────────────────────────────────────────────────
│ ├── EAPOL Capture .......... WPA handshake/PMKID capture
│ ├── Karma Attack ........... Auto-respond to probe requests
│ ├── Wardriving ............. GPS-tagged AP scanning
│ ├── Saved Captures ......... Browse captured handshakes
│ └── Back to Main Menu
│
├── Tools ─────────────────────────────────────────────────
│ ├── Serial Monitor ......... UART passthrough terminal
│ ├── Update Firmware ........ Flash .bin from SD card
│ ├── Touch Calibrate ........ Touchscreen recalibration
│ ├── GPS .................... Live satellite view & NMEA data
│ ├── Radio Test ............. SPI radio hardware verification
│ └── Back to Main Menu
│
├── Settings ──────────────────────────────────────────────
│ ├── Brightness ............. Backlight PWM control
│ ├── Screen Timeout ......... 30s / 1m / 2m / 5m / 10m / Never
│ ├── Swap Colors ............ BGR / RGB panel toggle
│ ├── Theme .................. Color theme selection
│ ├── Rotation ............... Portrait orientation (0°/180°/90CW/90CCW)
│ ├── Device Info ............ Hardware stats (+ Easter Egg)
│ ├── Set PIN ................ 4-digit lock PIN (optional)
│ ├── CC1101 Module .......... Standard / E07 PA module toggle
│ └── Back to Main Menu
│
└── About ─────────────────────────────────────────────────
└── Full-screen about page with armed module list
```
## 攻击模块 - 详情
### WiFi 攻击
所有 WiFi 攻击使用 ESP32 内置 WiFi 无线电。无需外部模块。
#### 数据包监视器
将 WiFi 无线电置于混杂模式并显示实时 802.11 帧统计信息。显示管理帧、数据帧和控制帧计数以及实时每秒数据包图表。
```
┌─────────────────────────────┐
│ ATTACK FLOW │
│ │
│ WiFi → Promiscuous Mode │
│ → Frame Callback │
│ → Classify Frame Type │
│ → Update Counters │
│ → Draw Live Graph │
└─────────────────────────────┘
```
#### 信标洪泛
用虚假的 WiFi 网络名称充斥空域。可配置 SSID 列表或随机生成。在最大 TX 功率下使用原始 802.11 帧注入。
```
┌─────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ Init WiFi (APSTA mode) │
│ Set max TX power (82 = +20.5dBm) │
│ Disable power save (WIFI_PS_NONE) │
│ Loop: │
│ Build beacon frame with target SSID │
│ esp_wifi_80211_tx() on AP interface │
│ Cycle through SSID list │
│ Display count on screen │
└─────────────────────────────────────────┘
```
**目标场景:** 干扰客户端自动连接,充斥附近 WiFi 列表,在行动中制造干扰。
#### WiFi 反认证器
扫描接入点,允许您通过点击选择目标,然后发送反认证帧以断开该 AP 上的所有客户端。
```
┌──────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. Scan networks (esp_wifi_scan_start) │
│ 2. Display AP list with RSSI bars │
│ 3. User taps target AP │
│ 4. Switch to target's channel │
│ 5. Build deauth frame (reason code 7) │
│ 6. esp_wifi_80211_tx() via AP interface │
│ 7. Broadcast deauth to FF:FF:FF:FF:FF:FF │
│ 8. Display deauth packet counter │
│ │
│ REQUIRES: WIFI_MODE_APSTA │
│ Raw frame TX needs an active AP interface. │
│ STA does scanning, AP does injection. │
└──────────────────────────────────────────────┘
```
**WiFi 扫描器 → 反认证联动:** WiFi 扫描器模块具有“点击即攻击”功能。点击任何扫描到的 AP 并选择 Deauth —— 目标 BSSID、SSID 和信道将直接传递给反认证器,跳过扫描阶段。
#### 探测请求嗅探器 → Evil Twin 链
捕获附近设备的探测请求帧,揭示它们正在寻找的 SSID。选择任何探测到的 SSID 即可生成一个伪装该网络的 GARMR Evil Twin 强制门户。
```
┌────────────────────────────────────────────────┐
│ ATTACK CHAIN │
│ │
│ Probe Sniffer │
│ → Capture probe requests (passive) │
│ → Display SSID + client MAC + RSSI │
│ → User selects probed SSID │
│ ↓ │
│ GARMR Captive Portal (auto-spawns) │
│ → Create fake AP with selected SSID │
│ → DNS hijack all domains to portal │
│ → Serve credential harvesting page │
│ → Captured creds displayed on screen │
└────────────────────────────────────────────────┘
```
#### WiFi 扫描器
全功能 AP 扫描器,显示信号强度条、信道信息、加密类型和供应商 OUI 查询。点击任何结果进行攻击:
```
Tap an AP:
├── DEAUTH → Launch deauther pre-targeted at this AP
└── CLONE → Launch GARMR captive portal with this SSID
```
#### 强制门户 (GARMR Evil Twin)
独立的强制门户,创建虚假 AP 并捕获凭据。从 `portal_pages.h` 提供可定制的门户页面。所有 DNS 查询都解析到 ESP32,强制在连接的客户端上弹出强制门户窗口。
#### 站点扫描器
扫描附近网络上连接的客户端 (站点)。显示客户端 MAC、关联的 AP 和 RSSI。支持反认证联动以断开选定的客户端。
#### 认证洪泛
通过从随机 MAC 地址向目标 AP 发送大量 802.11 认证帧来淹没其客户端表。扫描附近的接入点,点击选择目标,然后进行洪泛攻击。
```
┌──────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. Scan networks (esp_wifi_scan_start) │
│ 2. Display AP list with RSSI bars │
│ 3. User taps target AP │
│ 4. Switch to target's channel │
│ 5. Validate TX with test auth frame │
│ 6. Flood auth frames from random MACs │
│ 7. 85-bar equalizer shows attack rhythm │
│ │
│ REQUIRES: WIFI_MODE_APSTA │
│ Raw frame TX needs an active AP interface. │
└──────────────────────────────────────────────┘
```
**目标场景:** 强制 AP 耗尽其关联表,导致合法客户端无法连接。对具有小型客户端表限制的消费级路由器有效。
### 蓝牙攻击
所有 BLE 攻击使用 ESP32 内置蓝牙无线电。WiFi 和 BLE 模式之间的无线电资源释放会自动处理。
#### BLE 干扰器
在 BLE 广播信道 (37, 38, 39) 上充斥垃圾数据以扰乱附近的 BLE 连接。
#### BLE 欺骗器
克隆附近 BLE 设备的身份。先扫描,选择目标,然后 ESP32 广播为该设备。
#### BLE 信标
广播自定义 BLE 信标广播包。可以伪装 AirTag、Tile 或自定义 iBeacon/Eddystone 负载。
#### BLE 嗅探器
被动 BLE 流量分析器。实时显示广播数据、RSSI、设备名称和制造商数据。
#### BLE 扫描器
发现工具,附近所有 BLE 设备及其名称、MAC 地址、RSSI 和广播的服务。
#### WhisperPair — CVE-2025-36911 Fast Pair 漏洞扫描器
扫描 Google Fast Pair 设备并探测 WhisperPair 漏洞 (CVE-2025-36911)。发现 Fast Pair 服务广播,然后通过 GATT 连接以检查基于密钥的配对特征在配对模式之外是否可访问 —— 这是一种允许未经授权配对的情况。
```
┌──────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. BLE scan for Fast Pair service UUID │
│ 2. Filter devices with Fast Pair adverts │
│ 3. Connect to target via GATT │
│ 4. Probe Key-Based Pairing characteristic │
│ 5. Report: VULNERABLE / PATCHED / UNKNOWN │
│ │
│ Passive discovery, active GATT probe. │
└──────────────────────────────────────────────┘
```
#### AirTag 检测 — Apple FindMy 追踪器检测
被动 BLE 扫描器,检测 AirTag、FindMy 配件和兼容的第三方追踪器。过滤 Apple 制造商数据 (0x4C) 及 FindMy 类型字节 (0x12/0x19)。显示每个检测到的追踪器的 MAC 地址、RSSI 邻近条、电量估算、距离计算和状态字节。每 5 秒自动重新扫描,检测到新追踪器时闪烁警示。同时追踪最多 20 个唯一设备。
```
┌──────────────────────────────────────────────┐
│ DETECTION METHOD │
│ │
│ 1. BLE scan for Apple manufacturer data │
│ 2. Filter: company ID 0x004C (Apple) │
│ 3. Match FindMy type: 0x12 or 0x19 │
│ 4. Extract status byte and battery level │
│ 5. Calculate distance from RSSI │
│ 6. Track unique MACs (up to 20) │
│ 7. Alert flash on new tracker detection │
│ 8. Auto-rescan every 5 seconds │
└──────────────────────────────────────────────┘
```
**BLE 无线电注意事项:**
- 始终使用 `BLEDevice::deinit(false)` —— `deinit(true)` 存在导致重新初始化失败的 bug
- 在 `BLEDevice::init()` 和 `esp_ble_tx_power_set()` 之间需 150ms 延迟以防崩溃
- BLE 初始化前调用 `esp_wifi_stop()` 即可 —— 切勿调用 `esp_wifi_deinit()`
- 所有 BLE TX 设置为 `ESP_PWR_LVL_P9` (最大功率)
#### Lunatic Fringe — 跨平台 BLE 追踪器扫描器
扫描所有主要平台的商用 BLE 追踪设备。通过服务 UUID `0xFEAA` 识别 Google Find My Device Network (FMDN) 追踪器,`0xFD5A` 识别 Samsung SmartTag,`0xFEED` 识别 Tile,`0xFE33` 识别 Chipolo,以及通过制造商 ID `0x004C` 配合 FindMy 类型字节识别 Apple AirTag。在可滚动列表视图中显示检测到的追踪器,包含平台图标、名称、RSSI 邻近条和信号强度。选择任何追踪器可查看详情,包括 MAC 地址、平台、RSSI、电池电量估算和状态信息。每 5 秒自动重新扫描,检测到新追踪器时闪烁警示。同时追踪最多 20 个唯一设备。
```
┌──────────────────────────────────────────────┐
│ DETECTION METHOD │
│ │
│ 1. BLE scan for tracker service UUIDs │
│ 2. Match: Google FMDN (0xFEAA) │
│ 3. Match: Samsung SmartTag (0xFD5A) │
│ 4. Match: Tile (0xFEED) │
│ 5. Match: Chipolo (0xFE33) │
│ 6. Match: Apple AirTag (0x004C + FindMy) │
│ 7. List view with RSSI proximity bars │
│ 8. Detail view per tracker │
│ 9. Auto-rescan every 5 seconds │
│ 10. Alert flash on new tracker detection │
└──────────────────────────────────────────────┘
```
*概念:Duggie*
### 2.4GHz NRF24 攻击
需要外部 NRF24L01+PA+LNA 模块。所有攻击均在 `RF24_PA_MAX` 功率级别下运行。
#### 扫描器
扫描所有 126 个 NRF24 信道 (2400-2525 MHz) 并显示活动信道。用于在攻击前查找活动的 2.4GHz 设备。
#### 频谱分析仪
使用 NRF24 作为宽带接收器的 2.4GHz 频段实时可视化频谱显示。通过瀑布图显示所有信道的信号强度。
#### WLAN 干扰器
宽带 2.4GHz 破坏。NRF24+PA+LNA 快速循环信道并传输噪声,同时干扰 WiFi、蓝牙、Zigbee 和其他 2.4GHz 协议。
```
┌──────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ Init NRF24 at RF24_PA_MAX │
│ Loop across channels 0-125: │
│ Set channel │
│ Transmit random payload │
│ Hop to next channel (fast sweep) │
│ Result: Broadband 2.4GHz disruption │
│ │
│ Affects: WiFi, BLE, Zigbee, Z-Wave, │
│ wireless keyboards/mice, │
│ baby monitors, drones │
└──────────────────────────────────────────┘
```
#### 协议杀手
多协议攻击套件,结合信道跳变与特定协议的破坏模式。使用优化的干扰模式针对特定的 2.4GHz 协议。
### SubGHz CC1101 攻击
需要外部 CC1101 HW-863 模块。所有攻击均使用 `setPA(12)` (最大 TX 功率)。
#### 重放攻击
录制 SubGHz 信号,然后按需重放。适用于车库门、车钥匙 (固定码)、门禁开启器以及工作在 300-928 MHz 范围内的其他设备。
```
┌──────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. Set target frequency (e.g., 433.92 MHz) │
│ 2. Enter RX mode — listen for signals │
│ 3. Signal captured → stored in memory │
│ 4. User triggers replay │
│ 5. Switch to TX mode │
│ 6. setPA(12) for max power │
│ 7. Transmit captured signal │
│ 8. Optional: save to SD card profile │
│ │
│ Supported modulations: ASK/OOK, 2-FSK │
│ Common targets: 315MHz, 433.92MHz, 868MHz │
└──────────────────────────────────────────────┘
```
#### 暴力破解
针对固定码系统的自动代码生成。遍历可能的代码组合并逐个发送。对码空间有限的老式车库门和门禁系统有效。
#### SubGHz 干扰器
可配置 SubGHz 频率上的宽带干扰。扰乱范围内的车库门开启器、车钥匙、报警系统和其他 SubGHz 设备。
#### 频谱分析仪
实时 SubGHz 频谱显示。扫描 300-928 MHz 范围以在攻击前识别活动频率。
#### 已保存配置
从 SD 卡加载并重放之前保存的 SubGHz 信号配置文件。
### SIGINT 行动
用于被动和主动无线侦察的高级信号情报模块。
#### EAPOL 捕获
捕获附近网络的 WPA/WPA2 四次握手和 PMKID。强制反认证以触发重新认证,然后捕获 EAPOL 交换。
```
┌──────────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. Scan for target networks │
│ 2. User selects target AP │
│ 3. Set WiFi to target channel │
│ 4. Enable promiscuous mode │
│ 5. Send deauth to force reauthentication │
│ 6. Capture EAPOL frames: │
│ - Message 1: AP → Client (ANonce + PMKID) │
│ - Message 2: Client → AP (SNonce) │
│ - Message 3: AP → Client (GTK) │
│ - Message 4: Client → AP (Confirmation) │
│ 7. Extract PMKID from Message 1 RSN IE │
│ 8. Save to SD card in hashcat format │
│ 9. Display capture status on screen │
│ │
│ Output: .hc22000 or .hccapx for offline crack │
└──────────────────────────────────────────────────┘
```
#### Karma 攻击
自动响应所有探测请求并回复匹配的信标帧,诱骗设备连接到 ESP32。与强制门户结合用于凭据收集。
```
┌──────────────────────────────────────────────┐
│ ATTACK FLOW │
│ │
│ 1. Enable promiscuous mode │
│ 2. Listen for probe request frames │
│ 3. For each probed SSID: │
│ → Create matching beacon response │
│ → Broadcast as that network │
│ 4. Client auto-connects (trusts SSID) │
│ 5. DNS hijack to captive portal │
│ 6. Harvest credentials │
│ │
│ Captures: "Home_WiFi", "Starbucks", │
│ "HOTEL_GUEST" — whatever devices remember │
└──────────────────────────────────────────────┘
```
#### Wardriving
带 GPS 标记的 WiFi 扫描。扫描接入点的同时记录 GPS 坐标,创建每个网络及其物理位置的日志。需要 GPS 模块。
```
┌────────────────────────────────────┐
│ DATA COLLECTED PER AP │
│ │
│ SSID, BSSID, Channel, RSSI, │
│ Encryption type, Latitude, │
│ Longitude, Altitude, Timestamp │
│ │
│ Saved to SD card as CSV/JSON │
└────────────────────────────────────┘
```
#### 已保存捕获
浏览和管理 SD 卡上存储的之前捕获的 EAPOL 握手和 PMKID 哈希。
### 工具
#### 串口监视器
用于硬件黑客的 UART 直通终端。连接到目标设备的调试端口,直接从 CYD 屏幕读取/发送串口数据。
- **P1 接口:** 通过 UART0 全双工 (GPIO 3 RX / GPIO 1 TX) —— 与 USB 串口共享
- **扬声器引脚:** 仅 RX,通过 GPIO 26 —— 专用,无 USB 冲突
- **默认波特率:** 115200 (可配置)
#### 更新固件
直接从 SD 卡刷入新的固件 `.bin` 文件,无需电脑。浏览 SD 卡,选择 `.bin`,确认后 ESP32 应用 OTA 更新并重启。
#### 触摸校准
交互式四角触摸屏校准工具。点击屏幕每个角落的十字准心,计算特定开发板的原始触摸到屏幕坐标映射。每点采集 5 次采样平均值以确保精度。
**自动校准:** 刷机后首次启动 (或 EEPROM 重置后),固件在显示主菜单前自动运行触摸校准。这确保每块板立即获得可用的触摸映射 —— 无需在触摸失灵时通过菜单导航。
**EEPROM 持久化:** 校准值保存至 EEPROM 并在断电后保留。可随时通过 工具 > 触摸校准 重新校准。按 BOOT 按钮取消校准。
#### GPS
通过 TinyGPSPlus 进行实时 GPS 卫星视图和 NMEA 数据解析。显示卫星数量、定位状态、纬度、经度、海拔、速度和 HDOP。以 9600 波特率自动扫描 GPIO 3 (P1 接口)。
#### 无线电测试
用于 NRF24L01+ 和 CC1101 无线电的交互式 SPI 硬件验证工具。通过读取芯片识别寄存器 (NRF24 CONFIG 寄存器 0x08,CC1101 VERSION 寄存器 0x14) 测试 SPI 通信,并提供智能故障诊断 —— 区分布线问题、芯片损坏和克隆芯片检测。包括电池电压读数和 4 页接线原理图,采用 KiCad 风格布局,显示 NRF24、GPS 和 CC1101 连接的彩色走线、焊点和芯片框。
### 设置
#### 亮度
背光 PWM 控制,带有更暗/更亮触摸按钮。范围:10-255。保存至 EEPROM。
#### 屏幕超时
无操作后自动变暗。选项:30 秒、1 分钟、2 分钟、5 分钟、10 分钟、从不。触摸或按 BOOT 唤醒。保存至 EEPROM。
#### 交换颜色
切换 ILI9341 显示屏的 BGR (默认) 和 RGB 色彩顺序。某些批次的 CYD 板面板连线存在颜色通道交换,导致红色显示为蓝色,反之亦然。此设置直接写入 MADCTL 寄存器并保存至 EEPROM。
#### 旋转
不同的 CYD 制造商以不同方向安装 LCD 面板。如果刷机后显示屏出现倒置或侧向,请使用此设置进行校正。UI **仅为竖屏** (高大于宽) —— 此设置旋转竖屏布局以补偿开发板面板的物理安装方式。
| 选项 | 使用场景 |
|--------|----------|
| 标准 (0°) | 显示正常 —— 最常见 |
| 翻转 180° | 显示屏倒置 |
| 90° 顺时针 | 面板侧向安装 (顺时针) |
| 90° 逆时针 | 面板侧向安装 (逆时针) |
每次旋转更改后触摸输入会自动重新校准。所选旋转保存至 EEPROM 并在断电后保留。
**注意:** 90° 顺时针和 90° 逆时针仅用于补偿侧向安装的 LCD 面板。它们**不是**横屏模式。
#### 设备信息
硬件信息页面,显示:设备名称、固件版本、可用堆内存、CPU 频率、Flash 大小和板型。
**彩蛋:** 快速连续点击 "By: HaleHound" 五次以查看 PR #76 故事。
## 触摸导航
CYD 除了 BOOT (GPIO 0) 外没有物理按钮。所有导航均基于触摸屏。
### 主菜单
主菜单以 2x4 网格显示 8 个类别,配有骷髅图标。**点击任何图标**进入该子菜单。
### 子菜单
子菜单显示为垂直列表。**点击任何项目**启动该模块。
### 模块内部
| 操作 | 方法 |
|--------|--------|
| **退出模块** | 点击返回图标 (左上角,状态栏下方) |
| **退出模块** | 按 BOOT 按钮 (GPIO 0) |
| **滚动** | 点击向上区域 (左上) 或向下区域 (左下) |
| **选择** | 点击屏幕中心 |
| **从休眠唤醒** | 点击任意位置或按 BOOT |
### 触摸区域 (2.8" 竖屏)
```
┌────────────┬────────────────┬────────────┐
│ UP │ │ BACK │ y: 0-60
│ (0-80) │ │ (160-240) │
├────────────┤ ├────────────┤
│ │ │ │
│ │ SELECT │ │
│ │ (80-160, │ │
│ │ 130-190) │ │
│ │ │ │
├────────────┤ ├────────────┤
│ DOWN │ │ │ y: 260-320
│ (0-80) │ │ │
└────────────┴────────────────┴────────────┘
```
## TX 功率配置
每个攻击无线电均配置为最大发射功率。
| 无线电 | 设置 | 功率级别 | 已验证 |
|-------|---------|-------------|----------|
| WiFi 信标洪泛 | `esp_wifi_set_max_tx_power(82)` + `WIFI_PS_NONE` | +20.5 dBm | 是 |
| WiFi 反认证器 | `esp_wifi_set_max_tx_power(82)` + `WIFI_PS_NONE` | +20.5 dBm | 是 |
| NRF24 (所有模式) | `RF24_PA_MAX` | +20 dBm (带 PA+LNA) | 是 |
| CC1101 重放 | `setPA(12)` | +12 dBm | 是 |
| CC1101 干扰器 | `setPA(12)` | +12 dBm | 是 |
| CC1101 暴力破解 | `setPA(12)` | +12 dBm | 是 |
| BLE (所有模式) | `ESP_PWR_LVL_P9` | +9 dBm | 是 |
纯被动模块 (数据包监视器、探测请求嗅探器、站点扫描器、BLE 扫描器) 不设置 TX 功率,因为它们仅接收。
## SD 卡结构
插入 MicroSD 卡 (FAT32 格式) 用于数据捕获和 OTA 更新。
```
/sd/
├── eapol/ ← EAPOL/PMKID captures
│ ├── target_handshake.hc22000
│ └── ...
├── wardriving/ ← GPS-tagged AP logs
│ └── wardrive_20260215.csv
└── firmware/ ← OTA update binaries
└── halehound-cyd.bin
```
## 预编译二进制文件
预编译固件二进制文件位于 `flash_package/` 文件夹中,供不想从源码构建的用户使用。
### 单一二进制文件 —— 适用于所有开发板
一个固件二进制文件适用于所有 CYD 开发板,无论 LCD 面板方向如何。无需再猜测下载哪个旋转文件。
| 文件 | 烧录地址 | 描述 |
|------|---------------|-------------|
| `HaleHound-CYD-FULL.bin` | `0x0` | 完整镜像 —— 单文件,最简单的方法 |
| `HaleHound-CYD.bin` | `0x10000` | 仅固件 —— 需要 3 个共享启动文件 |
如果刷机后显示屏倒置或侧向,请进入 **设置 > 旋转** 并选择正确的方向。触摸会自动重新校准。无需重新刷机。
### 烧录方式
提供两种烧录方式。如果一种不工作,请尝试另一种。
| 方式 | 文件 | 备注 |
|--------|-------|-------|
| **单文件** | `HaleHound-CYD-FULL.bin` 于 `0x0` | 一个文件,适用于大多数开发板 |
| **四文件** | `bootloader.bin` + `partitions.bin` + `boot_app0.bin` + `HaleHound-CYD.bin` | 适用于所有开发板,包括不兼容 DIO/QIO 的板子 |
### 使用 ESP Web Flasher 烧录 (免安装)
1. 在 **Chrome**、**Edge** 或 **Opera** 中打开 [esp.huhn.me](https://esp.huhn.me) (不支持 Firefox/Safari)
2. 点击 **Connect** 并选择您的 CYD 串口
3.单文件方法:** 设置地址 `0x0`,选择 `HaleHound-CYD-FULL.bin`
4. **四文件方法:** 添加所有四个条目:
- `0x1000` → `bootloader.bin`
- `0x8000` → `partitions.bin`
- `0xe000` → `boot_app0.bin`
- `0x10000` → `HaleHound-CYD.bin`
5. 点击 **Program** 并等待完成
6. 重新给 CYD 上电 (拔下并重新插入 USB)
### 使用 esptool 烧录 (命令行)
```
# 单文件方法
esptool.py --chip esp32 --baud 115200 write_flash 0x0 HaleHound-CYD-FULL.bin
# 四文件方法
esptool.py --chip esp32 --baud 115200 write_flash \
0x1000 bootloader.bin \
0x8000 partitions.bin \
0xe000 boot_app0.bin \
0x10000 HaleHound-CYD.bin
```
### 首次启动
首次启动时 (或刷机后),固件会自动运行触摸校准 —— 出现提示时点击 4 个角落的十字准心。如果显示屏方向错误,请进入 **设置 > 旋转** 进行修正。UI 仅支持竖屏模式。
### CH340 USB 驱动
CYD 开发板使用 CH340 USB 转串口芯片。如果您的电脑无法识别开发板,请安装驱动:
- **Windows:** [CH341SER.EXE](https://www.wch-ic.com/downloads/CH341SER_EXE.html)
- **macOS:** [CH341SER_MAC.ZIP](https://www.wch-ic.com/downloads/CH341SER_MAC_ZIP.html)
- **Linux:** 内核 5.x+ 内置 (无需安装)
### 预编译二进制文件故障排除
| 问题 | 解决方案 |
|---------|----------|
| 单文件刷机后黑屏 | 改用四文件方法 |
| 显示屏侧向或倒置 | 进入 设置 > 旋转 并选择正确的方向 |
| 触摸反向或偏移 | 在设置中更改旋转,或使用 工具 > 触摸校准 |
| "Failed to connect" 错误 | 按住 BOOT 按钮同时点击 Program |
| 浏览器不显示串口 | 使用 Chrome/Edge/Opera 并安装 CH340 驱动 |
| 刷机完成但无法启动 | 先擦除 Flash:`esptool.py --chip esp32 erase_flash` 然后重刷 |
完整分步说明请参阅 `flash_package/FLASH_INSTRUCTIONS.txt`。
## 从源码构建
### 前置条件
- [PlatformIO](https://platformio.org/) (CLI 或 IDE)
- Python 3.10-3.13 (3.14 需要 platform.py 补丁)
- 连接到 CYD 的 USB 线
### 构建
```
# 2.8" CYD (默认)
pio run -e esp32-cyd
# 3.5" CYD
pio run -e esp32-cyd-35
# E32R28T 变体
pio run -e esp32-e32r28t
# NM-RF-Hat 变体
pio run -e esp32-cyd-hat
```
### 烧录
```
# 构建并上传 (2.8")
pio run -e esp32-cyd --target upload
# 构建并上传 (3.5")
pio run -e esp32-cyd-35 --target upload
# 如果串口未自动检测到:
pio run -e esp32-cyd --target upload --upload-port /dev/cu.usbserial-0001
```
### 串口监视器
```
pio device monitor -b 115200
```
### 一键命令 (构建 + 烧录 + 监视)
```
pio run -e esp32-cyd --target upload && pio device monitor -b 115200
```
### 分区方案
使用 `huge_app.csv` 分区方案以获得最大应用空间。由于攻击模块、图标和嵌入资源数量众多,固件体积较大。
## 引脚参考表
### 使用中的引脚
| GPIO | 功能 | 总线 | 接口 | 备注 |
|------|----------|-----|-----------|-------|
| 0 | BOOT 按钮 | - | PCB | 低电平有效,Strapping 引脚 |
| 1 | USB 串口 TX | UART0 | P1 | 与 GPS TX 共享 (未使用) |
| 2 | TFT DC | HSPI | PCB | 数据/命令选择 |
| 3 | GPS RX / USB 串口 RX | UART2 | P1 | 共享 —— Serial.end() 变通方案 |
| 4 | NRF24 CSN | VSPI | Wire | 原为 RGB 红色 LED |
| 5 | SD 卡 CS | VSPI | PCB | 板载 MicroSD 插槽 |
| 12 | TFT MISO | HSPI | PCB | 显示数据输入 |
| 13 | TFT MOSI | HSPI | PCB | 显示数据输出 |
| 14 | TFT SCLK | HSPI | PCB | 显示时钟 |
| 15 | TFT CS | HSPI | PCB | 显示芯片选择 |
| 16 | NRF24 CE | - | Wire | 原为 RGB 绿色 LED |
| 17 | NRF24 IRQ | - | Wire | 原为 RGB 蓝色 LED (可选) |
| 18 | VSPI SCK | VSPI | Wire | 共享:SD + CC1101 + NRF24 |
| 19 | VSPI MISO | VSPI | Wire | 共享:SD + CC1101 + NRF24 |
| 21 | TFT 背光 | PWM | PCB | PWM 通道 0 |
| 22 | CC1101 GDO0 (TX) | - | P3 | 数据发往无线电 |
| 23 | VSPI MOSI | VSPI | Wire | 共享:SD + CC1101 + NRF24 |
| 25 | 触摸 CLK | Bit-bang | PCB | XPT2046 触摸 SPI |
| 26 | 扬声器 / UART 监视器 | - | P4 | 8002A 功放输出 (仅 RX 串口) |
| 27 | CC1101 CS | VSPI | CN1 | CC1101 芯片选择 |
| 32 | 触摸 MOSI | Bit-bang | PCB | XPT2046 触摸 SPI |
| 33 | 触摸 CS | Bit-bang | PCB | XPT2046 触摸芯片选择 |
| 34 | LDR / 电池 ADC | ADC | PCB | 仅输入,可用 |
| 35 | CC1101 GDO2 (RX) | - | P3 | 数据来自无线电 (仅输入) |
| 36 | 触摸 IRQ | - | PCB | XPT2046 触摸中断 |
| 39 | 触摸 MISO | Bit-bang | PCB | XPT2046 触摸 SPI (仅输入) |
### 不可用引脚
| GPIO | 原因 |
|------|--------|
| 6-11 | 连接至 SPI flash —— **切勿使用** |
| 34, 36, 39 | 仅输入 —— 无内部上拉/下拉 |
### 功能标志
在 `cyd_config.h` 中设置:
| 标志 | 默认值 | 含义 |
|------|---------|---------|
| `CYD_HAS_CC1101` | 1 | CC1101 SubGHz 无线电已连接 |
| `CYD_HAS_NRF24` | 1 | NRF24L01+PA+LNA 已连接 |
| `CYD_HAS_GPS` | 1 | GPS 模块已连接 |
| `CYD_HAS_SDCARD` | 1 | SD 卡已启用 |
| `CYD_HAS_RGB_LED` | 0 | 禁用 (引脚用于 NRF24) |
| `CYD_HAS_SPEAKER` | 0 | 禁用 (GPIO 26 用于串口监视器) |
| `CYD_HAS_PCF8574` | 0 | 无 I2C 按钮扩展器 (CYD 使用触摸) |
| `CYD_HAS_SERIAL_MON` | 1 | UART 串口监视器已启用 |
## SPI 总线共享
三个设备共享 VSPI 总线 (GPIO 18/19/23)。`spi_manager` 模块处理互斥:
```
┌────────────────────────────────────────────────────┐
│ SPI BUS ARBITRATION │
│ │
│ Before using any VSPI device: │
│ 1. Pull ALL CS pins HIGH (deselect all) │
│ GPIO 5 (SD) → HIGH │
│ GPIO 27 (CC1101) → HIGH │
│ GPIO 4 (NRF24) → HIGH │
│ 2. Pull target CS pin LOW (select one) │
│ 3. Perform SPI transaction │
│ 4. Pull target CS HIGH when done │
│ │
│ RULE: Only ONE device active at a time! │
│ Violating this corrupts data on all three. │
└────────────────────────────────────────────────────┘
```
## 已知问题
| 问题 | 状态 | 变通方案 |
|-------|--------|------------|
| GPIO 26 无法用于 GPS UART | 已确认 | 使用 GPIO 3 (P1)。GPIO 26 馈通 8002A 功放 IC |
| GPS 与 USB 串口共享 GPIO 3 | 设计如此 | GPS 激活期间固件调用 Serial.end(),退出时恢复 |
| RGB LED 不可用 | 设计如此 | 引脚重用于 NRF24 CE/CSN 和 PN532 CS |
| 扬声器不可用 (2.8") | 设计如此 | GPIO 26 重用于串口监视器 RX |
| 扬声器不可用 (3.5") | 设计如此 | GPIO 26 = 3.5" 上的 CC1101 CS |
| Python 3.14 破坏 PlatformIO 构建 | Platform bug | 打补丁 `platform.py` 或使用 Python 3.10-3.13 |
| NRF24+PA+LNA 随机重启 | 电源问题 | 在模块 VCC/GND 间增加 10uF 电容 |
| CYD 板 LCD 面板方向不同 | 硬件差异 | 使用 设置 > 旋转 选择正确的竖屏方向 |
| 触摸映射因 2.8" CYD 板而异 | 硬件差异 | 首次启动自动校准;通过 工具 → 触摸校准 重新校准 |
| PN532 使用 LSBFIRST SPI | 设计如此 | Adafruit 库在 beginTransaction 中处理字节顺序;SPI 管理器解决总线冲突 |
## 项目结构
```
HaleHound-CYD/
├── HaleHound-CYD.ino ......... Main firmware, menus, setup/loop
├── cyd_config.h ............... Master pin configuration
├── shared.h ................... Color palette, state variables
├── platformio.ini ............. Build configuration
├── User_Setup.h ............... TFT_eSPI display driver config
│
├── wifi_attacks.cpp/h ......... Packet Mon, Beacon, Deauth, Probe,
│ WiFi Scan, Captive Portal, Station Scan
├── bluetooth_attacks.cpp/h .... BLE Jammer, Spoofer, Beacon, Sniffer, Scanner
├── nrf24_attacks.cpp/h ........ Scanner, Analyzer, WLAN Jammer, Proto Kill
├── nrf24_config.cpp/h ......... NRF24 initialization and SPI setup
├── subghz_attacks.cpp/h ....... Replay, Brute Force, Jammer, Analyzer
├── subconfig.cpp/h ............ CC1101 initialization and SPI setup
│
├── rfid_attacks.cpp/h ......... PN532 NFC Scanner, Reader, Clone, Brute, Emulator
│
├── eapol_capture.cpp/h ........ EAPOL/PMKID handshake capture
├── karma_attack.cpp/h ......... Karma AP auto-respond attack
├── wardriving.cpp/h ........... GPS-tagged AP scan engine
├── wardriving_screen.cpp/h .... Wardriving display and UI
├── saved_captures.cpp/h ....... Browse saved handshakes on SD
├── jam_detect.cpp/h ........... WiFi/BLE/SubGHz jam detection
│
├── radio_test.cpp/h ........... SPI radio diagnostics + wiring diagrams
├── gps_module.cpp/h ........... GPS setup, NMEA parsing, display
├── gps.h ...................... GPS type definitions
├── serial_monitor.cpp/h ....... UART passthrough terminal
├── firmware_update.cpp/h ...... OTA update from SD card
│
├── touch_buttons.cpp/h ........ Touch input, zones, calibration
├── CYD28_TouchscreenR.cpp/h ... Custom XPT2046 driver (polling mode)
├── spi_manager.cpp/h .......... VSPI bus arbitration
├── utils.cpp/h ................ Glitch text, centered text, helpers
│
├── icon.h ..................... Menu and module icon bitmaps
├── skull_bg.h ................. Skull watermark background bitmap
├── nuke_icon.h ................ NUKE cloud animation icon
├── nosifer_font.h ............. Custom Nosifer font (3 sizes)
├── portal_pages.h ............. Captive portal HTML pages
│
└── .pio/ ...................... PlatformIO build artifacts
└── libdeps/esp32-cyd/ ..... Auto-downloaded libraries
```
## 库
由 PlatformIO 管理 (`platformio.ini` 中的 `lib_deps`):
| 库 | 版本 | 用途 |
|---------|---------|---------|
| TFT_eSPI | ^2.5.43 | ILI9341 显示驱动 |
| ArduinoJson | ^7.0.0 | 用于配置/配置文件的 JSON 解析 |
| TinyGPSPlus | ^1.0.3 | NMEA GPS 语句解析 |
| EspSoftwareSerial | ^8.2.0 | GPS 软串口 |
| rc-switch | ^2.6.4 | SubGHz 协议编码/解码 |
| arduinoFFT | ^2.0.2 | 频谱分析仪 FFT |
| RF24 | ^1.4.9 | NRF24L01 驱动 |
| XPT2046_Touchscreen | git | 触摸控制器驱动 |
| SmartRC-CC1101-Driver-Lib | ^2.5.7 | CC1101 无线电驱动 |
## 致谢
**HaleHound-CYD** 由 [JesseCHale](https://github.com/JesseCHale) 开发
基于 ESP32-DIV 项目。HaleHound 版包含 8 项新功能、17 个错误修复、硬件引脚修正 (CC1101 TX/RX 交换修复)、全触摸屏支持、SIGINT 套件以及 CYD 硬件移植。
GitHub: [github.com/JesseCHale/HaleHound-CYD](https://github.com/JesseCHale/HaleHound-CYD)
### 社区贡献者
**Duggie** — Lunatic Fringe 概念,EAPOL 返回按钮 bug 报告
*我打造了它。*
标签:Cheap Yellow Display, CYD, ESP32, HaleHound, UML, Wi-Fi安全, 便携式渗透设备, 信号分析, 多协议安全工具, 安全测试, 嵌入式安全, 提示词注入, 攻击性安全, 物联网安全, 硬件黑客, 蓝牙安全