如何使用低成本的硬件来实现Mesh数据的捉包与解密?

电子说

1.3w人已加入

描述

小编之前经常对群里的网友说 “几十块钱的捉包都可以捉Mesh数据包的话,那Ellisys和Frontline不就倒闭了吗?” 后来发现小编还是太 “草率” 了;

随着科技的不断发展,目前是可以使用低成本的硬件来实现Mesh数据的捉包与解密的,那么到底是怎么做的呢?Here we go!

前期准备

首先,我们需要如下几个工具:

  • 红旭无线的52840 Dongle*
  • 大名鼎鼎的协议分析软件Wireshark

安装最新的版本即可

  • Python 3.6以上

注意: 安装时需要将pip也安装上

  • nRF Sniffer for Bluetooth LE

下载最新的版本即可

  • nRF Connect for Desktop( 非必须 )

下载最新的版本即可(非必须,我们出厂时候,已经使用该软件烧写好抓包固件了。如果需要Dongle可以留言客服修改固件)

软件配置

因为我们最终是调用Wireshark对抓取到的数据包进行协议分析,所以我们此时还需要对上述下载的

nRF Sniffer for Bluetooth LE进行配置,操作如下所示:

  1. Sniffer_Software/extcap/ 文件夹中打开CMD并安装相应的依赖包,以下是小编的路径:

F:BluetoothNordicSniffernrf_sniffer_for_bluetooth_le_3.1.0_7cc811fextcap

以及命令

pip3 install -r requirements.txt

Mesh网络

因为小编已经安装过了,所以提示说已经安装完成;如果是第一次安装的话就会自动下载相应的依赖包;

  1. 复制Nordic的捉包工具到Wireshark的文件中:
    1. 打开Wireshark软件,并选择 **Help ** --> About Wireshark

Mesh网络

  1. 选择 “Floders” ,并双击Global Extcap path就会跳到相对应的路径,并复制 Sniffer_Software/extcap/ 文件夹中的内容:

Mesh网络

  1. 基本上,这个时候软件的配置已经完成了;此时我们在复制后的这个目录下,可以用如下命令进行验证是否配置成功:

nrf_sniffer_ble.bat --extcap-interfaces

采用上述在本目录下打开CMD的方法,输入上述的指令,如果出现下述的界面则说明配置成功:

Mesh网络

抓包原理

可能有读者此时有点不耐烦了,但是在开始抓包之前,小编觉得还是很有必要跟大家讲讲这个抓包原理到底是怎么样的;废话不多说,老规矩---上图!!!

Mesh网络

从上图可知,如果仅仅是抓取广播包的话,那么就省事多了,直接对着37,38,39三个广播信道扫描,然后对抓取到的数据进行解析即可;当然如果是扩展广播包的话,可能会比较麻烦些,但是这个小编以后会专门开个章节进行讲解;众所周知,BLE连接上之后每个连接间隔都是会跳频的,那么这个时候抓包器又是怎么抓的呢?BLE 5.0之前,跳频的步长是固定的,但是5.0之后跳频的步长则变成随机了,这样对抓包器的要求就更高了;但是,再复杂也是通过数学公式计算出来的,现在后悔没有把数学学好吧?

由于5.0之后的跳频算法比较复杂,小编这里不表,感兴趣的读者可以自行阅读Spec;但是,像小编这样的学渣来说,有没有办法通过输入某些值,即可算出跳频的列表呢? 答案:当然是有的 ,这个时候就不得不祭出一个神器了,先让大伙看看效果:

Mesh网络

红色高亮是计算出来的跳频列表,而下图是实际抓包时的数据通道列表:

Mesh网络

从上述的两幅图,我们可以看到第0~4个连接事件的跳频信道跟抓包得到的数据信道是完全一样的;其中CONNECT_IND的消息携带有 Access Address ,我们利用神器只要将Access Address值的内容输入进去即可计算出整个跳频列表;同理,抓包器就利用这个CONNECT_IND的消息,计算出下一个信道在哪里,从而实现抓包的目的,这也是为什么在抓取数据包时,一定要在广播前就打开Sniffer,否则抓取不到数据包;

开始抓包

接下来,小编正式讲解开始本篇文章的重点,也是大家最喜欢的环节,那么怎么使用红旭无线的52840 Dongle进行抓取Mesh数据包并解密呢?

  1. 首先,打开Wireshark选择红旭无线的52840 Dongle,如下图所示:

Mesh网络

  1. 双击上图中的 “nRF Sniffer for Bluetooth LE COM22” ,即可开始抓包
  2. 由于我们周边会大量存在其他我们不想要的BLE数据包,那么这个时候就需要过滤一下,这里小编过滤了普通的BLE数据包,只保留了Mesh相关的数据包以及用于测试那个设备,过滤的命令如下:

((pbadv) || (provisioning)||(btmesh)||(beacon) ) && ((btle.advertising_address == eb:7b:7a:14:1c:02)||(btle.advertising_address == d3:31:5a:db:35:91))

Mesh网络

  1. 其中一个 HX-DK-夏 Z1A00下载Nordic官方的Light_Switch固件,另外一个 HX-DK-夏 Z1A00下载Nordic官方的Provisioner固件
  2. 按下Provisioner那个开发板的 Button 1 ,此时Provisioner这个开发板就开始对未入网的设备进行配网
  3. 这个时候红旭无线的52840 Dongle就会将整个入网过程抓取,并显示在Wireshark界面上;然而,我们大家都知道,Mesh入网之后所有的数据都是通过加密的,那么如果解密呢?这个其实跟Ellisys是一样的,只要输入Netkey,Appkey,DevKey以及IV Index即可;随便选中一个加密后的Mesh数据包,将前面提到的内容填充进去,具体操作如下:

Mesh网络

按照上图中的步骤填充Netkey,Appkey,DevKey以及IV Index,这里以小编的为例:

Mesh网络

Mesh网络

需要注意的是: 所有的Key都要在前面加上“0x”,其中SRC Address指的是节点元素的首地址 ;至此,Wireshark就可以解析所有Mesh加密之后的内容了;

注意: 为了提高抓取GATT-Bear的数据包概率,应该指定抓取某个设备,经过小编实测之后,基本上可以抓取到GATT-Bear的交互数据包;具体的配置如下:

Mesh网络

其中Device就是要你指定的被抓取的设备,同时如果发现红旭无线的52840 Dongle的红色LED此时高亮,就说明已经抓取到连接的数据包了;

实验结果

下面是小编用红旭无线的52840 Dongle抓取到的Mesh入网以及配置的整个过程:

Mesh网络

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分