對藍(lán)牙燈泡進(jìn)行逆向工程

原文

最近吼砂,我發(fā)現(xiàn)自己就“物理網(wǎng)絡(luò)Web藍(lán)牙 ”進(jìn)行了大量的討論绩鸣。為了演示這些技術(shù)的一些功能,我想為我的演示找到一款價(jià)格合理的設(shè)備 - 最好低于10美元 - 這樣我的觀眾就可以輕松獲得演示設(shè)備并自行嘗試凡简。

任何足夠先進(jìn)的技術(shù)都無法與魔術(shù)區(qū)分開來逼友。” - 亞瑟C.克拉克

通過搜索互聯(lián)網(wǎng)秤涩,我以10美元以下的價(jià)格從中國購買了一些消費(fèi)“智能燈泡”帜乞,因此我訂購了兩種來玩。智能燈泡包括一個(gè)RGB LED筐眷,因此它們可以改變顏色黎烈,當(dāng)然它們也是通過藍(lán)牙控制的!正如你可以從這種產(chǎn)品期望的那樣匀谣,沒有任何文檔 - 只是鏈接下載Android應(yīng)用程序照棋。由于我想展示如何通過Web藍(lán)牙控制它們,因此我決定嘗試對協(xié)議進(jìn)行反向工程武翎。

為什么要花時(shí)間對協(xié)議進(jìn)行逆向工程烈炭?

首先,這種方式更有趣宝恶。它還使您能夠?qū)⑵渑c諸如天氣服務(wù)(燈泡根據(jù)天氣變化顏色)符隙,您的startup的自動化版本(代碼被破壞時(shí)燈泡為紅色)或快速閃爍隨機(jī)顏色等任何內(nèi)容結(jié)合起來(我的觀眾真的很喜歡這最后的用途)趴捅。

一旦你控制了燈泡,可能性僅受限于你的想象力:你可以用你的聲音控制它(使用語音識別)霹疫,用手機(jī)的加速度計(jì)控制它,當(dāng)你接到電話時(shí)閃爍燈泡,或者甚至通過全天改變色溫來調(diào)節(jié)睡眠周期栏笆,以獲得類似日出/夕陽光的效果缸逃,以幫助調(diào)節(jié)全天的身體褪黑激素水平。而這些只是適合我餐巾背面的想法苞七!

為了完成這個(gè)項(xiàng)目惠啄,你不需要知道有關(guān)藍(lán)牙的一切姥闭,但需要一些基本概念才能實(shí)現(xiàn)铜跑。

如果您想了解更多關(guān)于藍(lán)牙低功耗(又名BLE)的信息囤锉,我很樂意為您指出正確的方向驱入,或者寫一篇文章解釋BLE的更多技術(shù)方面 - 在評論中回復(fù)我莺褒!

藍(lán)牙低功耗101(或者100)

在低功耗藍(lán)牙中,設(shè)備可以執(zhí)行兩種角色之一雪情。設(shè)備可以是“中央(Central)”(本例中為手機(jī))遵岩,也可以是“外設(shè)”(分別為燈泡)。

藍(lán)牙設(shè)備具有對應(yīng)于設(shè)備的一種功能的服務(wù)(services) 巡通。例如旷余,您的智能手表可能會公開一項(xiàng)服務(wù)以報(bào)告設(shè)備的電池電量,然后另一臺設(shè)備測量您的心率扁达。每項(xiàng)服務(wù)都暴露稱為特性(characteristics)的變量/屬性正卧。這些特征代表了服務(wù)的一個(gè)參數(shù),可以讀取,寫入或者兩者兼有。

例如眨攘,在上述電池服務(wù)中红氯,它將具有電池電量特性,這是一個(gè)只讀值,包含0到100之間的1字節(jié)值,報(bào)告設(shè)備中剩余電池的百分比。

溫度服務(wù)可以具有一個(gè)溫度特性罐盔,以及另一個(gè)濕度特性,兩者都是只讀的救崔。智能燈泡服務(wù)可以具有一個(gè)特性用于開/關(guān)(寫入0將其關(guān)閉惶看,1開啟)以及用于亮度(0至100左右)的另一特性捏顺,其可以是只寫或可讀可寫。

藍(lán)牙低功耗:外設(shè)纬黎,服務(wù)和特性

外設(shè)周期性地宣告他們擁有的服務(wù)(通常每秒約一次)幅骄。中心(例如您的手機(jī))可以看到這些廣告,并且可以與周圍的任何外圍設(shè)備建立連接本今,并對其服務(wù)提供的特征進(jìn)行讀取/寫入拆座。

每種服務(wù)和特性都由唯一的16位或128位數(shù)字標(biāo)識,如ff05 (16位)或00000000–0000–1000–8000–00805F9B34FB (128位)冠息。 16位預(yù)留用于標(biāo)準(zhǔn)服務(wù)和特性挪凑,例如前面提到的電池電量服務(wù),并由Bluetooth SIG Group定義逛艰。盡管如此躏碳,許多消費(fèi)設(shè)備喜歡將它們用于自己的目的。

逆向工程燈泡:燈泡1

逆向工程第一個(gè)燈泡瓮孙,一個(gè)智能LED燈E27 RGBW 5W燈泡 ,很容易选脊。簡而言之 - 我打開NRF Connect 杭抠,掃描,發(fā)現(xiàn)燈泡恳啥,嘗試一些值偏灿,并得到我想要的。

nRF Connect

連接到燈泡后钝的,我對設(shè)備暴露的不同特征進(jìn)行隨機(jī)寫入翁垂,最終它改變了顏色。經(jīng)過一些試驗(yàn)和錯(cuò)誤之后硝桩,我發(fā)現(xiàn)協(xié)議非常簡單沿猜。您只需要將4個(gè)字節(jié)寫入Service ffb0 / Characteristics ffb2 ,格式如下: BB GG RR WW (藍(lán)色碗脊,綠色啼肩,紅色和白色級別),對應(yīng)燈泡的內(nèi)部LED衙伶。

我甚至沒有得到這個(gè)燈泡的應(yīng)用程序祈坠,并且從來沒有-我只是通過直接用nRF Connect控制它,后來寫了一個(gè)小的Node.js應(yīng)用程序矢劲,以使用noble控制它赦拘。

連接到設(shè)備后,查找特征`**ffb2**`并單擊向上箭頭以寫入數(shù)據(jù)

逆向工程燈泡:燈泡2

第二個(gè)燈泡芬沉,一個(gè)魔術(shù)藍(lán)UU E27燈泡 躺同,更有趣阁猜。使用與nRF Connect相同的技術(shù),我立即發(fā)現(xiàn)唯一可寫的特征(在服務(wù)ffe5中的特征號ffe9 )笋籽,但給它發(fā)送值蹦漠,它沒有任何效果。我決定嘗試另一種方法 - 使用隨燈泡提供的官方Android應(yīng)用程序车海,然后記錄所有通信信息笛园,找出命令,然后將它們自己發(fā)送到燈泡來控制它侍芝。

魔術(shù)藍(lán)色智能燈泡

首先研铆,我安裝了此燈泡的官方應(yīng)用程序 ,確保藍(lán)牙已啟用州叠,并打開應(yīng)用程序以確笨煤欤可以與燈泡配對并通過應(yīng)用程序控制它。

Android 4.4(和更新版本)可以選擇記錄進(jìn)出設(shè)備的所有藍(lán)牙數(shù)據(jù)包咧栗。我使用此功能來記錄應(yīng)用程序和燈泡之間的消息逆甜。如果你想親自嘗試一下,啟用起來非常簡單:

  • 首先致板,如果您尚未這樣做交煞,則需要在Android中啟用開發(fā)人員模式
  • 接下來斟或,轉(zhuǎn)到設(shè)置素征,然后打開“開發(fā)人員選項(xiàng)”并打開“啟用Bluetooth HCI snoop日志”。這將開始記錄通過您的設(shè)備的所有藍(lán)牙流量萝挤。

一旦我的記錄機(jī)制全部建立起來御毅,我就打開了“Magic Blue”應(yīng)用程序,并向燈泡發(fā)送了一些命令以多次改變它的顏色)怜珍。為了完成該過程的第一部分端蛆,我將藍(lán)牙通信記錄從我的Android設(shè)備復(fù)制到了我的PC。

您可以在/sdcard/btsnoop_hci.log找到錄制文件酥泛。您可以使用“文件管理器”應(yīng)用程序找到該文件并通過Google Drive或Email共享該文件欺税,也可以使用USB電纜將Android設(shè)備連接到PC,然后在根文件夾中找到btsnoop_hci.log文件揭璃。

如果您的計(jì)算機(jī)上安裝了Android SDK晚凿,則還可以使用USB電纜連接它并使用以下命令復(fù)制日志:

adb pull /sdcard/btsnoop_hci.log

注意:在某些設(shè)備中, btsnoop_hci.log是以不同的路徑創(chuàng)建的瘦馍,例如/sdcard/Android/data/btsnoop_hci.log 歼秽。

我使用Wireshark打開藍(lán)牙日志。Wireshark是一款免費(fèi)工具情组,可讓您分析網(wǎng)絡(luò)流量燥筷。如果您想要自己逆向工程燈泡箩祥,請注意,您可能需要將文件重命名為btsnoop_hci.pcap肆氓,Wireshark才能識別它袍祖。

Wireshark操作

最初,有大量的數(shù)據(jù)包谢揪,其中一些可能與藍(lán)牙無關(guān)蕉陋。我使用“過濾器”選項(xiàng)(見上圖)選擇“寫入特征值(Write Characteristic Value)”命令。我使用這個(gè)過濾器:

btatt.opcode.method==0x12

(或者拨扶,您也可以通過設(shè)備地址進(jìn)行過濾凳鬓,以查看與特定設(shè)備的所有通信。以下是使用MagicBlue燈泡地址過濾的示例:

bluetooth.addr==f7:34:5b:f8:cc:ef

有時(shí)候通過這種方式可以更容易地找到你要找的東西患民。)

看著其中一個(gè)寫命令缩举,我發(fā)現(xiàn)這個(gè)有效載荷:

有效載荷為56 ff 08 5a 00 f0 aa

我使用上面提到的nRF Connect應(yīng)用程序?qū)⒋酥蛋l(fā)送到服務(wù)ffe5的特性ffe9 (如果您還記得匹颤,這是唯一可寫的)仅孩,并且瞧 - led變成了粉紅色紫色。

輸入值印蓖,發(fā)送辽慕,然后。另伍。鼻百。
它改變顏色了绞旅!

通過試驗(yàn)其他一些組合摆尝,我找出了協(xié)議的格式。我發(fā)現(xiàn)實(shí)際上有兩種格式因悲,一種用于控制RGB LED堕汞,另一種用于控制暖白色LED(看起來像不能同時(shí)開啟):

56 RR GG BB 00 f0 aa

第一個(gè)字節(jié)始終為56 ,然后是紅色晃琳,綠色和藍(lán)色值的三個(gè)字節(jié)讯检,然后是值為00 f0 aa另外三個(gè)字節(jié)。

對于白色LED卫旱,格式是:

56 00 00 00 WW 0f aa

第一個(gè)字節(jié)仍然是56 人灼,然后接下來的三個(gè)字節(jié)是00(或者任何你想要的,真的顾翼,因?yàn)樵O(shè)備將不給予他們注意)投放,然后是一個(gè)指定白色LED亮度的值,以及另外兩個(gè)字節(jié)的值0f aa 适贸。

最后灸芳,燈泡還包含一些奇特的模式涝桅,例如兩種顏色之間的漸變。這些由不同的命令激活:

bb II SS 44

II是照明模式(lighting mode)的索引( 2538之間的值有效)且SS是速度(數(shù)值越低意味著顏色變化越快)烙样,每個(gè)單位大約為200毫秒(所以數(shù)值5會每秒觸發(fā)一次變化)冯遂。

例如,模式編號25改變所有彩虹色和白色之間的淡入淡出谒获。要在每兩種顏色之間延遲約1秒來激活它蛤肌,請發(fā)送以下命令:

bb 25 05 44

關(guān)于安全的一個(gè)詞

正如你在上面看到的,這兩款智能燈泡都沒有安全機(jī)制究反。這意味著范圍內(nèi)的每個(gè)人都可以連接并控制它們寻定。雖然第二個(gè)燈泡至少需要對協(xié)議進(jìn)行逆向工程,但第一個(gè)燈泡甚至不需要付出很多努力精耐。我希望一些高端智能燈泡的設(shè)計(jì)考慮到安全性狼速,盡管從Google的“藍(lán)牙智能燈泡安全性”來看,似乎沒有人真正解決這些問題(例如卦停,我只能找到一個(gè)提到智能燈泡的安全審查)向胡。

所以只要知道,盡管這些燈泡作為裝飾惊完,玩具或藝術(shù)項(xiàng)目的一部分是很好的僵芹,但在閱讀本文后,您可能不得不容忍鄰居在家中突然改變燈泡的燈光小槐。

故事的道德:我不會將它們用于任何關(guān)鍵的事情拇派。

結(jié)論:我們已經(jīng)破解了燈泡......現(xiàn)在為了更多的樂趣!

所以現(xiàn)在我們通過對協(xié)議進(jìn)行逆向工程來破解燈泡凿跳,我們可以自信地改變我們鄰居的智能燈泡的顏色(我在開玩笑:我不會寬恕或推薦這個(gè)......我只是說我們可以 )件豌。

如果您有興趣使用我使用的智能燈泡,您可以在這里 (第一個(gè))和這里(第二個(gè))獲取它們控嗜。我邀請你自己試驗(yàn)燈泡茧彤,看看你可以用它們做些什么干凈的事情(如果遇到任何麻煩或發(fā)現(xiàn)任何超酷的東西,請隨時(shí)在評論中告訴我)疆栏。

在我的下一篇文章中 曾掂,我將討論Web藍(lán)牙,并演示如何通過網(wǎng)頁控制燈泡壁顶。所以如果你讓拿到了自己的燈泡珠洗,你會準(zhǔn)備好跟著我來:)

更新(2017年2月):我拆開燈泡并逆向工程了它的固件。

有興趣了解燈泡的內(nèi)部工作原理若专?查看后續(xù)的帖子 许蓖,我從燈泡中提取固件并對其進(jìn)行逆向工程,或閱讀我如何讓燈泡在沒有電源的情況下運(yùn)行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛔糯,一起剝皮案震驚了整個(gè)濱河市拯腮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚁飒,老刑警劉巖动壤,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淮逻,居然都是意外死亡琼懊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門爬早,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼丈,“玉大人,你說我怎么就攤上這事筛严∽淼” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵桨啃,是天一觀的道長车胡。 經(jīng)常有香客問我,道長照瘾,這世上最難降的妖魔是什么匈棘? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮析命,結(jié)果婚禮上主卫,老公的妹妹穿的比我還像新娘。我一直安慰自己鹃愤,他們只是感情好簇搅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昼浦,像睡著了一般馍资。 火紅的嫁衣襯著肌膚如雪筒主。 梳的紋絲不亂的頭發(fā)上关噪,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音乌妙,去河邊找鬼使兔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛藤韵,可吹牛的內(nèi)容都是我干的虐沥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼欲险!你這毒婦竟也來了镐依?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤天试,失蹤者是張志新(化名)和其女友劉穎槐壳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喜每,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡务唐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了带兜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枫笛。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刚照,靈堂內(nèi)的尸體忽然破棺而出刑巧,到底是詐尸還是另有隱情,我是刑警寧澤无畔,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布海诲,位于F島的核電站,受9級特大地震影響檩互,放射性物質(zhì)發(fā)生泄漏特幔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一闸昨、第九天 我趴在偏房一處隱蔽的房頂上張望蚯斯。 院中可真熱鬧,春花似錦饵较、人聲如沸拍嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽横辆。三九已至,卻和暖如春茄猫,著一層夾襖步出監(jiān)牢的瞬間狈蚤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工划纽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脆侮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓勇劣,卻偏偏與公主長得像靖避,于是被迫代替她去往敵國和親潭枣。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容