日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux智能密码锁,【胖猴小玩闹】智能门锁与网关:云丁鹿客智能门锁BLE通信的分析(中)...

發布時間:2023/12/31 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux智能密码锁,【胖猴小玩闹】智能门锁与网关:云丁鹿客智能门锁BLE通信的分析(中)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介

上一篇文章中我們研究了Loock Touch門鎖配套app中BleKey的獲取流程,整個密鑰分發和設備認證的流程都比較規范。接下來,我們將重點分析門鎖固件對BLE通信內容的處理流程,開始分析之前,我們需要先獲取門鎖固件。

之前的文章我們已經介紹了兩種獲取固件的方法:在果加門鎖的分析文章中,我們抓取了門鎖向服務器請求固件更新時的數據包;在分析海康螢石網關時,我們直接讀取了電路板上的Flash芯片。

但是以上兩種方法都不適用于Loock Touch門鎖,因為我們并沒有找到鹿客門鎖的固件更新接口,且門鎖電路板上也沒有外置的Flash芯片,固件是直接保存在MCU內置Flash存儲器中的。所以我們在本篇文章中將分享一個新的方法:通過MCU的調試接口提取固件。

2. 調試接口與調試器

在此前的文章中,我們已經介紹了通過gdbserver調試海康螢石固件程序的方法,通常情況下,gdbserver是運行于Linux系統環境中的調試器程序,通過使用Linux系統提供的調試接口以完成調試工作,并不需要太多硬件上的輔助。而在某些場景中,例如,沒有Linux操作系統時,gdbserver等工具就無法滿足我們的調試需求了,此時需要直接使用MCU提供的硬件調試接口和功能,以完成調試工作。通過閱讀MCU的芯片手冊,可以找到MCU提供的調試方式、調試引腳等詳細信息。

為了使用MCU的調試接口,我們還需要與之對應的硬件調試器。與IDA、GDB等調試器軟件類似,通過硬件調試器,我們也可以完全掌握被調試程序的執行狀況。一般情況下,硬件調試器是通過USB接口連接到PC主機的,而硬件調試器與MCU之間的通信接口則有許多種。不同的MCU,支持的接口也不盡相同,具體信息需要查閱各芯片的手冊。

本篇文章要研究的Loock Touch門鎖使用的MCU型號為EFM32GG280F512,通過翻閱芯片手冊,可以找到其調試接口信息如下圖:

圖2-1 EFM32調試接口

上圖中的調試接口名稱為SWD接口,常見的使用SWD接口的硬件調試器有JLink、STLink等。

我們目前使用的調試器SEGGER JLink(下文簡稱為JLink)提供了對JTAG和SWD兩種調試接口的支持,具體使用時,只需要連接到對應的引腳即可,JLink中兩種接口的引腳如下圖所示:

圖2-2 SEGGER JLink的引腳定義

3. 通過調試接口提取固件

JLink調試器可以通過調試接口讀寫芯片內置的Flash,從而獲取完整的固件。并不是所有芯片都可以通過調試接口提取固件,很多設備在發行版中啟用了讀保護(Readout Protection)機制,使得我們無法通過調試接口讀到Flash內容,所幸本文中的設備并沒有啟用該機制。

接下來,我們就尋找并嘗試用JLink連接芯片的調試接口。

3.1 連接調試接口

在門鎖的電路板上,主控MCU一旁有一排過孔,我們已經在將排針焊接到這排過孔上了,如下圖所示:

圖3-1 MCU及其部分接口引腳

圖中,左側紅框內就是我們焊上的排針,電路板上標注了排針對應的MCU引腳名稱。經過萬用表測量,可以確定紅框中的IO和CLK引腳就是芯片的SWDIO和SWCLK兩個引腳,我們在圖2-1中提到這兩個引腳是SWD調試接口的一部分,那么我們將這幾個引腳按照如下圖的方式連接到JLink調試器。

圖3-2 調試接口與JLink的連接

上圖左側是圖3-1中的排針,右側是SEGGER JLink的引腳。連接完成后,將JLink連接到電腦的USB口,并打開JLink Commander命令行工具(JLink的相關工具和使用手冊等都可以在SEGGER的官網下載到:https://www.segger.com/downloads/jlink/),執行下圖中的命令:

圖3-3 使用JLink連接SWD接口

下面逐一解釋上圖中6個紅框的內容:

(1)命令行工具開啟時,會首先對JLink的狀態進行檢測(SEGGER官網的JLink,無論價格還是到貨時間都不理想,所以我們選擇了某寶,從這里打印的JLink固件信息來看,某寶的似乎是盜版產品);

(2)輸入connect指令,控制JLink開始通過調試接口連接MCU;

(3)輸入?指令選擇要調試的芯片型號,在彈出的對話框中,我們按照芯片的廠商和型號,選擇如下圖的選項;

圖3-4 芯片型號選擇

(4)輸入s指令,選擇調試接口的類型為SWD;

(5)選擇接口的通信速率,一般保持默認即可;

(6)當出現第(6)步的這些內容時,說明JLink已經通過SWD接口連接到了MCU,接下來我們就可以讀取固件或者進行調試了。

3.2 提取固件

上文提到,調試器可以讀寫芯片的內置Flash,而固件代碼就存儲在芯片內置Flash中,所以我們只需要將Flash中代碼區域的數據讀出并保存下來,就相當于拿到了固件。

按照我們分析果加門鎖時的思路,翻閱芯片手冊,可以確定代碼存儲在內存地址為0x0~0x100000的區域。我們通過JLink Commander命令行工具的savebin命令(該命令的使用方法可以去JLink的手冊中查閱)將這一區域中的二進制數據保存下來。

圖3-5 讀取固件的二進制數據

上圖中,我們拿到了固件代碼,并將其命名為LoockEfm32Fw.bin。

3.3 解析固件

在拿到固件之后,我們需要解析固件并對其進行逆向分析。通過查閱手冊可以知道,EFM32GG280的核心是ARM Cortex-M3,和果加門鎖用到的STM32L0同屬Cortex-M系列,所以我們可以按照果加門鎖相關篇章中的方法配置IDA并載入固件。載入之后,繼續沿用果加門鎖分析時的思路,尋找Reset中斷的中斷服務程序,即偏移0x4地址處的數據,跳轉之后按“c”鍵,IDA就會自動開始解析代碼,如下圖所示。

圖3-6 從Reset中斷入手解析代碼

上文提到,代碼存儲在內存地址為0x0~0x100000的區域,所以圖3-6中固件的基址為0x0。此前,我們在分析果加門鎖時,將固件載入IDA時基址是0x08000000,因為在果加的案例中,代碼存儲區域的起始地址是0x08000000。

至此,我們成功提取并解析了Loock Touch門鎖的固件,更加詳細的分析工作將在下一篇文章中進行。

4. 小結

本篇文章分享了如何通過調試接口提取芯片固件,而除了這個作用外,調試接口的主要功能是對MCU正在運行的程序進行調試,在后續文章中我們將通過JLink調試器分析門鎖固件是如何處理BLE通信數據的。

此外,值得一提的是,對大部分芯片來說,只有芯片的讀保護機制未啟用時,才能通過調試接口提取它的固件,但是也有少數芯片的讀保護機制是可以繞過的,這部分內容后續可能會以番外的形式進行分享,感興趣的讀者可以關注我們的后續文章。

Light & Yimi Hu @ PwnMonkeyLabs

總結

以上是生活随笔為你收集整理的linux智能密码锁,【胖猴小玩闹】智能门锁与网关:云丁鹿客智能门锁BLE通信的分析(中)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。