『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: XCray

[修仙教程] 【ESPHome】ESP32 DIY通用蓝牙网关,接入米家系门锁等各种设备

  [复制链接]

0

主题

22

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
122
HASS币
0
发表于 2021-5-14 11:22:32 | 显示全部楼层
我核对了一下 Frame Control 字段定义,发现 MAC地址 在第5位,也就是 10 那里不代表 MAC 地址,1代表该包加密。

我今天又重新抓了包试一下,结果发现两次抓包的数据不一致,两次的数据如下:

Service Data: 10441a03 26 35d931647ed1
Service Data: 48441a03 29 f594ca47a31462d52b2b280314c0b7
前半段和上一次的很像,应该属于同一个协议,到序号后面就明显不一样了。

另外对米家APP进行用户添加密码操作,发现下面这个值正好是 16字节,这个应该是对应的用户密码信息,需要AES128解密。
Value: 010c0077986ceaa27056

屏幕截图 2021-05-14 110026.png
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11435
金钱
8504
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-14 12:08:21 | 显示全部楼层
ruan_yhang 发表于 2021-5-14 11:22
我核对了一下 Frame Control 字段定义,发现 MAC地址 在第5位,也就是 10 那里不代表 MAC 地址,1代表该包 ...

是的,有加密的,有不加密的,你得通过加密标志位区分。

协议都是BLE MiBeacon,这点毫无疑问。

现在需要弄明白的是加了密的object字段如何解密。
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11435
金钱
8504
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-14 19:35:36 | 显示全部楼层
neroxps 发表于 2021-5-2 21:39
据大佬说蓝牙是自带 AES-128 硬件加解密,key是临时的,根据米家服务器下发的 token 来生成,也就是说,抓 ...

关键还是这个key!

token可以获取到,但如何生成key就不知道了,这玩意儿差一个bit也不好使
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2021-5-14 22:46:35 | 显示全部楼层
XCray 发表于 2021-5-14 19:35
关键还是这个key!

token可以获取到,但如何生成key就不知道了,这玩意儿差一个bit也不好使 ...

emmm 得逆向才知道了,估计是某种非对称加密~
Nero
回复

使用道具 举报

1

主题

77

帖子

980

积分

高级会员

Rank: 4

积分
980
金钱
903
HASS币
0
发表于 2021-5-20 16:14:04 | 显示全部楼层
看大佬讨论真精彩,期待能解决
回复

使用道具 举报

0

主题

22

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
122
HASS币
0
发表于 2021-5-29 17:12:00 | 显示全部楼层
1、门锁广播的字段有两种,包含Object的那一长串Service Data(24个字节)应该是加密的,而网关能够输出日志,说明网关有key且能够解析这些数字;
2、通过网关串口长时间接收日志,发现隔段时间能收到包含 门锁 token (12个字节)和 Benconkey(16个字节)的数据,应该云端传过来的,结果被网关打印出来了;
3、理论上搞清楚广播发出的数据Service Data哪一段是加密数据,就应该能进行AES128解密吧?
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11435
金钱
8504
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-29 17:23:58 | 显示全部楼层
ruan_yhang 发表于 2021-5-29 17:12
1、门锁广播的字段有两种,包含Object的那一长串Service Data(24个字节)应该是加密的,而网关能够输出日 ...

真的???这可是个大好消息!

1. 没错,我也是这么想的,很可能是解密后再用云端miio的方式加密传给服务器,当然也有可能网关不解密而是透传给服务器由服务器解密。

2. 能否给个完整的”包含 门锁 token (12个字节)和 Benconkey(16个字节)的数据“消息?我看怎么加到mqttl代码里去抓这个

至于第3条,我已经很清楚了。

如果真能从ttl获取到beaconkey,这事儿就差不多可以搞定了
回复

使用道具 举报

0

主题

22

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
122
HASS币
0
发表于 2021-5-29 17:31:20 | 显示全部楼层
本帖最后由 ruan_yhang 于 2021-5-29 17:53 编辑

说实话,我也是瞎蒙的才抓到的。受到2楼的启发,他说 key是临时的,根据米家服务器下发的 token 来生成,后面又说key会在本地保存一段时间。我就重置了门锁和网关,重新设置,结果里面就能收到门锁的 beaconkey。
屏幕截图 2021-05-29 174952.png
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11435
金钱
8504
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-29 18:32:38 | 显示全部楼层
本帖最后由 XCray 于 2021-5-29 18:38 编辑
ruan_yhang 发表于 2021-5-29 17:31
说实话,我也是瞎蒙的才抓到的。受到2楼的启发,他说 key是临时的,根据米家服务器下发的 token 来生成,后 ...

谢谢!我把程序改了,看看不重置的情况下能否从ttl抓到这条消息。

刚才特意翻了翻之前调试的时候留下来的消息记录,没找到。发往云端的 ”_sync.ble_query_dev“倒是有很多,但没看到回复的
回复

使用道具 举报

0

主题

22

帖子

144

积分

注册会员

Rank: 2

积分
144
金钱
122
HASS币
0
发表于 2021-5-29 19:01:00 | 显示全部楼层
XCray 发表于 2021-5-29 18:32
谢谢!我把程序改了,看看不重置的情况下能否从ttl抓到这条消息。

刚才特意翻了翻之前调试的时候留下来的 ...

蓝牙广播的数据,比如:48441a033c967e9fca5654edb6d67617d932a539262e30ac 一共24个字节,前面4个48 44 1a 03 能够从米家iBeacon协议里面推出来。后面还剩20个字节,如果是AES解密的,应该128bit才对。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-19 18:01 , Processed in 0.056477 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表