作者:Yimi Hu & Light @ PwnMonkeyLabs
原文鏈接:https://mp.weixin.qq.com/s/H6obtU1rawcyzlxTzJCxRA

1.簡介

作為該專題的第二篇文章,將以一款智能燈泡為例,對BLE設備的分析方法進行簡單介紹,同時對上一篇文章中的BLE基礎知識做一個回顧。

本篇選用LifeSmart智能燈泡為研究目標。LifeSmart公司有一款app可以對旗下的各種智能設備進行控制,本篇選用的BLE智能燈泡同樣可以用該app調節燈泡的亮度和顏色等。備注:LifeSmart公司的各種產品可以在淘寶直接買到,其app也有公開的下載鏈接。

App的控制界面如圖1.1所示

圖片

圖1.1 app控制界面

按照LifeSmart的使用邏輯,每個BLE燈泡都必須完成綁定之后,才能正常使用。我們本次的分析目的是,不經過綁定過程,而直接控制燈泡,如改變顏色或者亮度等。

2.分析過程

2.1 獲取BLE通信內容的方法

要分析app如何對燈泡進行控制,最直觀的方法就是觀察一下手機app通過BLE給智能燈泡發送了什么數據。我們有三種常用方法用于獲取這些BLE通信內容:

1)HCI Log。由Android系統提供,藍牙的所有日志都包含內在,內容十分全面,但是需要完成一次藍牙通信之后從手機中導出閱讀。

2)app分析。通過逆向分析app,查看app打印的日志,或者Hook關鍵函數,也能夠獲取藍牙通信的內容。

3)BLE嗅探。通過BLE嗅探工具,直接嗅探周圍BLE通信的數據,但如果BLE通信有加密則無法嗅探有價值的內容。

在本篇的案例中,我們直接采用第二種方法,即app分析。因為該app并沒有屏蔽日志輸出,所以程序運行時會直接將日志打印出來,我們只要分析并閱讀日志就可以完成絕大部分工作。

2.2 app日志分析

本篇的分析目標比較簡單,其app日志直接打印出了每次BLE通信的內容,因此我們只要查看其日志,就可以分析手機與燈泡之間的通信內容。

App日志可以通過DDMS、ADB或其他工具查看,如AndroidKiller等,我們直接選擇一種比較簡單的方式,即通過AndroidKiller查看。AndroidKiller是一款免費的用于Android APK逆向分析的可視化工具,雖然已經很久不更新了,但依舊很好用。

調整燈泡亮度時,Android Killer打印出來的日志如圖2.1所示

圖片

圖2.1 調整亮度時的app日志

多次通過app調整燈泡亮度后,將相關的日志逐條挑出,然后并列放在一起做對比分析,如圖2.2所示。

圖片

圖2.2 app日志對比

圖2.2中,可以看到App打印出了以下信息:

燈泡地址:類似于網卡的MAC地址,每個燈泡都有一個獨一無二的地址;

Service UUID和Characteristic UUID:正如本專題第一章所述,BLE通信實際上是對Service和Characteristic的讀寫,而Service和Characteristic用其相應的 UUID標識;

消息內容:二進制形式的BLE通信內容,多次調整亮度之后,通過對比每次通信內容,可以發現有一個字節數值的大小與亮度百分比成正比。

3.結果實現

有了第二章的分析結果,本章將嘗試在任意未綁定BLE燈泡的手機上,通過發送BLE消息的以控制燈泡亮度。

3.1 nRF Connect介紹

nRF Connect是一款由Nordic Semiconductor公司開發的用于調試BLE設備的免費app,分為iOS和Android兩個版本。這里使用Android版本的nRF Connect進行后續工作。nRF Connect有三個常用功能:

A、掃描周圍設備,并顯示設備信息。如圖3.1所示,

圖片

圖3.1 nRF Connect Scan界面

在Scanner界面下,點擊右上角的SCAN按鈕開始掃描。在本專題第一篇文章中,我們介紹了Master和Slave的各種狀態,nRF Connect掃描時,Android手機作為Master,會接收周圍各個Slave發出的廣播包,這些廣播包里包含了Slave的信息。點擊掃描到的設備會展示nRF Connect從該設備的廣播包里解析出來的信息,在詳細信息頁面中點擊RAW按鈕,會顯示該設備廣播包的原始二進制數據。

B、與BLE設備進行通信

在Scanner界面下,點擊CONNECT按鈕即可向設備發起連接,連接建立之后就可以進行通信了,如圖3.2所示。

圖片

圖3.2 與BLE設備進行通信

讀取Characteristic即為手機接收BLE設備的消息,寫入Characteristic則代表向BLE設備發送消息。

C、作為Advertiser發送廣播包

此外,nRF Connect還可以作為Slave,進入Advertiser狀態,向周圍不斷地發送廣播,如圖3.3所示。

圖片

圖3.3 模擬Advertiser狀態

在Advertiser狀態下會持續發送廣播包,廣播包中包含了對于本設備的簡單描述信息,nRF Connect可以模擬其中5個基本信息,如TX power、Manufacturer Data等。

3.2 控制燈泡亮度

結合日志的分析結果,可以使用nRF Connect完成燈泡亮度的控制,具體的操作步驟如下:

1)在nRF Connect中,通過設備的MAC地址,找到需要操作的燈泡,如圖3.4所示;

圖片

圖3.4 在Scanner狀態下找到燈泡

2)與燈泡建立BLE連接,并找到需要寫入的Service和Characteristic的UUID,如圖3.5所示;

圖片

圖3.5 與燈泡建立BLE連接

3)以hex形式,向Characteristic寫入控制燈泡亮度的通信數據,如圖3.6所示。

圖片

圖3.6 向Characteristic寫入數據

我們直接將燈泡亮度設置為0%,如圖3.7所示,點擊SEND之后,可以看到燈泡的亮度隨之出現了變化

圖片

圖3.7 調整燈泡亮度為0

4. 總結

我們在這篇文章中,從app日志入手,分析了智能燈泡的BLE通信內容,隨后使用nRF Connect直接與燈泡進行BLE通信,從而實現控制燈泡亮度的目的。上述分析表明,LifeSmart與BLE智能燈泡之間并沒有嚴格的綁定關系,所謂的“綁定”步驟,僅僅是app本地登記一下需要控制的智能燈泡,方便了下次操作,但BLE智能燈泡本身并不知道自己被綁定給了誰。

本篇作為《胖猴小玩鬧》專題的入門文章,分析就到此結束了。本系列后續文章中,我們會遇到更復雜的情況,如加殼、加密等等,屆時會介紹更多的工具和方法,歡迎各位讀者和我們一起探索。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1528/