lshaf/unigeek
GitHub: lshaf/unigeek
一款基于 ESP32 的手持多工具固件,集成网络与无线渗透、BadUSB 及游戏化交互功能。
Stars: 13 | Forks: 4
# UniGeek 固件
多工具固件,适用于基于 ESP32 的手持设备。使用 PlatformIO + Arduino 框架 + TFT_eSPI 构建。
## 支持的设备
| 设备 | 键盘 | 扬声器 | USB HID | SD 卡 | 关机 |
|------|------|--------|---------|-------|------|
| M5StickC Plus 1.1 | — | 蜂鸣器 | — | — | 是 |
| M5StickC Plus 2 | — | — | — | — | 是 |
| LilyGO T-Lora Pager | TCA8418 | I2S | 是 | 是 | 是 |
| M5Stack Cardputer | GPIO 矩阵 | I2S | 是 | 是 | — |
| M5Stack Cardputer ADV | TCA8418 | I2S + ES8311 | 是 | 是 | — |
| LilyGO T-Display 16MB | 2 个按钮 | — | — | — | — |
| DIY Smoochie | — | — | — | — | — |
## 功能特性
### WiFi
- **网络** — 连接到 WiFi 网络并访问网络工具
- **信息** — 查看连接详情(IP、网关、DNS、MAC、信号强度)
- **WiFi 二维码** — 生成已连接网络的二维码以分享凭据
- **世界时钟** — 通过 NTP 同步多时区的当前时间
- **IP 扫描器** — 扫描本地网络中的活跃设备
- **端口扫描器** — 扫描目标 IP 地址的开放端口
- **Web 文件管理器** — 通过浏览器在 WiFi 上管理设备文件([详情](knowledge/web-file-manager.md))
- **下载** — 直接从 GitHub 下载文件到设备存储
- **Web 文件管理器** — HTML/CSS/JS 浏览器界面进行文件管理(自动检查更新)
- **固件示例文件** — 门户模板(Google、Facebook、WiFi 登录)、DuckyScript 载荷(hello world、反向 shell、WiFi 密码抓取、rickroll、禁用 Defender)、二维码样本、DNS 欺骗配置、rockyou_mini 密码词表
- **红外文件** — 按类别浏览并下载红外遥控文件(电视、空调、风扇、投影仪等),从 [Flipper-IRDB](https://github.com/lshaf/Flipper-IRDB) 保存到 `/unigeek/ir/downloads/`
- **BadUSB 脚本** — 按操作系统和类别浏览并下载 DuckyScript 载荷,保存到 `/unigeek/keyboard/duckyscript/`
- **MITM 攻击** — DHCP 耗尽、Deauth 爆发、伪造 DHCP、DNS 欺骗、Web 文件管理器的中间人攻击([详情](knowledge/network-mitm.md))
- **CCTV 嗅探器** — 发现网络摄像头、识别品牌、测试凭据并流式传输实时视频([详情](knowledge/cctv-toolkit.md))
- **Wigle** — 上传 wardrive 日志、查看用户统计信息并管理 Wigle API 令牌([详情](knowledge/gps-wardriving.md))
- **接入点** — 创建自定义 WiFi 热点,可选 DNS 欺骗、认证门户、Web 文件管理器和 WiFi 二维码以便轻松分享([详情](knowledge/access-point.md))
- **邪恶双子** — 克隆目标 AP 的 SSID 并附带认证门户;可选 Deauth 和实时密码验证([详情](knowledge/evil-twin.md))
- **Karma 认证** — 检测附近的探测请求,并以虚假开放 AP 提供钓鱼门户来捕获凭据([详情](knowledge/karma-attack.md))
- **Karma EAPOL** — 检测附近的探测请求并通过配对的 Karma Support 设备部署伪造的 WPA2 AP;捕获 M1+M2 EAPOL 握手以供离线破解,捕获后自动推进([详情](knowledge/karma-attack.md))
- **Karma Support** — 第二设备的配套屏幕;通过 ESP-NOW 接收部署命令,并代表攻击设备托管伪造的 WPA2 AP([详情](knowledge/karma-attack.md))
- **WiFi 分析器** — 扫描并显示附近网络的信号强度和信道信息
- **数据包监控** — 按信道可视化 WiFi 流量
- **WiFi 信号干扰器** — 断开客户端与目标网络的连接
- **Deauther 检测器** — 监控附近的 Deauth 攻击
- **Beacon 泛洪** — 用虚假 SSID 淹没区域
- **CIW Zeroclick** — 广播带有注入载荷的 SSID,以测试附近设备如何处理不受信任的网络名称
- **ESPNOW 聊天** — 通过 ESP-NOW 进行点对点文本聊天(无需路由器)
- **EAPOL 捕获** — 捕获附近网络的 WPA2 握手并保存到存储;可配置发现驻留时间、攻击驻留时间、信道跳频和最大 Deauth 尝试次数([详情](knowledge/eapol.md))
- **EAPOL 暴力破解** — 从捕获的握手离线破解 WPA2 密码;支持文件夹导航以选择 PCAP 和词表;内置 110 个密码测试词表([详情](knowledge/eapol.md))
### 蓝牙
- **BLE 分析器** — 扫描附近的 BLE 设备,显示名称、地址和信号强度
- **BLE 信标泛洪** — 广播 iBeacon 广告包,随机化接近 UUID、major/minor 值并伪造 MAC 地址
- **BLE 设备泛洪** — 针对附近设备的目标 BLE 广告泛洪,触发配对/通知弹出
- **Android** — 使用公共 Fast Pair 设备注册表中的随机模型 ID 进行 Google Fast Pair 泛洪;触发“发现新设备”弹出
- **iOS** — Apple Continuity 泛洪,循环使用 SourApple(接近动作 `0x0F`)和 AppleJuice(AirPods 接近 `0x07` / 设置 `0x04`)载荷;触发 iPhone 和 iPad 的弹出通知
- **Samsung** — 使用 Samsung 制造商数据和随机手表模型 ID 进行 Samsung Galaxy Watch 配对弹出泛洪
- **BLE 检测器** — 被动 BLE 扫描器,可检测 Flipper Zero 设备、信用卡读卡器、Apple AirTags/FindMy 追踪器、BitChat 应用用户和 BLE 泛洪攻击([详情](knowledge/ble-detector.md))
- **WhisperPair** — 测试 Google Fast Pair 设备是否存在 CVE-2025-36911;执行 ECDH 密钥交换并伪造 KBP 握手以检测未经授权的配对漏洞([详情](knowledge/whisperpair.md))
### 键盘(HID)
- **BLE 键盘** — 作为无线蓝牙 HID 键盘(所有设备)
- **USB 键盘** — 作为有线 USB HID 键盘(仅 ESP32-S3 设备)
- **键盘中继** — 实时将物理按键直接转发到连接的宿主(仅键盘设备)
- **Ducky 脚本** — 从存储运行脚本文件以自动化按键([详情](knowledge/ducky-script.md))
### 工具
- **I2C 检测器** — 扫描 I2C 总线并列出所有响应设备地址
- **二维码** — 从输入或文件加载的文本生成并显示二维码;支持 WiFi 二维码格式
- **条形码** — 从输入或文件加载的文本生成并显示 Code 128 条形码
- **文件管理器** — 浏览、重命名、复制、剪切、粘贴和删除存储中的文件和文件夹;目录优先按字母排序;点击文件查看内容;长按 1 秒打开上下文菜单
- **成就系统** — 按领域查看所有成就;显示等级(青铜/白银/黄金/铂金)、描述和解锁状态;长按已解锁成就可将其设为你的代理头衔
### 游戏
- **HEX 解码器** — 使用十六进制字符(0–9、A–F)的 Wordle 风格游戏
- 猜测一个 4 位十六进制代码,次数尽可能少
- 颜色反馈:绿色 = 位置正确,橙色 = 位置错误,红色 = 不在代码中
- 4 个难度等级:简单(14 次尝试,3 分钟)、中等(7 次尝试,90 秒)、困难(无限次,3 分钟)、极限(无限次,90 秒)
- 按回合数和耗时排名前 5 高分
- 键盘设备直接输入;非键盘设备使用上/下键循环字符并使用 `<` 擦除选项
- **Flappy Bird** — 经典横向卷轴游戏随机管道和计分
- **Wordle** — 经典英文和印度尼西亚语单词猜测游戏
- 最多 10 次尝试猜测一个 5 字母单词
- 颜色反馈:绿色 = 位置正确,橙色 = 位置错误,红色 = 不在单词中
- 3 个难度等级:简单(10 次尝试,颜色 + 字母提示)、中等(7 次尝试,颜色)、困难(7 次尝试,无颜色)
- 在通用(精选)或完整词库之间选择
- 提供英文(EN)和印度尼西亚语(ID)版本
- 按回合数和耗时排名前 5 高分
- **Memory Sequence** — 类似 Simon Says 的记忆游戏;重复不断增长的指令序列
- 4 个难度等级:简单、中等、困难、极限
- 按难度记录高分;极限模式获胜可获得额外成就和新纪录
- 达到 5 次极限胜利可解锁极限大师成就
- **数字猜谜** — 经典的高/低数字猜测游戏
- 4 个难度等级:简单(1–99,无限制)、中等(1–999,无限制)、困难(1–9999,无限制)、极限(1–9999,10 次尝试)
- 按猜测次数和耗时排名前 5 高分
- 幸运猜测、存活极限和一次猜中可获得额外成就
### 模块
- **NFC (MFRC522)** — MIFARE Classic 卡读取器和密钥恢复工具([详情](knowledge/nfc-mifare.md))
- **扫描 UID** — 检测并显示卡 UID 和类型
- **认证** — 使用常见默认密钥测试所有扇区
- **已发现密钥** — 查看每个扇区恢复的所有密钥
- **转储内存** — 使用发现的密钥读取并显示卡的全部数据
- **字典攻击** — 从自定义字典文件尝试额外密钥
- **静态嵌套攻击** — 使用已知密钥恢复使用静态 nonce 的卡密钥
- **黑暗侧攻击** — 在未知密钥时恢复第一个密钥
- **GPS** — 支持 GPS 模块的定位功能,适用于所有开发板(通过外部 GPS,[详情](knowledge/gps-wardriving.md))
- **实时视图** — 实时显示卫星数量、坐标、海拔、速度和航向
- **扫描模式** — 选择 WiFi + BLE(默认)、仅 WiFi 或仅 BLE 用于定位
- **定位模式** — 驾驶(默认,主动 WiFi 扫描)或步行(被动混杂嗅探)
- **定位记录** — 以 Wigle CSV 格式记录附近的 WiFi 和 BLE 设备及其 GPS 坐标
- **Wigle 集成** — 连接 WiFi、上传定位记录、查看用户统计信息、管理 API 令牌
- **红外遥控** — 红外收发器,用于捕获、回放和管理红外信号([详情](knowledge/ir-remote.md))
- **TX/RX 引脚** — 可配置的 GPIO 引脚,用于红外发射器和接收器(按设备保存)
- **接收** — 捕获红外信号,自动检测协议(NEC、三星、索尼、RC5、RC6、Kaseikyo、Pioneer、RCA 等),去重过滤并显示信号详情
- **发送** — 从存储浏览并加载红外遥控文件(`/unigeek/ir/`),点击发送,长按执行操作(回放、重命名、删除),保存更改回文件
- **TV-B-Gone** — 从 WORLD_IR_CODES 数据库发送关机码(271 个),选择北美或欧洲地区,显示进度并支持取消
- 兼容 Flipper Zero 和 Bruce 红外文件格式 — 通过 **WiFi > 网络 > 下载 > 红外文件** 下载红外遥控
- **Sub-GHz (CC1101)** — Sub-GHz 射频信号捕获、回放和干扰,使用 CC1101 收发器([详情](knowledge/sub-ghz.md))
- **检测频率** — 在 ~40 个已知频率(300–928 MHz)范围内扫描频谱;实时柱状图显示每个信道的 RSSI,并高亮最强信号 — 不改变频率设置
- **频率** — 手动设置工作频率(预设:300、315、345、390、433.92、434、868、915 MHz;自定义 280–928 MHz)
- **接收** — 在配置频率上使用 RcSwitch 解码(普林斯顿/固定码)和 RAW 回退模式捕获射频信号;去重过滤;回放、保存或删除每次捕获
- **发送** — 从存储浏览并发送 `.sub` 信号文件(`/unigeek/rf/`),点击发送,长按执行操作(发送、重命名、删除)
- **干扰器** — 在配置频率上发射连续噪声以干扰 Sub-GHz 接收器
- 兼容 Flipper Zero 和 Bruce `.sub` 文件格式
- 在 M5StickC 上:CC1101 SPI(GPIO 32/33)与 GPS UART 共享 — 固件会自动管理切换
- **引脚设置** — 配置所有外部模块的 GPIO 引脚(GPS TX/RX/波特率、外部 I2C SDA/SCL、CC1101 CS/GDO0);也可在模块菜单和设置中访问
### 角色屏幕
全屏配置文件可从主菜单访问。显示:
- **代理** — 设备名称和当前等级(新手 → 黑客 → 专家 → 精英 → 传奇),基于总经验值
- **代理头衔** — 通过长按“成就”中解锁的成就设置的称号;显示为 `[等级] 标题`(例如 `[NOVICE] WiFi First`);默认为 `[等级] 无标题`
- **EXP** — 总经验值,带有通往下一等级的进度条
- **HP** — 电池百分比;充电时显示 `+CHG`
- **大脑** — 空闲堆内存占总堆内存的百分比
- **成就** — 已解锁成就总数(占所有可用成就)
- 各领域(WiFi、攻击、蓝牙、键盘、NFC、红外、射频、GPS)的进度条显示该领域完成度
### 设置
- 设备名称
- 自动关闭显示和显示关闭超时
- 自动关机和关机超时
- 亮度
- 音量(支持硬件音量控制的开发板)
- 导航声音开关
- 主题颜色
- Web 文件管理器密码
- 引脚配置(GPS TX/RX/波特率、外部 I2C SDA/SCL、CC1101 CS/GDO0)— 也可在模块菜单中访问
- 导航模式 — 默认或编码器(仅 M5StickC Plus)
## 构建
安装 [PlatformIO](https://platformio.org/),然后运行:
```
# Build
pio run -e m5stickcplus_11
pio run -e m5stickcplus_2
pio run -e t_lora_pager
pio run -e m5_cardputer
pio run -e m5_cardputer_adv
pio run -e t_display
pio run -e diy_smoochie
# Flash
pio run -e m5stickcplus_11 -t upload
pio run -e m5stickcplus_2 -t upload
pio run -e t_lora_pager -t upload
pio run -e m5_cardputer -t upload
pio run -e m5_cardputer_adv -t upload
pio run -e t_display -t upload
pio run -e diy_smoochie -t upload
# Serial monitor
pio device monitor
```
## 导航
导航方式因设备而异:
| 操作 | M5StickC(默认) | M5StickC(编码器) | Cardputer / T-Lora Pager |
|------|------------------|--------------------|--------------------------|
| 上 | AXP 按钮 | 逆时针旋转 | `;` 键 |
| 下 | BTN_B | 顺时针旋转 | `.` 键 |
| 选择 | BTN_A | 编码器按压 | `Enter` 键 |
| 返回 | — | BTN_A(短按) | `Backspace` 键 |
| 左 | — | AXP 按钮 | `,` 键 |
| 右 | — | BTN_B | `/` 键 |
在 M5StickC 上,长按 BTN_A 3 秒可将导航模式重置为默认。
## 存储
文件存储在 `/unigeek/` 目录下,介质可为 SD 卡或 LittleFS(备用):
```
/unigeek/config device configuration
/unigeek/keyboard/duckyscript/ Ducky Script files (.ds)
/unigeek/wifi/eapol/ WPA2 handshake captures (.pcap)
/unigeek/wifi/captives/ Captured credentials from Evil Twin / Karma / Rogue DNS
/unigeek/qrcode/ QR code content files
/unigeek/barcode/ Barcode content files
/unigeek/gps/wardriver/ Wardrive CSV log files (Wigle format)
/unigeek/wigle_token Wigle API token
/unigeek/utility/passwords/ Password wordlists for EAPOL brute force
/unigeek/utility/cctv/ CCTV Sniffer target IP lists
/unigeek/nfc/dictionaries/ MIFARE Classic key dictionary files
/unigeek/rf/ Sub-GHz signal files (.sub)
/unigeek/web/file_manager/ Web file manager HTML files
/unigeek/web/portals/ Portal templates for AP, Evil Twin, Karma (HTML/CSS/JS)
```
SD 卡可用时优先使用;LittleFS 始终作为备用存在。
示例文件可通过 **WiFi > 网络 > 下载 > 固件示例文件** 直接下载到设备(需要 WiFi 连接)。
## 项目结构
```
firmware/
├── boards/ board-specific hardware implementations
│ ├── m5stickplus_11/
│ ├── t_lora_pager/
│ ├── m5_cardputer/
│ └── m5_cardputer_adv/
└── src/
├── core/ interfaces and shared drivers (IStorage, ISpeaker, etc.)
├── screens/ all UI screens organized by category
│ ├── wifi/
│ ├── ble/
│ ├── keyboard/
│ ├── module/ NFC (MFRC522), GPS
│ ├── utility/
│ ├── game/
│ └── setting/
├── ui/ templates, components, and action overlays
└── utils/ keyboard HID, DuckyScript, nfc/ (attacks, crypto), gps/ (GPSModule, WigleUtil)
```
## 待办事项
- LoRa
- nr24lf
- 实现热成像相机
- 将键盘切换为 HID 模式,模式将分为 USB 和 BLE,而 BLE 和 USB 仅支持键盘、鼠标和模拟鼠标,USB 额外增加一个选项:大容量存储。
标签:Arduino, BadUSB, DuckyScript, ESP32, IP扫描, LilyGO, M5Stack, M5StickC, NTP时钟, PlatformIO, SD卡, SEO, TFT_eSPI, UML, USB HID, Web文件管理, WiFi二维码, WiFi工具, 云存储安全, 关键词优化, 固件, 固件样本, 多设备支持, 威胁情报, 开发者工具, 开源固件, 手持设备, 数据统计, 电源控制, 端口扫描, 红外文件, 网络扫描