SmonSE/GhostBLE

GitHub: SmonSE/GhostBLE

一款运行在 M5Stack Cardputer 上的便携式 BLE 隐私扫描器,可发现附近蓝牙设备并深度分析其隐私暴露状况。

Stars: 0 | Forks: 0

# GhostBLE – BLE 隐私扫描器 GhostBLE 是一款专为 **M5Stack Cardputer** 构建的蓝牙低功耗 (BLE) 隐私扫描器。它能发现附近的 BLE 设备,分析其隐私状况,并标记潜在的安全隐患。非常适合对 BLE 隐私、设备指纹识别和无线侦察感兴趣的**安全研究人员、技术爱好者及教育工作者**使用。 内置显示屏上有一个名为 **Nibbles** 的可爱吉祥物,它会引导您完成扫描过程。 ## 功能特性 - **被动 BLE 扫描** – 发现附近的 BLE 设备,显示信号强度 (RSSI) 和估算距离 - **设备信息提取** – 获取本地名称、广播的服务 UUID 和制造商特定数据 - **隐私启发式检测** - **MAC 轮换检测** – 标记使用可解析私有地址 (RPA) 的设备 - **明文检测** – 标记泄露未加密标识符的设备 - **暴露分析** – 将设备按暴露等级(无、被动、主动、同意)分类,并给出隐私评分 - **GATT 连接尝试** – 可选连接设备并读取标准 BLE 服务(设备信息、电池、心率、温度、通用访问) - **已知设备检测** – 通过 UUID 识别 Flipper Zero、CatHack/Apple Juice 和 LightBlue 设备 - **制造商识别** – 解码 Apple、Google、Samsung、Epson 等制造商的数据 - **多通道日志记录** - 串口输出 (115200 波特率) - SD 卡文件日志 (`/device_info.txt`) - 通过 WiFi AP 和 WebSocket 实现的基于 Web 的实时日志 - **交互式 UI** – LCD 显示屏上的 Nibbles 吉祥物带有动态表情,会对扫描事件做出反应 ## 硬件要求 - **M5Stack Cardputer** (主要目标平台) - ESP32-S3,内置键盘、1.14 英寸 LCD 显示屏、扬声器和 USB-C - **必须配备 microSD 卡** – 如果没有插入 SD 卡,设备将在启动时停止运行 ## 依赖库 通过 Arduino IDE 库管理器或 PlatformIO 安装以下库: | 库名 | 用途 | |---------|---------| | **M5Cardputer** | M5Stack Cardputer 的硬件抽象层 | | **M5Unified** | 统一的 M5Stack API | | **NimBLE-Arduino** | BLE 协议栈 (扫描, GATT 客户端) | | **ESPAsyncWebServer** | 基于 Web 的日志查看器 | | **AsyncTCP** | Web 服务器的异步 TCP 传输 | | **SD** (内置) | SD 卡日志记录 | | **SPI** (内置) | SPI 通信 | ## 构建与烧录 ### Arduino IDE 1. 在 Arduino IDE (开发板管理器) 中安装 **M5Stack 开发板包** 2. 选择开发板:**M5Stack Cardputer** 3. 通过库管理器安装上述列出的库 4. 打开 `GhostBLE.ino` 5. 编译并上传 ### 预编译二进制文件 预编译的固件位于 `build/m5stack.esp32.m5stack_cardputer/` 目录中: - `GhostBLE.ino.merged.bin` – 完整固件镜像 (烧录至偏移量 0x0) - `GhostBLE.ino.bootloader.bin` – 引导加载程序 - `GhostBLE.ino.partitions.bin` – 分区表 - `GhostBLE.ino.bin` – 应用程序二进制文件 使用 esptool 烧录合并后的二进制文件: ``` esptool.py --chip esp32s3 --port /dev/ttyUSB0 write_flash 0x0 build/m5stack.esp32.m5stack_cardputer/GhostBLE.ino.merged.bin ``` ## 使用说明 ### 控制方式 | 输入 | 动作 | |-------|--------| | **长按 BtnA** (1秒) | 开启/关闭 BLE 扫描 | | **FN 键** | 开启/关闭 WiFi AP 和 Web 服务器 | ### 工作流程 1. **启动** – 插入 SD 卡并开机。Nibbles 会在显示屏上向您问好 2. **开始扫描** – 长按 BtnA 开始 BLE 扫描 3. **监控** – 观察显示屏上的设备计数,或连接到 Web 界面查看详细日志 4. **Web 界面** – 连接到 WiFi AP `ESP32-Log` (密码: `12345678`),然后在浏览器中打开 `192.168.4.1` 5. **查看日志** – 日志将保存到 SD 卡上的 `/device_info.txt` ### 显示屏 LCD 显示内容包括: - Nibbles 吉祥物及其随情境变化的表情(扫描时开心,连接失败时难过,激活时很酷) - 设备计数器:已连接目标、可疑设备、数据泄露设备 - WiFi 状态指示器 ## 隐私启发式规则 | 检查项 | 标记 | 含义 | |-------|------|---------| | **Rotating (轮换)** | Yes | 设备使用 MAC 地址随机化 (RPA) – 良好的隐私实践 | | **Cleartext (明文)** | Yes | 设备以明文广播个人信息 – 隐私风险 | ### MAC 地址轮换 - **轮换 (Rotating)**:设备使用定期更改的随机私有地址,防止被持续追踪 - **非轮换 (Not Rotating)**:设备使用静态或固定的 MAC 地址,可随时间被追踪 ### 明文数据 - **明文 (Cleartext)**:广播载荷包含未加密的可读数据(设备名称、服务、标识符) - **非明文 (Not Cleartext)**:广播数据已加密或混淆 ### 重要性 - **MAC 地址轮换**有助于防止设备被持续追踪,从而增强隐私 - **明文广播**可能泄露敏感信息和元数据,而**加密/混淆广播**则提高了安全性和用户隐私 ## 输出示例 ``` MAC: d3:c9:9d:fa:d9:9a | Rotating: Yes | Cleartext: Yes Trying to connect to address: d3:c9:9d:fa:d9:9a Attribute discovery failed: d3:c9:9d:fa:d9:9a Scan Summary: - Spotted: 4 - Sniffed: 2 - Suspicious: 0 ``` ## 项目结构 ``` GhostBLE/ ├── GhostBLE.ino # Main sketch (setup/loop, WiFi, controls) ├── build/ # Pre-compiled binaries └── src/ ├── analyzer/ # Exposure analysis & risk scoring ├── config/ # Hardware config, known device UUIDs ├── GATTServices/ # BLE service readers (battery, device info, etc.) ├── globals/ # Global state variables ├── helper/ # BLE decoder, manufacturer lookup, UI drawing ├── images/ # Embedded sprite assets for Nibbles mascot ├── logger/ # Unified logging (Serial, WebSocket, SD card) ├── models/ # Data structures (DeviceInfo) ├── privacyCheck/ # MAC type detection, cleartext analysis ├── scanner/ # Core BLE scanning and GATT operations ├── sdCard/ # SD card file logging └── target/ # Target device handling ``` ## 贡献 欢迎提交 PR 和建议!这是一个以学习为导向的 BLE 项目,我们非常感谢您的想法。 ## 许可证 MIT License
标签:BLE, ESP32-S3, GATT服务, M5Stack Cardputer, MAC地址轮换检测, RPA, SD卡记录, WebSocket, WiFi热点, 依赖分析, 信号强度RSSI, 制造商识别, 客户端加密, 嵌入式安全, 无线侦察, 物联网安全, 硬件黑客, 蓝牙低功耗, 设备指纹识别, 防御绕过, 隐私扫描器