当前位置: 首页 > article >正文

深入解析BLE空口报文抓取:从GAP广播到LESC安全通信全流程

1. BLE空口报文抓取基础想要分析BLE设备间的通信过程抓取空口报文是最直接有效的方法。这就像在两个人对话时用录音设备记录下他们的每一句话。不过BLE通信使用的是2.4GHz无线频段我们无法直接用耳朵听到这些对话需要借助专门的工具。传统有线网络抓包常用的Wireshark和tcpdump工具在BLE场景下需要配合专用硬件才能使用。原因在于有线网络依赖交换机/路由器转发数据包BLE设备直接通过无线电波通信没有中间转发设备广播报文相对容易抓取因为BLE设备会主动向周围所有设备发送广播数据。这就像一个人在广场上公开演讲任何人都能听到他的声音。而连接状态下的报文则像两个人在私密通话只有通信双方能听懂内容其他设备会自动忽略这些数据。2. 抓包工具与硬件准备2.1 常用抓包方案对比目前主流的BLE抓包方案主要有两种方案类型代表工具优点缺点适用场景低成本方案Wireshark Nordic nRF Sniffer成本低(约$20)、易获取功能相对基础日常开发调试专业方案Ellisys蓝牙分析仪功能强大、支持高级分析价格昂贵(约$20万)专业协议分析2.2 Nordic nRF Sniffer使用指南对于大多数开发者我推荐使用Nordic的nRF Sniffer方案。具体配置步骤如下硬件准备nRF52840 Dongle或nRF52 DK开发板一台安装好驱动程序的电脑烧录Sniffer固件# 使用nrfjprog烧录固件示例 nrfjprog --program sniffer_nrf52840dongle_nrf52840_7cc811f.hex --sectorerase nrfjprog --reset软件配置安装Wireshark(3.4.4或更高版本)安装nRF Sniffer插件选择正确的COM端口开始抓包基本过滤命令btle.advertising_address # 只显示广播包 btatt.opcode 0x12 # 过滤特定ATT操作码 btle.length 0 # 排除空数据包3. BLE通信全流程解析3.1 GAP广播与连接建立当BLE设备上电后首先会进入广播状态。通过Wireshark抓取的ADV_IND广播包通常包含这些关键信息广播地址设备的MAC地址Flags发现模式(如LE General Discoverable)Service UUIDs设备支持的服务类型厂商自定义数据如iBeacon信息连接建立过程由Central设备发起发送CONNECT_IND报文。这个报文中最重要的部分是连接参数connInterval(7.5ms-4s)决定通信频率connSlaveLatency(0-499)允许从设备跳过的连接事件connSupervisionTimeout(100ms-32s)连接超时时间3.2 链路层控制协议连接建立后设备会交换能力信息并协商通信参数。关键的控制过程包括功能交换(Feature Exchange)协商支持的PHY(1M/2M/Coded)确定是否支持数据长度扩展数据长度更新// 典型的数据长度更新请求 LL_LENGTH_REQ { MaxRxOctets 251, MaxRxTime 2120, MaxTxOctets 251, MaxTxTime 2120 }PHY更新1M PHY兼容性好速率低(1Mbps)2M PHY速率高(2Mbps)兼容性稍差3.3 GATT服务发现与数据交互GATT通信是BLE应用开发的核心主要流程包括MTU交换协商最大传输单元(默认23字节最大可达247字节)服务发现通过Primary Service Discovery查找服务使用Include Discovery查找包含的服务特征值操作读取(Read)获取当前值写入(Write)修改值通知(Notify)服务端主动推送数据典型的心率服务交互示例# 伪代码示例 hrm_service discover_service(0x180D) # 心率服务UUID hrm_char discover_characteristic(hrm_service, 0x2A37) # 心率测量特征 enable_notification(hrm_char) # 启用通知 def callback(value): print(f当前心率: {parse_heart_rate(value)}) set_notification_callback(hrm_char, callback)4. LESC安全通信解析4.1 配对流程与安全机制BLE 4.2引入的LE Secure Connections(LESC)采用ECDH密钥交换算法安全性显著提升。配对过程分为三个阶段配对特性交换协商IO能力(如是否支持输入PIN码)确定认证要求认证与加密交换公钥进行MITM保护(如Numeric Comparison)生成LTK(长期密钥)密钥分发分发IRK(身份解析密钥)分发CSRK(连接签名密钥)4.2 解密加密报文的方法由于LESC的安全特性常规抓包工具无法直接解密通信内容。需要通过以下方式之一实现解密Debug模式 修改设备固件使用预置的调试密钥对// Nordic SDK中的调试密钥设置 #define LESC_DEBUG_MODE 1 const uint8_t LESC_DEBUG_KEY[32] {0x3f,0x49,...,0xbd};私钥导入 专业分析仪支持导入设备私钥Passkey捕获 对于LE Legacy Pairing可以在Wireshark中输入配对码4.3 典型配对过程分析以Just Works配对为例的报文交互流程Pairing Request/Response协商配对方法(AuthReq)确定密钥分发需求Public Key Exchange交换P-256椭圆曲线公钥DHKey计算双方各自计算共享密钥加密启动Central-Peripheral: LL_ENC_REQ (Rand, EDIV, SKD, IV) Peripheral-Central: LL_ENC_RSP (Rand, EDIV, SKD, IV) Central-Peripheral: LL_START_ENC_REQ Peripheral-Central: LL_START_ENC_RSP5. 实战案例分析5.1 心率监测器通信解析通过nRF Sniffer抓取的心率服务完整交互过程广播阶段设备广播包含HRM服务UUID(0x180D)可能包含电池服务(0x180F)等附加服务连接建立后交换MTU(通常协商为默认23字节)发现所有Primary Service订阅心率测量特征通知(CCCD写入0x0001)数据传输心率数据格式(8位或16位)RR-Interval(用于计算心率变异性)5.2 安全配对问题排查当遇到配对失败时可以通过以下步骤分析检查Pairing Failed报文中的错误码确认双方支持的配对方法验证公钥交换是否成功检查加密参数(SKD, IV)是否正确同步常见错误码- 0x01: PASSKEY_ENTRY_FAILED - 0x02: OOB_NOT_AVAILABLE - 0x03: AUTH_REQ_CANNOT_BE_MET - 0x04: CONFIRM_VALUE_FAILED6. 高级技巧与注意事项6.1 优化抓包效果信道选择BLE使用37/38/39三个广播信道连接后会在37个数据信道间跳频时间同步对于时序敏感的分析需要校准嗅探器的时钟多设备协同使用多个嗅探器覆盖不同信道6.2 常见问题解决问题1抓不到连接建立后的报文检查是否在连接前就开始抓包确认嗅探器与目标设备距离足够近问题2无法解密加密报文确认设备是否使用LESC配对检查是否启用了Debug模式尝试捕获配对过程中的密钥交换信息问题3抓包数据不完整调整嗅探器位置减少干扰尝试降低PHY速率(从2M切换到1M)

相关文章:

深入解析BLE空口报文抓取:从GAP广播到LESC安全通信全流程

1. BLE空口报文抓取基础 想要分析BLE设备间的通信过程,抓取空口报文是最直接有效的方法。这就像在两个人对话时,用录音设备记录下他们的每一句话。不过BLE通信使用的是2.4GHz无线频段,我们无法直接用耳朵听到这些"对话"&#xff0c…...

零知识证明终极指南:Awesome ZKP项目快速入门教程

零知识证明终极指南:Awesome ZKP项目快速入门教程 【免费下载链接】awesome-zero-knowledge-proofs A curated list of awesome things related to learning Zero-Knowledge Proofs (ZKP). 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-zero-knowledge-p…...

YimMenu终极指南:5大核心功能打造安全的GTA5增强体验

YimMenu终极指南:5大核心功能打造安全的GTA5增强体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...

Open WebUI:重构人机交互的开源解决方案

Open WebUI:重构人机交互的开源解决方案 【免费下载链接】open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,设计用于完全离线操作,支持各种大型语言模型(LLM)运行器,包括Ollama和兼…...

Huey终极指南:为什么这个轻量级Python任务队列成为开发者的首选?

Huey终极指南:为什么这个轻量级Python任务队列成为开发者的首选? 【免费下载链接】huey a little task queue for python 项目地址: https://gitcode.com/gh_mirrors/hu/huey 在Python开发世界中,高效处理异步任务和定时任务是提升应用…...

163MusicLyrics全能工具:三步搞定音乐歌词高效解决方案

163MusicLyrics全能工具:三步搞定音乐歌词高效解决方案 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 163MusicLyrics是一款专注于音乐歌词获取与管理的开源…...

从TKMath到STL导出:一份OCCTProxy for .NET的模块化封装实战笔记

从TKMath到STL导出:OCCTProxy for .NET的模块化封装实战 在工业软件开发的深水区,几何内核的封装从来都不是简单的语法转换。当我们需要将OpenCASCADE这样的庞然大物引入.NET生态时,C/CLI就像一座精心设计的悬索桥,既要承受原生代…...

(三)谷歌浏览器结合Selenium IDE实现自动化脚本录制与Python导出

1. 为什么你需要Selenium IDE脚本录制工具 最近有个测试同事跟我吐槽,说他每天要花3小时重复点击同一个电商网站,就为了检查商品详情页的展示逻辑。我听完直接给他安利了Selenium IDE——这个藏在谷歌浏览器里的小工具,5分钟就能搞定他半天的…...

macOS效率革命:3个全局快捷键让Finder目录操作提速300%

macOS效率革命:3个全局快捷键让Finder目录操作提速300% 【免费下载链接】OpenInTerminal ✨ Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty. 项目地址: https://gitcode.com/gh_mirrors/op/OpenInTerminal…...

HarmonyOS开发入门:DevEco Studio工程目录结构详解与实战配置

HarmonyOS开发实战:深度解析DevEco Studio工程架构与高效配置策略 当你第一次在DevEco Studio中创建HarmonyOS项目时,是否曾被复杂的目录结构弄得一头雾水?作为华为全场景智能生态的核心开发工具,DevEco Studio采用了一套精心设计…...

Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践

Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践 【免费下载链接】windows Windows inside a Docker container. 项目地址: https://gitcode.com/GitHub_Trending/wi/windows 在当今云原生和容器化技术快速发展的背景下,如…...

别再为‘file must be a file‘报错头疼了!手把手教你用Apifox搞定Dify文件上传接口

深度解析Dify文件上传接口:从报错排查到Apifox高效调试实战 当你正在为Dify AI应用集成文件上传功能时,是否曾在Apifox中反复遭遇file must be a file的报错而束手无策?这种看似简单的接口调试背后,隐藏着文件传输机制、参数组合…...

STM32F103R6数码管时钟实战:从Proteus仿真到按键调校全流程(附源码)

STM32F103R6数码管时钟实战:从Proteus仿真到按键调校全流程(附源码) 在嵌入式系统开发中,数码管显示是最基础也最实用的输出方式之一。本文将带您从零开始,基于STM32F103R6微控制器,构建一个完整的六位数码…...

实战笔记:基于STM32F4的LWIP+FreeRTOS系统移植与网络任务创建

1. 为什么需要LWIPFreeRTOS组合 在嵌入式开发中,网络功能越来越成为标配需求。STM32F4系列凭借其出色的性能和丰富的外设资源,成为许多物联网设备的首选。但要让这个硬件平台真正发挥网络能力,我们需要解决两个核心问题:实时任务调…...

终极指南:如何快速实现CocoaHTTPServer自定义连接处理

终极指南:如何快速实现CocoaHTTPServer自定义连接处理 【免费下载链接】CocoaHTTPServer A small, lightweight, embeddable HTTP server for Mac OS X or iOS applications 项目地址: https://gitcode.com/gh_mirrors/co/CocoaHTTPServer CocoaHTTPServer是…...

IAR平台华大HC32F460工程搭建避坑指南:从零到调试成功的全流程解析

1. 从KEIL到IAR的转型背景 最近两年芯片市场的价格波动,让很多工程师不得不重新评估开发工具链的选择。我作为一个用了五年KEIL的老用户,最近也被迫开始学习IAR平台。原因很简单——当ST单片机价格涨到华大HC32F460的十倍时,任何成本敏感的项…...

构建智能体协作网络:从 MCP 资源连接到 A2A 通信的 Agentic AI 工程实践

1. 智能体协作网络的基础架构 想象一下,你正在指挥一支由不同专家组成的团队完成市场报告。数据分析师负责整理数据,文案专员负责撰写内容,而行政助理则负责最终分发。在AI领域,这样的分工协作正是通过MCP协议和A2A协议实现的。前…...

STM32红外遥控器设计与多协议控制实现

基于STM32的万能红外遥控器设计与实现1. 项目概述1.1 系统架构本设计采用STM32F103RCT6作为主控芯片,构建了一个多功能红外遥控系统。系统架构包含以下核心模块:主控模块:STM32F103RCT6微控制器人机交互模块:1.44寸LCD显示屏 4x4…...

图片压缩与懒加载的完美结合:提升网站性能的终极指南

图片压缩与懒加载的完美结合:提升网站性能的终极指南 【免费下载链接】compressorjs compressorjs: 是一个JavaScript图像压缩库,使用浏览器原生的canvas.toBlob API进行图像压缩。 项目地址: https://gitcode.com/gh_mirrors/co/compressorjs 在…...

pythondjango心理咨询vue

目录Python Django 心理咨询系统功能分析后端(Django)功能模块前端(Vue.js)功能模块技术实现关键点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作Python Django 心理…...

别再手动改MTL文件了!一个Python脚本搞定ENVI打开Landsat 8/9 L2影像的报错问题

用Python自动化修复Landsat L2影像的ENVI兼容性问题 遥感数据处理中,Landsat 8/9的L2级别影像在ENVI软件中打开时经常遇到兼容性问题。传统的手动修改MTL文件方法不仅效率低下,还容易出错。本文将介绍一个Python自动化解决方案,帮助您彻底摆脱…...

颠覆认知的5个Stagehand实战技巧:突破AI网页自动化瓶颈的进阶策略

颠覆认知的5个Stagehand实战技巧:突破AI网页自动化瓶颈的进阶策略 【免费下载链接】stagehand An AI web browsing framework focused on simplicity and extensibility. 项目地址: https://gitcode.com/GitHub_Trending/stag/stagehand 引言:从工…...

OpenClaw+GLM-4.7-Flash:自动化代码审查

OpenClawGLM-4.7-Flash:自动化代码审查 1. 为什么需要自动化代码审查 作为一个独立开发者,我经常面临一个尴尬局面:在深夜写完代码后直接提交,第二天醒来发现代码中存在明显的逻辑漏洞或风格问题。传统解决方案要么依赖昂贵的Sa…...

基于MATLAB RVC与Simulink的ABB-IRB-1200运动学建模及轨迹规划实战

1. ABB-IRB-1200机械臂与MATLAB RVC工具箱初探 第一次接触ABB-IRB-1200这款机械臂时,我就被它精巧的设计所吸引。这款机械臂有两种型号,工作范围分别是700mm和900mm,最大有效负载分别为7kg和5kg。别看它体积小,在狭小空间内作业时…...

163MusicLyrics:音乐数据智能解析引擎如何重构歌词获取体验

163MusicLyrics:音乐数据智能解析引擎如何重构歌词获取体验 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 深夜,一位音乐制作人正在为即将发布的…...

Gradio界面定制化:为DAMO-YOLO WebUI添加导出检测结果CSV功能

Gradio界面定制化:为DAMO-YOLO WebUI添加导出检测结果CSV功能 1. 项目背景与需求 如果你用过那个基于DAMO-YOLO的手机检测WebUI,可能会发现一个问题:检测结果只能看,不能存。 每次上传图片,系统会告诉你检测到了几个…...

PyTorch张量操作实战:从基础运算到高效数据处理

1. PyTorch张量基础:从零开始理解多维数组 第一次接触PyTorch张量时,我完全被这个看似复杂的概念搞懵了。直到有一天,我把张量想象成俄罗斯套娃,突然就豁然开朗了。最外层的套娃是最高维度,每打开一层就降一个维度&…...

ZERO-IG:零样本学习驱动的低光图像联合去噪与自适应增强技术解析

1. 零样本学习:低光图像处理的革命性突破 想象一下,你正在用手机拍摄夜景,但照片总是又暗又糊。传统解决方案要么需要大量训练数据,要么效果不尽如人意。而ZERO-IG技术的出现,彻底改变了这一局面。这项技术的核心在于零…...

C#的[StackTraceHidden]:从堆栈跟踪中隐藏方法

在C#开发中,堆栈跟踪是调试和排查问题的关键工具,但有时某些方法会干扰核心逻辑的追踪。为此,C#引入了StackTraceHidden特性,允许开发者从堆栈中隐藏特定方法,使调试信息更清晰。本文将深入探讨这一特性的应用场景、实…...

SpringBoot 拦截器(Interceptor)自定义实现登录鉴权

在 Web 项目中,登录鉴权是最核心的安全机制:接口必须校验用户是否登录、是否拥有权限,未登录则直接拦截,禁止访问。SpringBoot 提供的 HandlerInterceptor 拦截器,是实现登录校验、日志记录、接口限流最优雅的方案。本…...