閱讀1009 返回首頁    go 小米 go 小米智能家庭


綠米協議的一些發現與AES

按照網上的教程,在網內廣播

IP:224.0.0.50

端口:4321

命令:{"cmd":"who"}

卻什麼都收不到,直接發送給網關IP也無效,

直接用

{"cmd":"get_id_list"}發送到網關的IP,9898端口,也毫無反應

用嗅探軟件一查看發現,網關回複的端口是本機的發送端口,而網上大部分UDP測試工具隻能自定義監聽端口,卻無法指定發送端口。。而且發現網關廣播的地址是224.0.0.251而不是224.0.0.50,本機發送給224.0.0.50網關不回複任何消息

沒辦法,自己寫了一個UDP測試工具,一切都正常,本來挺順利的

後來研究到write子設備的時候,發現總是報錯,後來問一個同樣對綠米協議感興趣的朋友,才知道是密碼錯了

可憐心大的我以為密碼就是在網關中設置的密碼,後來仔細一看才發現,密碼的加密方式是AES-CBC,網關中的隻是密鑰而非密碼

後來又在論壇和GitHub搜索了一圈,發現都是針對HomeKit的JS代碼,

可惜我看不懂啊,沒辦法,還得自己寫

今天終於成功了,所以把代碼與大家分享一下,希望會幫到你們

簡單說一下協議中加密相關字段的作用

{"cmd":"heartbeat","model":"gateway","sid":"1022780","short_id":0,"token":"1234567890abcdef","data":"{\"ip\":\"172.22.4.130\"}" }

其中,token後麵跟的1234567890abcdef實際為要進行加密的密碼

而網關中的密碼0987654321qwerty其實是對密碼進行加密的密鑰

網關AES-CBC-128加密向量IV是0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 0x56, 0x2e

以下內容被隱藏,回複本帖後可見


因為伸手黨,所以隱藏一下吧,勿怪

最後更新:2017-06-12 22:07:39

  上一篇:go 已經刪除的zigbee版智能插座定時還會執行!
  下一篇:go 如何實現:早上7:00自動打開小米電視,自動播放音樂?