小編之前經常對群里的網友說 “幾十塊錢的捉包都可以捉Mesh數據包的話,那Ellisys和Frontline不就倒閉了嗎?” 后來發現小編還是太 “草率” 了;
隨著科技的不斷發展,目前是可以使用低成本的硬件來實現Mesh數據的捉包與解密的,那么到底是怎么做的呢?Here we go!
前期準備
首先,我們需要如下幾個工具:
- 紅旭無線的52840 Dongle*
- 大名鼎鼎的協議分析軟件Wireshark
安裝最新的版本即可
- Python 3.6以上
注意: 安裝時需要將pip也安裝上
下載最新的版本即可
- nRF Connect for Desktop( 非必須 )
下載最新的版本即可(非必須,我們出廠時候,已經使用該軟件燒寫好抓包固件了。如果需要Dongle可以留言客服修改固件)
軟件配置
因為我們最終是調用Wireshark對抓取到的數據包進行協議分析,所以我們此時還需要對上述下載的
nRF Sniffer for Bluetooth LE進行配置,操作如下所示:
- 在 Sniffer_Software/extcap/ 文件夾中打開CMD并安裝相應的依賴包,以下是小編的路徑:
F:BluetoothNordicSniffernrf_sniffer_for_bluetooth_le_3.1.0_7cc811fextcap
以及命令
pip3 install -r requirements.txt
因為小編已經安裝過了,所以提示說已經安裝完成;如果是第一次安裝的話就會自動下載相應的依賴包;
- 復制Nordic的捉包工具到Wireshark的文件中:
- 打開Wireshark軟件,并選擇 **Help ** --> About Wireshark
- 選擇 “Floders” ,并雙擊Global Extcap path就會跳到相對應的路徑,并復制 Sniffer_Software/extcap/ 文件夾中的內容:
- 基本上,這個時候軟件的配置已經完成了;此時我們在復制后的這個目錄下,可以用如下命令進行驗證是否配置成功:
nrf_sniffer_ble.bat --extcap-interfaces
采用上述在本目錄下打開CMD的方法,輸入上述的指令,如果出現下述的界面則說明配置成功:
抓包原理
可能有讀者此時有點不耐煩了,但是在開始抓包之前,小編覺得還是很有必要跟大家講講這個抓包原理到底是怎么樣的;廢話不多說,老規矩---上圖!!!
從上圖可知,如果僅僅是抓取廣播包的話,那么就省事多了,直接對著37,38,39三個廣播信道掃描,然后對抓取到的數據進行解析即可;當然如果是擴展廣播包的話,可能會比較麻煩些,但是這個小編以后會專門開個章節進行講解;眾所周知,BLE連接上之后每個連接間隔都是會跳頻的,那么這個時候抓包器又是怎么抓的呢?BLE 5.0之前,跳頻的步長是固定的,但是5.0之后跳頻的步長則變成隨機了,這樣對抓包器的要求就更高了;但是,再復雜也是通過數學公式計算出來的,現在后悔沒有把數學學好吧?
由于5.0之后的跳頻算法比較復雜,小編這里不表,感興趣的讀者可以自行閱讀Spec;但是,像小編這樣的學渣來說,有沒有辦法通過輸入某些值,即可算出跳頻的列表呢? 答案:當然是有的 ,這個時候就不得不祭出一個神器了,先讓大伙看看效果:
紅色高亮是計算出來的跳頻列表,而下圖是實際抓包時的數據通道列表:
從上述的兩幅圖,我們可以看到第0~4個連接事件的跳頻信道跟抓包得到的數據信道是完全一樣的;其中CONNECT_IND的消息攜帶有 Access Address ,我們利用神器只要將Access Address值的內容輸入進去即可計算出整個跳頻列表;同理,抓包器就利用這個CONNECT_IND的消息,計算出下一個信道在哪里,從而實現抓包的目的,這也是為什么在抓取數據包時,一定要在廣播前就打開Sniffer,否則抓取不到數據包;
開始抓包
接下來,小編正式講解開始本篇文章的重點,也是大家最喜歡的環節,那么怎么使用紅旭無線的52840 Dongle進行抓取Mesh數據包并解密呢?
- 首先,打開Wireshark選擇紅旭無線的52840 Dongle,如下圖所示:
- 雙擊上圖中的 “nRF Sniffer for Bluetooth LE COM22” ,即可開始抓包
- 由于我們周邊會大量存在其他我們不想要的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))
- 其中一個 HX-DK-夏 Z1A00下載Nordic官方的Light_Switch固件,另外一個 HX-DK-夏 Z1A00下載Nordic官方的Provisioner固件
- 按下Provisioner那個開發板的 Button 1 ,此時Provisioner這個開發板就開始對未入網的設備進行配網
- 這個時候紅旭無線的52840 Dongle就會將整個入網過程抓取,并顯示在Wireshark界面上;然而,我們大家都知道,Mesh入網之后所有的數據都是通過加密的,那么如果解密呢?這個其實跟Ellisys是一樣的,只要輸入Netkey,Appkey,DevKey以及IV Index即可;隨便選中一個加密后的Mesh數據包,將前面提到的內容填充進去,具體操作如下:
按照上圖中的步驟填充Netkey,Appkey,DevKey以及IV Index,這里以小編的為例:
需要注意的是: 所有的Key都要在前面加上“0x”,其中SRC Address指的是節點元素的首地址 ;至此,Wireshark就可以解析所有Mesh加密之后的內容了;
注意: 為了提高抓取GATT-Bear的數據包概率,應該指定抓取某個設備,經過小編實測之后,基本上可以抓取到GATT-Bear的交互數據包;具體的配置如下:
其中Device就是要你指定的被抓取的設備,同時如果發現紅旭無線的52840 Dongle的紅色LED此時高亮,就說明已經抓取到連接的數據包了;
實驗結果
下面是小編用紅旭無線的52840 Dongle抓取到的Mesh入網以及配置的整個過程:
-
led燈
+關注
關注
22文章
1588瀏覽量
107405 -
Mesh網絡
+關注
關注
0文章
41瀏覽量
14093 -
SRC
+關注
關注
0文章
60瀏覽量
17902 -
python
+關注
關注
53文章
4753瀏覽量
84081 -
nrf52840
+關注
關注
1文章
98瀏覽量
8279
發布評論請先 登錄
相關推薦
評論