原文:broadlink smart home devices complete protocol hack
在smart home diy **上,有人研究如何將智慧型裝置加入自己的diy smart home hub上。第乙個新增就是broadlink裝置。作者最終實現的是用自己的**來控制博聯裝置。文章對broadlink的協議部分進行了介紹,並給出了控制裝置的node.js原始碼。
step1 配置和配對
長按reset按鈕,直到藍燈快閃。
這時出現了名為broadlinkprov的wifi熱點。這就是配置訪問點。
step2 逆向broadlink協議
broadlink使用的是quic udp協議進行互動。quic有兩個工作選項,public和not public。不同點在於訊息的第乙個位元組的第二個位元。
所有的訊息可以廣播傳送或傳送到指定ip位址。broadlink使用80端**互(應該是裝置埠是80)。
broadlink 訊息結構
當public bit被設定為0,也就是low public flag,訊息結構如下:
public flag : 0x00
public number: 0x00
payload
當public bit被設定為1,也就是high public flag,訊息結構如下:
public flag:0x5a( version:no, reset:yes, cid:0x2,packet #1, multipath:yes)
connection id:24113000182295205 (0xa5aa555aa5aa5500)
tag:0x00
tag id:0x00
padding:為0x00
payload(從第18個位元組開始)
broadlink訊息的頭部將緊跟quic的頭部,並有如下結構:
對於low public flag實際上是沒有broadlink頭部的。
對於high public flag,頭部資訊。
對於public訊息,整個broadlink頭部長度是56位元組。
bytes 32-33(0x20-0x23)總是整個訊息的checksum。對資料進行所有操作(包括加密)後進行計算。 通過使用0xbeaf的magic完成校驗和計算。
然後在位元組36-37(0x24)為裝置id。ipsum domus使用0x7d00,broadlink值如下:
0: 'sp1';
0x2711: 'sp2';
0x2719 or 0x7919 or 0x271a or 0x791a: 'honeywell sp2';
0x2720: 'spmini';
0x753e: 'sp3';
0x2728: 'spmini2';
0x2733 or 0x273e: 'spmini oem';
0x2736: 'spminiplus';
0x2712: 'rm2';
0x2737: 'rm mini';
0x273d: 'rm pro phicomm';
0x2783: 'rm2 home plus';
0x277c: 'rm2 home plus gdt';
0x272a: 'rm2 pro plus';
0x2787: 'rm2 pro plus2';
0x278b: 'rm2 pro plus bl';
0x278f: 'rm mini shate';
0x2714: 'a1';
0x4eb5: 'mp1';
>= 0x7530 and <= 0x7918: 'spmini2 oem';
在位元組38(0x26)是command,對應的request ids如下:
hello : [0x6]
discover : [0x1a]
join : [0x14]
auth : [0x65]
command : [0x6a]
而且相應的response ids:
hello : [0x7]
discover : [0x1b]
join : [0x15]
auth : [0x3e90]
command : [0x3ee]
還有一些額外的資訊域:
位元組40(0x28)共兩個位元組。這個值用來將請求與相應相關聯。
位元組42(0x2a)為裝置的mac位址,以小端格式存放。
位元組48(0x30)為device id
位元組52(0x34)為checksum。這個checksum的計算與整個訊息是一樣的,只不過它是針對payload的計算。
然後,如果要求加密,則加密整個payload,並把它加在頭部後面(在public high的情況下是從第57個位元組開始)。
資料加密是aes-128 cbc演算法,無padding。iv如下:
initial key: [0x09, 0x76, 0x28, 0x34, 0x3f, 0xe9, 0x9e, 0x23, 0x76, 0x5c, 0x15, 0x13, 0xac, 0xcf, 0x8b, 0x02]
initial vector: [0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58]
網路協議分析 VRRP協議分析
2 rip 2的報文格式 3 rip 2的驗證報文 三 例項化 rip報文由頭部 header 和多個路由表項 route entries 部分組成。乙個rip表項中最多可以有25個路由表項。rip是基於udp協議的,所以rip報文的資料報不能超過512個位元組。1 command 長度8bit,報...
網路協議分析 生成樹協議(STP)分析
lan資料鏈路層 例項化二層通訊協議,基本應用是防止交換機冗餘鏈路產生的環路.用於確保乙太網中無環路的邏輯拓撲結構.從而避免了廣播風暴,大量占用交換機的資源。網橋協議資料單元 bridge protocol data unit 是一種生成樹協議問候資料報,它可以配置的間隔發出,用來在網路的網橋間進行...
應用層協議分析 HTTPS協議分析
例項化secure socket layer ssl 俗稱安全套接層,是由netscape communitcation於1990年開發,用於保障word wide web www 通訊的安全。主要任務是提供私密性,資訊完整性和身份認證。1994年改版為sslv2,1995年改版為sslv3。tra...