Sor3nt/Flipper-Zero-ESP32-Port

GitHub: Sor3nt/Flipper-Zero-ESP32-Port

Flipper Zero 固件向 ESP32 开发板的完整移植,以低成本硬件实现多协议无线射频、NFC、WiFi 及蓝牙等丰富的硬件交互功能。

Stars: 200 | Forks: 45

# Flipper Zero ESP32 移植版 这是 [Flipper Zero](https://flipperzero.one/) 固件向基于 ESP32 的开发板的移植。本项目将 Flipper Zero 的 UI、服务和应用框架带到了高性价比的 ESP32 硬件上 —— 无需 Flipper Zero 设备。 ## 支持的开发板 ![img](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/11d72807cd051442.jpg) | 开发板 | MCU | 显示屏 | 输入 | SubGHz | NFC | IR | SD Card | |---|---|---|---|---|---|---|---| | **LilyGo T-Embed CC1101** | ESP32-S3 (Xtensa LX7) | ST7789 320×170 | 旋转编码器 + 按钮 | CC1101 | PN532 (I2C) | RMT TX + RX | SPI | | **Waveshare ESP32-C6-LCD-1.9** | ESP32-C6 (RISC-V) | ST7789V2 320×172 | CST816S 触摸 | — | — | — | SPI | | **Waveshare ESP32-C6-LCD-1.47** ⚠️ | ESP32-C6 (RISC-V) | JD9853 320×172 | AXS5106L 触摸 | — | — | — | SPI | | ** DIY ESP32-S3 with 2.8" TFT ** ⚠️| ESP32-S3 (Xtensa LX7) |2.8 ILI9341 320×240 | 6× 轻触按钮 | CC1101 | PN532 (I2C) | TX | SPI | ![img](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8eddc39e28051448.jpg) ## 如何烧录 最简单的方法是使用 **Web 烧录器** —— 不需要工具链,只需 Chrome/Edge 浏览器和一根 USB 线: **[通过浏览器烧录](https://sor3nt.github.io/interface.html)** 连接你的开发板,点击烧录,即可完成。烧录后,将 [`https://github.com/Sor3nt/Flipper-Zero-ESP32-Port/releases/download/v1.1.5/sdcard.zip`](sdcard/) 中的内容复制到 FAT32 SD 卡并插入 —— 大多数应用程序需要那里的文件才能运行。 ## 应用程序 ### 📡 无线 / 射频 #### Sub-GHz 用于 433–868 MHz 信号的外部 CC1101 接收器/发射器。 - 接收与解码 - 读取 RAW:将未知波形捕获为 `.sub` 文件以供日后分析 - 带有扫频和实时 RSSI 的频率分析仪 - Hopper:在接收期间扫描所有预设频段 - 发射已保存的文件;手动创建信号(频率、调制、协议、密钥/序列号/计数器) - 使用制造商字典进行暴力破解 / sub-brute 攻击 - 用于顺序发射的播放列表 - **TPMS 解码** —— 胎压传感器:Schrader GG4、Citroën、Ford、Renault、Toyota (PMV107J) 以及通用解码器;带有可编辑传感器数据的专用信息视图 - **限制:** AES 加密的制造商密钥库(`keeloq_mfcodes`、`nice_flor_s`、`alutech_at_4n`)无法在此移植版上解密 —— 只有纯文本的 `keeloq_mfcodes_user` 可用于 Keeloq 解码。 #### Sub-GHz 遥控器 将保存的 `.sub` 文件批量处理的多按钮遥控器布局。将上/下/左/右/OK 映射到单独的发射信号;在持久的遥控器配置文件之间切换。 #### WiFi 完整的 WiFi 渗透测试工具包。 - **扫描器** —— SSID、BSSID、信道、RSSI、认证模式 - **连接** —— 自动检测 WPA/WPA2/WPA3,密码输入或已保存密码查询 (`/ext/wifi/.txt`) - **Deauther** —— SSID 模式(单个 AP)或信道模式(该信道上的所有设备) - **嗅探器** —— 将数据包捕获为 PCAP - **握手捕获** —— 记录 EAPOL 4 次握手,可选择使用 deauth 触发 - **AirSnitch** —— 使用密码列表自动暴力破解目标 - **Beacon Spam** —— 搞笑 SSID / Rickroll / 随机 / 自定义 - **网络扫描 / 端口扫描** —— 在已连接的网络上进行主机发现 + 19 个常见端口探测 - **Web 爬虫** —— 基于域名的 Web 爬虫 - **Evil Portal** —— 带有凭证收集的强制门户 - 内置模板:Google 登录、路由器固件更新 - 来自 `/ext/wifi/evil_portal/login_template/*.html` 和 `/ext/wifi/evil_portal/router_template/*.html` 的自定义模板(文件名 = 下拉菜单中的模板名称) - 标记替换:`%ERROR%`、`%SSID_OPTIONS%`(实时 AP 扫描) - 路由器式验证流程:真实 SSID 的下拉菜单、实时 WLAN 重新认证检查、成功后显示捕获的凭证屏幕、失败时带有错误横幅重试 - 从运行屏幕暂停/恢复 AP - 捕获的凭证保存到 `/ext/wifi/evil_portal/_creds.csv` - **互联网桥接** *(新)* —— 可选的 STA 上行链路,带有 NAPT + DNS 转发,以便受害者在门户后获取真实的互联网;iOS 强制门户“成功”处理;上行 SSID/密码可在应用内配置 #### Mesh / Buddy *(ESP-NOW)* 通过 ESP-NOW 将廉价的无头 ESP32 开发板 (**buddies**) 与 T-Embed (**master**) 配对,以卸载 WiFi 捕获并运行远程操作。 - 从锁屏菜单进行 Buddy 发现、配对/移除以及实时状态查看 → **Mesh Clients** - **设备识别** —— 使配对的 buddy 闪烁以定位它 - **WiFi 握手捕获** —— buddy 被动捕获所选信道 (1–13) 上的 EAPOL 握手 - **存储转发** —— buddy 按 BSSID 持久地(RAM + NVS)保留每个完整的握手(M1–M4 + beacon),并将其作为一个经确认的单元交付,能够在 master 缺席和 buddy 重启后存活 - 每个网络一个 `.pcap` 写入 `/ext/wifi/buddy__.pcap`;在所有 mesh 视图上显示“接收到握手”覆盖层 - Buddy 固件位于此存储库中的 [`buddy_firmware/`](buddy_firmware/)(独立的无头 ESP-IDF 项目) #### Bluetooth - **BLE Spam** —— Apple Continuity (Pair/Action/NotYourDevice)、Google FastPair (455+ 型号)、Microsoft SwiftPair、Samsung Buds & Watch、Xiaomi QuickConnect - **BLE Walk** —— 带有 GATT 服务/特征检查的被动扫描器 - **BLE Clone** *(开发中)* —— 复制活动的 BLE 广播 - **FindMy** —— 模拟 Apple AirTag、Samsung SmartTag、Tile beacon(克隆或生成密钥对) - **HID** *(见下文)* —— 通过 BLE 的键盘/鼠标/媒体遥控器 - **Bad USB** —— 通过 USB 或 BLE #### NRF24 *(2.4 GHz, 外部 nRF24L01)* - **频谱分析仪** —— 实时 2.4 GHz 信道活动 - **干扰器** *(重写)* —— 一个引擎,带有可切换的信道源(协议 / 手动 / WiFi / 活动扫描)、策略(CW / Flood / Turbo)和预设;配置按源持久化 - **MouseJacker** —— 将击键注入易受攻击的无线鼠标/键盘 - 也可作为 FAP 使用 (`nRF24_jammer`) #### 红外 基于 RMT 的 TX + RX。 - 学习信号(自动解码或原始信号) - 浏览、编辑并发送已保存的遥控器 - 通用遥控器:电视、空调、音频、投影仪、风扇、LED 控制器(数据库位于 SD 卡上) - 暴力破解基于类别的数据库 - 可配置的 IR 引脚和 5 V GPIO 电源 - 协议:NEC、NEC42、Samsung32、RC5/RC5X、RC6、SIRC 12/15/20、Kaseikyo、RCA、Pioneer ### 🪪 NFC #### NFC *(PN532 over I2C)* - 读取、保存、模拟、写入 NFC 卡/标签 - 手动生成卡(自定义 UID/ATQA/SAK) - Mifare Classic 字典攻击(系统 + 用户字典) - Mifare Ultralight-C 字典解锁 - 使用手动或存储的 DEF 密钥进行 ISO15693 SLIX 解锁 - FeliCa 系统信息、MIFARE DESFire 应用检查、EMV 交易历史 - 14 种支持的协议:ISO14443-3A/3B/4A/4B、ISO15693-3、FeliCa、MIFARE Classic/Ultralight/Plus/DESFire、SLIX、ST25TB、NTAG4xx、Type-4 - 30+ 种支持的卡片自动解析器(Charlie Card、Clipper、EMV、Gallagher、HID、Opal、Skylanders、Troika、…) #### Passy *(FAP)* 生物识别护照 (MRTD) 读取器 —— 通过 NFC 读取并显示 ePassport 中的数据组。作为预构建的 FAP 提供于 [`sdcard/apps/`](sdcard/apps/)。 #### TagTinker *(FAP)* 红外 ESL(电子价签)研究工具包。通过 IR 将自定义图像/文本传输到图形标签。支持 RMT 流式传输、用于图像编辑的 Android 配套应用、单色 + 强调色支持。 ### ⌨️ HID / USB #### Bad USB 用于 `/ext/badusb/` 中 Ducky 脚本 (`.txt`) 文件的 HID payload 运行器。 - 16+ Ducky 命令(DELAY、STRING、REPEAT、HOLD/RELEASE、MEDIA 键、鼠标、ALT-CHAR/ALT-STRING、SYSRQ) - `/ext/badusb/assets/layouts/*.kl` 下的布局(包含约 30 种) - 可配置的 USB VID/PID + 设备名称 - 带有自定义 MAC 和 PIN 验证配对的 BLE 绑定 - 鼠标移动、滚动、按钮模拟;逐字符打字延迟 - **传输方式:** T-Embed 上使用 USB OTG (TinyUSB),Waveshare 上使用 BLE ### 🛠 系统 / 工具 #### 锁屏菜单 / 系统开关 桌面锁屏菜单兼作中央系统控制面板(视开发板而定,可滚动): - **qFlipper** —— 启用 qFlipper 桌面桥接(VID/PID 欺骗 + CDC RPC),以便官方 qFlipper 应用可以连接 *(USB-OTG 开发板)* - **USB 存储** —— 将 SD 卡作为 USB 大容量存储设备公开 *(USB-OTG 开发板)* - **Bluetooth** —— 开启/关闭 BLE - **切换到 Bruce** —— 重启进入共同安装的 [Bruce](https://github.com/BruceDevices/firmware) 固件(当存在于第二个 OTA 插槽时) - **Mesh Clients** —— buddy 发现与控制 *(见上方的 Mesh / Buddy)* #### 存档 带有按媒体类型划分标签的 SD 卡文件浏览器:收藏、Sub-GHz、NFC、LF-RFID、红外、iButton、Bad USB、U2F、应用程序、内部存储、浏览器。固定/取消固定收藏;复制、粘贴、重命名、删除、创建文件夹。 #### JS Runner 基于 mJS 的 JavaScript 运行时,用于 `/ext/apps/Scripts/*.js` 中的用户脚本。 - **可用模块:** `gui`(加载/菜单/对话框/文本+字节输入/弹窗/文件选择器/小部件)、`notification`、`math`、`storage`、`event_loop`、`subghz`、`infrared`、`badusb`、`blebeacon` - **在此移植版中排除** *(需要移植 HAL)*: `js_serial`、`js_gpio`、`js_i2c`、`js_spi` ### 🎮 游戏 #### Doom 完整的 DOOM 移植版。将 `doom1.wad` 放在 `/ext/apps_data/doom/doom1.wad`。旋转编码器转身;点击开火(短按)/ 向前走(长按)。侧边按钮使用门/开关(短按)/ 打开菜单(长按)。 #### Snake 经典贪吃蛇游戏。 ### ⚙ 设置与通用 Bluetooth、背光、时钟、dolphin/pass、扩展端口、输入、通知、电源、存储、系统信息、恢复出厂设置。闲置时的动画海豚桌面。位于 `/ext/Manifest` 的文件包清单(qFlipper 式资产列表 —— 它的存在会抑制“No DB”启动动画)。 ## SD 卡布局 | 路径 | 使用者 | |---|---| | `/ext/Manifest` | 桌面(存在性检查) | | `/ext/dolphin/` + `manifest.txt` | 闲置动画 | | `/ext/apps_assets/nfc/plugins/` | NFC 协议插件 (.fal) | | `/ext/apps_data/nfc/plugins/` | NFC 卡解析器插件 (.fal) | | `/ext/apps_data/js_app/plugins/` | JS 模块绑定 (.fal) | | `/ext/apps_data/doom/doom1.wad` | Doom | | `/ext/badusb/` | Bad USB 脚本 + `assets/layouts/*.kl` | | `/ext/infrared/assets/` | 通用遥控器数据库 (`tv.ir`, `ac.ir`, `audio.ir`, `projectors.ir`, `fans.ir`, `leds.ir`) | | `/ext/lfrfid/assets/iso3166.lfrfid` | LF-RFID 国家代码查询 | | `/ext/nfc/assets/` | MIFARE & EMV 字典 | | `/ext/subghz/assets/` | SubGHz 密钥库 + `dangerous_settings` | | `/ext/u2f/assets/` | U2F 证书 + 密钥 | | `/ext/wifi/.txt` | 已保存的 WiFi 密码 | | `/ext/wifi/buddy__.pcap` | Mesh/Buddy 握手捕获 | | `/ext/wifi/evil_portal/login_template/` | 自定义强制门户模板(无验证) | | `/ext/wifi/evil_portal/router_template/` | 自定义强制门户模板(带 WLAN 验证) | 完整的入门套件位于 [`sdcard.zip`](sdcard.zip) —— 将其解压到 FAT32 SD 卡上。 ## 构建 ### 前置条件 - **[ESP-IDF v5.4.1](https://docs.espressif.com/projects/esp-idf/en/v5.4.1/esp32s3/get-started/)**(要求精确版本) - 已执行 source 的 ESP-IDF export 脚本(默认:`~/esp/esp-idf/export.sh`) ### 构建与烧录(Linux / macOS) ``` # T-Embed (自动检测 /dev/cu.usbmodem*) ./buildAndFlash_T-Embed.sh # 仅构建 ./buildAndFlash_T-Embed.sh --build-only # Waveshare ESP32-C6 ./buildAndFlash_waveshare_c6_1.47.sh ./buildAndFlash_waveshare_c6_1.9.sh ``` ### 构建与烧录 使用 `winbuild.py` —— 这是一个单一的 CLI,封装了用于 `cmd.exe` / PowerShell 的构建、烧录和串口监视器步骤。需要 Python 3 以及安装在 `C:\Espressif\frameworks\esp-idf-v5.4.1` 的 ESP-IDF v5.4.1(或通过 `ESP_IDF_DIR` 覆盖)。 ``` :: One-time: install ESP-IDF python env python winbuild.py setup :: Verify the toolchain activates python winbuild.py check :: Build T-Embed CC1101 (default board) python winbuild.py build :: Build Waveshare ESP32-C6 python winbuild.py build --board waveshare_c6 :: Flash (port defaults to %ESPPORT% or COM14) python winbuild.py flash --port COM14 :: Stream serial output for N seconds python winbuild.py monitor --duration 30 :: Build + flash + monitor in one go python winbuild.py all --port COM14 ``` 开发板:`t_embed`(默认)、`esp32s3`、`waveshare_c6`。使用 `ESP_IDF_DIR` 和 `ESPPORT` 环境变量覆盖默认值。`monitor --reset` 仅适用于 USB-UART 桥接器,不适用于 ESP32-S3 原生 USB-Serial/JTAG —— 请使用 `flash` 或 `all` 来捕获启动日志。 ### 构建 FAP ``` # 必须先构建 Firmware (Linux/macOS) ./buildFap.sh applications/main/my_app ``` ## 移植方法 此移植尽可能保留了原始 Flipper Zero 架构: - **Furi OS** 运行在 FreeRTOS 上,具有相同的线程/互斥锁/事件/记录 API - **服务**(GUI、Input、Storage、Loader、Desktop、BT)使用相同的消息队列和记录系统模式 - **HAL** 将 STM32 外设映射到 ESP-IDF 驱动程序(SPI → `esp_lcd`,I2C → CST816S/PN532,RMT → IR,Bluedroid → BLE,TinyUSB → USB-HID) - **显示** 渲染原始的 128×64 单色 framebuffer,然后进行 2× 放大至 RGB565 以适应彩色 LCD - **应用程序** 几乎无需修改即可编译(`#include` 路径调整,对缺失硬件如 1-Wire 使用空操作 stubs) - **`malloc` 被重定义为 `calloc`** —— STM32 堆启动时是清零的,而 ESP32 不是 - **加密** 被 stub 替换(没有 Flipper-Enclave 密钥)—— 影响加密的 SubGHz 密钥库;其他所有内容都使用真实的 mbedtls
标签:ESP32, Flipper Zero, 固件开发, 多模态安全, 客户端加密, 射频通信, 嵌入式系统, 物联网, 硬件移植