结合蓝牙空口抓包分析进行BLE协议学习
字数 2298
更新时间 2026-01-31 12:07:33
BLE协议与空口抓包分析教学文档
一、实验硬件环境搭建
1.1 核心硬件设备
- ESP32:作为从机设备,运行BLE外设固件
- nRF52840:作为蓝牙抓包器,支持空口数据捕获
- CC2540:TI的经典BLE芯片,可用于Packet Sniffer方案
- 手机端:使用nRF Connect应用作为主机设备
1.2 软件与资源
- GitHub仓库:https://github.com/Func0rn/Hello_BLE
- 提供ESP32固件与示例数据包
- Wireshark配合nRF Sniffer进行数据包分析
二、BLE协议栈层次结构
2.1 物理层(PHY)
- 工作频段:2.4GHz ISM频段(2400-2483.5MHz)
- 信道划分:40个物理信道,间隔2MHz
- 广播信道:37、38、39三个固定的广播信道
- 数据信道:0-36共37个数据信道用于连接后的数据传输
2.2 链路层(LL)
2.2.1 关键字段解析
- Access Address(接入地址)
- 广播包固定值:0x8E89BED6
- 连接包动态生成:连接建立时随机生成
- PDU Type(协议数据单元类型)
- ADV_NON_CONN_IND:不可连接广播(用于信标设备)
- ADV_IND:通用可连接广播
- ADV_SCAN_REQ:扫描请求(由接收端发起)
- ADV_CONNECT_REQ:连接请求
2.2.2 校验机制
- CRC校验:循环冗余校验,确保数据完整性
- FCS/FCE:帧校验序列/帧校验错误,直接取决于CRC结果
2.3 通用访问规范层(GAP)
2.3.1 设备标识
- AdvA:广播设备地址
- 公开地址或随机地址
- 由GAP层配置决定地址类型
- InitA:发起设备地址(连接请求中的主机MAC)
2.3.2 广播数据
- AdvData:广播数据载荷
- 包含设备名称、厂商ID、Flags等
- 遵循GAP规定的AD Type格式
- ScanRspData:扫描响应数据
三、抓包操作与数据分析
3.1 抓包环境配置
3.1.1 信道监听策略
- 三频选择限制:只能选择37、38、39中的一个广播信道监听
- 无法跳频捕获所有广播包,需固定在一个信道
3.1.2 信号质量指标
- RSSI(接收信号强度指示)
- 单位:dBm(分贝毫瓦)
- 典型值范围:-40dBm(设备很近)到-90dBm(设备较远)
3.2 连接建立过程分析
3.2.1 广播阶段
- 设备发现:从机发送ADV_IND广播包
- 扫描请求:主机发送ADV_SCAN_REQ获取更多信息
- 扫描响应:从机回复ScanRspData
3.2.2 连接建立
- ADV_CONNECT_REQ:在广播信道上发送连接请求
- 信道切换:连接建立后从广播信道切换到数据信道
- 跳频同步:主从设备根据跳频算法同步切换信道
3.3 连接后数据通信
3.3.1 数据包头解析
- Direction:数据传输方向
- M:主机到从机
- S:从机到主机
- LLID:链路层标识符
- 取值1、2、3分别界定不同数据类型
3.3.2 协议交互模式
- LL-OPCODE:链路层操作码
- 0x08:功能查询请求
- 0x0C:版本信息响应
- 并行握手机制:主从设备可同时发起请求,提高效率
四、跳频机制深入分析
4.1 信道选择算法
4.1.1 CSA #1算法
- 传统算法:\(f_{n+1} = (f_n + Hop) \mod 37\)
- 适用于BLE 4.0-4.1版本
4.1.2 CSA #2算法
- 增强算法:BLE 4.2+版本支持
- ChSel字段:在CONNECT_IND的LL Data中指定
- 位分配:
- Bit 0-4:Hop Increment(5位)
- Bit 5:ChSel(1位)
- Bit 6-7:保留位
4.2 实际跳频观察
- 信道映射(ChM):连接时评估信道质量,避开干扰信道
- 自适应跳频:根据无线环境动态选择最佳信道
- 版本兼容:高版本主机与低版本从机连接时的算法协商
五、加密通信抓包分析
5.1 nRF Sniffer环境搭建
5.1.1 硬件配置
- nRF52840抓包器模式切换
- 强制重启功能用于异常恢复
- 串口监听配对码交换过程
5.1.2 软件配置
- Wireshark插件安装
- nRF Sniffer驱动配置
- 解密密钥配置流程
5.2 加密通信流程
- 配对过程:手机端输入配对码
- 密钥交换:LTK(长期密钥)生成与交换
- 加密启动:使用AES-CCM算法加密数据
- 数据解密:Wireshark使用配对码解密捕获的数据
六、L2CAP与ATT协议分析
6.1 逻辑链路控制与适配协议(L2CAP)
- 信道复用:在单个链路上支持多个逻辑信道
- 数据分段与重组:处理大于27字节的应用数据
6.2 属性协议(ATT)
- 属性句柄:0x002A读取到的"Hello World"数据
- 读写操作:典型的ATT数据交换模式
- 订阅机制:稳定的数据推送机制
七、实践注意事项
7.1 常见问题排查
- 版本兼容性:蓝牙4.2与5.x版本的功能差异
- 信道干扰:2.4GHz频段的Wi-Fi同频干扰
- 数据完整性:CRC校验失败的数据包分析
7.2 分析技巧
- 时间线分析:观察连接事件的时序关系
- 协议版本识别:通过LL-OPCODE判断设备能力
- 异常检测:数据长度异常、协议违规等特殊情况处理
本教学文档基于实际的BLE空口抓包分析,涵盖了从硬件配置到协议分析的完整流程,重点突出了实际操作中的关键技术和常见问题的解决方案。