适用于蓝牙经典的简单“监控模式”。在 ESP32 蓝牙连接中嗅探或注入 BR/EDR 基带数据包。
这是一个逆向工程的 主动 BR/EDR 嗅探器,以及 ESP32 补丁框架,可用于探索 ESP32 控制器与远程目标之间的蓝牙 (BT) BR/EDR 交互。
与 被动 嗅探器不同,被动嗅探器不与 BT 网络(微微网)交互,而 主动 嗅探器会连接到远程 BT 设备(BR/EDR 目标),并允许在 BT 主机协议栈(如 blue-kitchen)的指导下,对 BT 协议进行直至基带层的测试。BrakTooth 嗅探器支持廉价的开发板,例如 ESP32-DOIT(4 美元)或 ESP32-DevKitC(10 美元)。
git clone https://github.com/Matheus-Garbelini/esp32_bluetooth_classic_sniffer
cd esp32_bluetooth_classic_sniffer
./requirements.sh # (sudo required) Installs latest wireshark and standalone python3 runtime
./build.sh # Build BT Host programs and Wireshark h4bcm dissector
在开始使用 BrakTooth 嗅探器之前,你需要将自定义固件上传到你的 ESP32 开发板:
sudo chown $USER:$USER /dev/ttyUSB0 # Give user permission to serial port to avoid using sudo
./firmware.py flash /dev/ttyUSB0 # Change ttyUSB0 to match your port name
# Note: ESP-WROVER-KIT or ESP-ETHERNET-KIT uses /dev/ttyUSB1 instead as the first port is for the FTDI JTAG circuit.
重要提示:某些开发板需要按住 BOOT 按钮才能让 ESP32 正确进入烧录模式。
Usage: BTSnifferBREDR.py [OPTIONS]
Options:
--port TEXT Serial port name (/dev/ttyUSBx for Linux)
--host TEXT BDAddress of local host (default: E0:D4:E8:19:C7:68)
--target TEXT BDAddress of remote target (ex: a8:96:75:25:c2:ac)
--live-wireshark Opens Wireshark live session
--live-terminal Show a summary of each packet on terminal
--bridge-only Starts the HCI bridge without connecting any BT Host stack
--help Show this message and exit.
你可以以主角色或从角色启动嗅探器。如果使用 --target 参数,嗅探器将尝试连接你的远程目标。否则,它只会等待其他设备连接上来。
最后,--bridge-only 仅创建 HCI 伪终端(/dev/pts/x),使 ESP32 可以作为一个标准的 HCI BT 控制器运行。你可以使用此功能将任何其他 BT 主机协议栈连接到 ESP32。
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --target=E0:D4:E8:19:C7:69 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --bridge-only --live-terminal --live-wireshark
源代码可以直接从 ESP32 固件补丁框架 仓库构建,如下所示:
cd firmware
./build_from_source.sh # clone submodule & build firmware with platformio environment 'sniffer-serial'
./firmware.py flash <serial port> # flash built firmware to ESP32 via serial port
构建成功后,ESP32 固件二进制文件(firmware.bin、bootloader.bin、partitions.bin)会被复制到 firmware 文件夹。然后,你可以按照步骤 1.B) 中所述继续烧录固件。
由于 BrakTooth 嗅探器使用 BT 主机协议栈来引导连接,因此使用了以下修改过的 BlueKitchen 示例:
你可以按照 BlueKitchen 的官方文档修改或添加 BT Profile 到当前程序中。请注意,host_stack/bluekitchen/example/ 文件夹已经包含了一些 Profile 示例。
自定义的 ESP32 BR/EDR 嗅探器/注入器固件通过 USB 串口与主机系统通信,并等待接收自定义命令或 HCI 命令。启动时,会创建一个 HCI 桥,将 BrakTooth 自定义协议与 ESP32 发送或接收的标准 HCI 命令分离。一旦在 ESP32 固件上启用“RX/TX Sniffer”功能,基带数据包会直接转发给 BTSnifferBREDR.py 脚本,该脚本通过自定义协议对嗅探到的数据包进行解码,并通过 Scapy 打印,和/或通过实时捕获转储到 Wireshark 以及 logs 文件夹。
基带数据包的解析扩展了 InternalBlue Broadcom Wireshark 解析器。具体来说,该解析扩展了 h4bcm Wireshark 插件,以支持更多 BT 层以及我们自定义的 ESP32 元数据头。感谢 @jiska2342。
感谢以下所有开源项目: