之前一致在做一些有关与BLE安全研究的“基础设施建设”工作,我们知道,在BLE进入跳频之后,所有的固定标志都会消失,但是是不是意味着没办法了?不是的。我会提出一些恢复出来的方法。

首先,前导码分析,BLE包的前导码是10101010或者01010101,且与Access Address的LSB有关,所以,按照协议,BLE包的前九位是101010101或者010101010,我们可以通过这个,对整个的数据进行一次初筛。但是这个初筛还远远不够,因为仅仅9位特征,在每秒1M的速率下很容易就会产生一个假的数据包,我们还需要更多的校验。

RFU表示的是为未来的协议进行预留,在协议4.0中,RFU是这样的

协议中规定,RUF应该为0

 这样的话,我们的特征比较位就多了6位,过滤掉的无效包的数量是成几何状增长的。这里需要注意的是,真正的蓝牙芯片是不会进行这个筛选的,也就是如果发送方的芯片不按套路出牌,接收方也是可能准确的收到包的,由于蓝牙芯片的底层不开放,我也不清楚具体的实现,还有,这只是针对蓝牙4.0,如果之后的协议有更改,要具体分析。

Access address也是可以作为一个检验的条件的,如果上上述条件(前导码和RFU)满足的情况下,去截取Access Address,收到了两个一样的,那就基本可以确定这个就是一个正在使用中的Access Address,继而确定数据包。

恐怕最令人信服的确定方法,就是CRC校验了,因为它本身就是做这个的,可是在data channel里的CRC计算好像并不那么容易,CRC的三个要素是生成多项式,输入值和CRC初值,可是CRC初值是在双方的CONNECT_REQ包中随机由主机确定的,正如上文所说,data channel中没有固定的成分,所以我们要恢复出CRC的初值,这对未来包的确定,甚至伪造发包都十分有用。

CRC初值的计算我用了一个比较有意思的方法———“解方程”,或者叫,约束性求解。我使用了SMT-lib语言进行了一个bit输入下的逆操作,求解引擎输出值显示BLE的CRC24算法生成多项式是可逆的,并输出了一组特解。我并不清楚这个特解是否为唯一解。

后来有仔细看了看bit序列,感觉用约束性求解有点麻烦了,在已知输入输出和生成多项式的条件下,直接使用LFSR就行了,也就是生成CRC的LFSR的逆运算。

BLE直接Data channel抓包方法汇总的更多相关文章

  1. Android抓包方法(二)之Tcpdump命令+Wireshark

    Android抓包方法(二) 之Tcpdump命令+Wireshark 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等.学会抓包分 ...

  2. ADB工具和手机抓包方法介绍

    Android抓包方法 工具包内容如下:(下载地址:http://download.csdn.net/download/yezhaohui2011/8368061) adb ——谷歌提供的安卓远程调试 ...

  3. Android 下使用tcpdump网络抓包方法

    Android 下使用tcpdump网络抓包方法 抓包需要tcpdump以及Root权限,tcpdump在本文后有下载. 首先把tcpdump传进手机,用adb命令(放SD卡有时会有问题,我一次可以用 ...

  4. 【转载】linux下的usb抓包方法

    1 linux下的usb抓包方法 1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

  5. linux下的usb抓包方法

    1 linux下的usb抓包方法1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

  6. 【burp】配置HTTPS抓包方法

    以Chrome为例,配置HTTPS抓包方法 1.获取破解版的burp,将BurpLoader.jar和burpsuite_pro_v1.5.18.jar放到一个路径下 2.在cmd里进入上述两个jar ...

  7. Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等 ...

  8. Android抓包方法(一)之Fiddler代理

    Android抓包方法(一) 之Fiddler代理 前言: 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等. 不管是之前做HTML5手机 ...

  9. Android抓包方法(转)

    Android抓包方法(转) 作者:Findyou 地址:http://www.cnblogs.com/findyou/p/3491014.html 前言: 做前端测试,基本要求会抓包,会分析请求数据 ...

随机推荐

  1. Python3(十二) Pythonic与Python杂记

    一.用字典映射代替switch case语句 if/else可以代替switch但是非常不合适. 用字典代替switch: day = 5 switcher = { 0:'Sunday', 1:'Mo ...

  2. 20200105--python学习数据类型总结

    总结 python中的数据类型:整型/布尔类型/字符串/元组/列表/字典/集合 注意:列表,字典,集合都不能作为字典中的key,也不能作为集合中的元素 数据类型: (1)整型 (2)布尔类型:只有两个 ...

  3. .NET Core之单元测试(三):Mock框架Moq的使用

    编写一个API 新增一个接口 public interface IFoo { bool Ping(string ip); } 接口实现 public class Foo : IFoo { public ...

  4. 大延时情况tcp和udp测试

    环境搭建 使能Ubuntu的IPv6转发功能 root@yanhc-Aspire-4738G:/home/yanhc# cat /proc/sys/net/ipv4/ip_forward root@y ...

  5. 写给Unity开发者的iOS内存调试指南

    0x00 前言 工作的过程中,常常会发现有小伙伴对Unity的Profiler提供的内存数据与某些原生平台Profiler工具,例如iOS系统和Xcode,所提供的内存数据有差异而感到好奇.而且大家对 ...

  6. Java基于过滤器进行重定向不成功问题的兩種解決辦法,以及基於JSF的ajax重定向解決辦法

    我创建了一个过滤器,只要用户没有登陆就不能连接到主界面,但是在doFilter方法中用重定向在前端跳转页面不成功. 原因:由于我的登陆界面是基于ajax请求的,而ajax默认不支持重定向,他只能局部更 ...

  7. Arm开发板+Qt学习之路-multiple definition of

    问题描述:在一个头文件a.h中定义一些变量x,在其他.c文件中(b.c,c.c)要用到.用一般的全局变量的方法,编译时总是提示error:multiple definition of x 问题分析:o ...

  8. TFT液晶显示屏之绘图板应用

    应用范例: 使用 TOPWAY Smart LCD (HMT043FC-1C) 绘图板应用 第一步建立工程 ① 开TOPWAY TML Graphic Editor 2017 V1.04软件, 点击菜 ...

  9. SQL Server 2019 安装教程

    SQL Server 2019 安装教程 下载安装SQL: 1.下载SQL Server 2019 Developer 官方网址:下载地址. 2.下拉选择免费版本,直接点击下载(别问,问就是家境贫寒

  10. 13.python内置模块之re模块

    什么是正则? 正则表达式也称为正则,是一个特殊的字符序列,能帮助检查一个字符串是否与某种模式匹配.可以用来进行验证:邮箱.手机号.qq号.密码.url = 网站地址.ip等.正则不是python语言独 ...