阅读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自动打开小米电视,自动播放音乐?