论坛首页 安全工具分享区 阅读主题

BLE 蓝牙协议:抓包实战 (HCI + 空口)

401 浏览 0 回复
#1 楼主 2026-06-01 21:09:04
在对智能 IoT 设备进行安全测试时,比如汽车的无钥匙进入系统、智能手环、智能门锁等等设备核心通信交互都使用了 BLE(低功耗蓝牙)技术。因此,进行 BLE 流量抓取与分析,是破解 IoT 设备的第一步。蓝牙的来历“蓝牙”(Bluetooth)一词取自一千多年前丹麦国王哈拉尔的名字Harald Bluetooth。传说这位国王特别喜欢吃蓝莓,吃到牙齿都变成蓝色了,因而当时的欧洲人民称这位国王的牙齿为蓝牙。1998年爱立信联合5家厂商联合宣布一种短距离无线通信新技术。由于是这几家大公司一起合作制定的技术,与哈拉尔统一挪威与丹麦的经历类似,所以这项新技术便以“蓝牙”命名。蓝牙和BLE 蓝牙通常是指在两个电子设备之间无线传输数据的技术。随着物联网的发展,经典蓝牙太“重”,它在小型终端设备中的实施将占用更多的电量和系统资源。因此,蓝牙4.0标准引入了低功耗蓝牙(Bluetooth Low Energy,BLE),这个蓝牙技术是专门针对系统资源、电量有限的智能设备的。BLE具有极其省电,连接速度快的特点,在日常生活里汽车的无钥匙进入、智能手表、智能灯泡、智能门锁、体脂秤、Apple AirTag等等很多很多都是使用BLE进行通信的。蓝牙的协议栈BLE协议架构总体上分成3块,从下到上分别是控制器(Controller)、主机(Host)和应用(Application),三者既可以在同一芯片内实现,也可以分不同芯片内实现。控制器(Controller): 通常在底层蓝牙射频芯片内实现,主要包含物理层(PHY)和链路层(LL)。它与硬件强相关,负责最底层的 2.4GHz 无线电波收发、跳频机制以及维持物理层面的连接。主机(Host): 通常运行在设备的主 CPU 中(如手机的安卓系统内)。它包含了 L2CAP、SMP、GAP、GATT 等核心协议栈,负责上层数据的拆包组装、设备发现策略、以及配对加密体系的管理。应用层(Application): 运行在最顶层,调用 Host 提供的接口来实现真正的业务逻辑(比如决定什么时候发送“开锁”指令,或者解析收到的“心率”数据)。本文主要是介绍抓包,大家可以阅读书籍或者查阅资料去了解学习这个协议栈架构,或且听下回分解。如何抓包?我们使用智能设备的时候,通常都是使用手机去对设备进行控制,比如汽车解锁,手环的查找。在手机里,蓝牙功能其实是由两个完全独立的部门合作完成的。应用层Host(主机 / 手机CPU)APP 发送一条指令,主 CPU 会生成这段最原始的明文数据。HostController(控制器 / 蓝牙底层芯片)主CPU把数据再交给蓝牙芯片,蓝牙芯片将指令打包、加密、调频,然后通过天线转换成 2.4GHz 的无线电磁波发射出去。那么既然数据经过了主机到控制器(HCI层),控制器和另外一个设备之间又通过无线电磁波发射出去(空口)。那么这个时候我们对其过程中的HCI层和空口进行抓包,两者互相进行补充,就可以抓取到完整的BLE通信数据了。进行安卓 HCI 抓包,抓的是CPU和蓝牙芯片之间的通讯,是为了绕过底层的硬件加密,直接拿到 App 层面最干净、最原始的“明文应用数据”,但是无法获取到物理层和链路层的的数据包。进行空口抓包,获取到物理层和链路层的的数据包,完全不接触交互双方设备,通过空中抓包获取原始的信号数据,因此包含了所有的信息。Android手机HCI层抓包通过Android原生自带的hcidump功能抓低功耗蓝牙,由于比较简单,这里就直接一笔带过了,具体遇到问题的可以去查阅资料。开启Android开发者模式打开“关于手机”,点击版本号,一直点到提示“开发者模式”抓包用测试机(已root),“开发者选项”中,找到并开启 “启用蓝牙 HCI 信息收集日志”非常重要: 开启该选项后,必须关闭并重新打开一次手机蓝牙,日志才会开始记录。App进行操作,操作完成后数据包会写入/data/misc/bluetooth/logs目录中adb shell
su
cd /data/misc/bluetooth/logs
ls
cp btsnoop_hci_xxx /sdcard/

adb pull /sdcard/btsnoop_hci_xxx .导出后,拖入wireshark就可以进行BLE通信的分析了。Tips:在有些案例里,可以到看到日志路径是这个 /sdcard/btsnoop_hci.log,我抓包就比较疑惑,问了AI才知道,/sdcard/btsnoop_hci.log是较老的安卓系统(Android 7 及以前)的路径,/data/misc/bluetooth/logs/btsnoop_hci.log是较新的安卓系统(Android 8 及以后,一直到现在的 Android 14/15),这是 Google 官方现在的标准存放路径。空口抓包第一次听到“空口”这个词,什么意思呢?顾名思义就是空气接口。“空口抓包”(Over-The-Air, OTA Sniffing)抓的是真正在空气中传播的 2.4GHz 射频物理波。空口蓝牙抓包的方案有多种,我使用的方案是nRF Sniffer+wireshark(一些方案可以参考:64cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2&6N6i4q4#2k6g2)9J5k6h3y4G2L8g2)9J5c8X3S2^5k6Y4q4Y4z5g2)9J5c8X3W2G2N6q4)9J5c8X3E0J5x3o6S2@1M7r3u0C8x3X3y4C8M7Y4V1^5k6i4Z5`.   yichen师傅的文章)设备为什么空口抓包需要用设备?低功耗蓝牙使用短波特高频无线电波,经由2.4~2.485GHz的ISM频段来进行通信。蓝牙有两种通信信道——广播信道和数据信道。在数据传输时,设备间会使用跳频算法在数据信道间跳频。如果想要捕获到数据信道中的数据,则需使用专业蓝牙设备进行跳频追踪。我自己使用的设备是E104-BT5040UA,成本是45RMB,产品链接是640K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2j5Y4W2@1k6g2)9J5k6h3y4G2L8g2)9J5c8Y4m8J5L8$3c8#2j5%4c8Q4x3V1j5I4x3U0l9$3i4K6u0W2K9s2c8E0L8l9`.`.芯片是采用的nRF52840,抓包固件默认为nrfsniffer3.0版本,可以在手册里看到57aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2j5Y4W2@1k6g2)9J5k6h3y4G2L8g2)9J5c8X3c8G2N6$3&6H3k6r3k6Q4x3V1j5I4x3U0l9$3i4K6u0W2K9s2c8E0L8l9`.`.
抓包环境配置抓包环境直接按照文档一步步来即可,很简单。acdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2j5Y4W2@1k6g2)9J5k6h

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290292.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号