绿米协议的一些发现与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