Wireshark 中蓝牙协议分析简介

蓝牙是一种短距离无线通信协议,采用分层架构。Wireshark 支持从 HCI(Host Controller Interface)层以上的蓝牙数据分析。

蓝牙协议栈核心层级如下(自下而上):

层级协议名功能说明
HCIHCI控制器与主机之间的通信
L2CAPL2CAP多路复用、数据分段重组等
ATT/GATTATT/GATTBLE 属性通信层/服务发现层
RFCOMMRFCOMM串口仿真,常用于数据通信
OBEXOBEX文件传输协议,如 ZIP/图像等传输
SDPSDP服务发现协议,标识远端支持服务

蓝牙协议格式与字段含义

HCI(Host Controller Interface)

用于主机(如 PC)与蓝牙芯片之间通信。

  • 字段举例:
    • Event Code:标识是哪种类型的事件(如连接、断开等)
    • Parameter Total Length:后续数据长度
    • Subevent Code:用于 BLE 中的特定事件类型
    • Bluetooth Device Address:蓝牙 MAC 地址

Wireshark 过滤器示例:bthci_evt


L2CAP(Logical Link Control and Adaptation Protocol)

处理数据分段、重组,提供上层协议的传输通道。

  • 字段举例:
    • Length:有效负载长度
    • Channel ID (CID):标识所承载协议类型(如 ATT、RFCOMM)
      • 0x0004:ATT
      • 0x0003:RFCOMM
    • Payload:实际数据内容

过滤器:btl2cap


RFCOMM(Radio Frequency Communication)

串口仿真协议,类似于串口数据传输,常用于简单数据通信或 OBEX 文件传输。

  • 字段举例:
    • Address:信道标识(DLCI)
    • Control:帧类型(如 UIH,数据帧)
    • Length:负载长度
    • Information:用户数据内容(例如 OBEX、ZIP)

过滤器:rfcomm


OBEX(Object Exchange)

在蓝牙中用于文件发送(如 ZIP、图像、联系人等),使用在 RFCOMM 之上。

  • 字段举例:
    • Opcode:操作类型(如 Connect、Put、Get)
    • Headers:文件信息(如名称、长度、类型)
    • Body / End-of-Body:包含实际文件二进制数据

过滤器:btobex

蓝牙协议的常见差异

如上图所示,使用蓝牙协议的数据包在数据链路层上可能使用的是蓝牙协议封装,也可能使用的是USB协议封装。

核心差异原因

物理接口类型不同

  • USB传输:前一个案例(EnergyBluetooth.pcapng)使用的是USB蓝牙适配器,蓝牙控制器通过USB接口与主机通信
  • H4(UART)传输:当前案例(YWBbluetooth.pcapng)使用的是UART(串口)连接的蓝牙模块,通过H4协议传输

HCI传输协议不同

  • HCI over USB:需要USB协议封装
  • HCI over UART(H4):直接在串口上传输,不需要USB封装

详细技术对比

特性USB传输(前例)H4/UART传输(本例)
物理接口USB接口UART串口
数据链路层协议USB协议蓝牙HCI H4协议
典型应用场景PC蓝牙适配器嵌入式系统、开发板
协议栈层级Frame → USB → BluetoothFrame → Bluetooth HCI H4
传输效率较高(USB带宽大)较低(受串口波特率限制)
常见硬件USB蓝牙dongle树莓派、手机基带芯片等

当前案例特点

H4协议主导

  • 所有流量都通过”Bluetooth HCI H4″传输(100%)
  • H4是专为UART设计的简单传输协议,比USB更轻量级

流量分布

  • 主要流量是ACL数据包(96.2%),携带L2CAP和RFCOMM数据
  • RFCOMM协议占比很高(32.6%-33.7%),可能用于串口仿真通信
  • 包含少量蓝牙Mesh流量(0.0%),可能是设备发现或配置

性能特征

  • 总吞吐量较高(1161kbps)
  • 大部分带宽用于数据传输(非控制命令)

为什么会出现这种差异?

硬件设计选择

  • 嵌入式设备通常选择UART接口节省成本
  • PC外设通常选择USB接口便于热插拔

协议栈实现

  • Linux系统常见H4/UART实现
  • Windows/Mac更常见USB实现

使用场景

  • 本例可能是嵌入式蓝牙网关或工业设备
  • 前例更可能是普通PC外设

这种差异展示了蓝牙协议栈在不同硬件平台上的灵活适配能力,核心协议(L2CAP/RFCOMM等)保持一致,仅底层传输层根据硬件接口变化。

例题

第八届御网杯信息安全大赛–bluetooth

发现全都是蓝牙流量

此协议分级字段含义如下:

协议层级结构

Frame

  • 捕获的最底层,以太网或USB帧。
  • 总体数据传输的统计基础。

Bluetooth

  • 蓝牙协议的总览层。

Bluetooth HCI H4

  • 主机控制器接口(HCI)的H4传输层,用于主机和蓝牙控制器之间的通信。

Bluetooth HCI Event / Command / ACL Packet

  • Event:控制器到主机的事件通知(如设备连接成功)。
  • Command:主机到控制器的命令。
  • ACL Packet:异步连接导向逻辑链路,用于传输数据(如L2CAP协议数据)。

Bluetooth L2CAP Protocol

  • 逻辑链路控制与适配协议,是ACL数据的载体,负责多路复用和分段重组。

Bluetooth SDP Protocol

  • 服务发现协议,用于发现设备上提供的服务。

Bluetooth RFCOMM Protocol

  • 蓝牙串口仿真协议,仿真串口通信,常用于数据交换。

Data

  • 应用层的最终数据部分。

首先分析数据部分

直接搜索字符串发现存在一个flag.txt在压缩包内

尝试将该zip提取出来

使用foremost工具将其提取出来是一个encode.exe来混淆压缩包

使用010Editor将PK上方的数据全部删除

最后得到flag压缩包

flag.txt内容

10004583275926070044326083910251708233320797779355779208703097816305188140191914132269450797

key无法正常读取,尝试对压缩包进行修复

得到key

5216294695211820293806247029887026154798297270637676463374801674229881314620340407569315152

2025年能源网络安全大赛–Bluetooth

大致看一下流量包整体协议层级

由图可知

截取的数据包全是蓝牙协议

其中L2CAP是协议中传输的数据部分

提取出L2CAP的Payload

tshark -r Bluetooth.pcapng -T fields -e btl2cap.payload -Y btl2cap.payload > output.txt

将其重定向到output.txt

观察导出的数据

发现只有倒数第三位有变化,且只出现五个数据01248

使用四进制解密

Exp

# 打开 output.txt 文件并处理
with open("output.txt") as file:
   CHAR_TRANSLATION = {
       '0': ' ',
       '1': '0',
       '2': '1',
       '4': '2',
       '8': '3'
  }
   # 读取每一行,取倒数第3个字符,翻译后拼接成字符串
   encoded = ''.join(
       CHAR_TRANSLATION.get(line.strip()[-3], '')
       for line in file
  )

# 以空格分割,取每段的第一个字符,拼接成 flag_code
flag_code = ''.join(
   segment[0]
   for segment in encoded.split(' ')
   if segment
)

# 每4个字符作为一个 base-4 数字,转成 ASCII 字符
result = ''.join(
   chr(int(flag_code[i:i+4], 4))
   for i in range(0, len(flag_code), 4)
)

# 输出最终结果
print(result)

得到flag

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注