抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

最近整了个小米手环玩玩, 想着让自己重视一下时间管理…于是我又开始往奇怪的方向探索了

配对

咱的想法是在笔记本上直接和小米手环进行配对, 以便于更方便的探究其中的奥秘

获取 Auth Key

在与手环设备进行通讯之前, 得先通过正确的 Auth Key 才能正确验证

验证的步骤大致如下:

1
2
3
4
1. 向小米手环请求一个随机数。
2. 接收到随机数后,使用该手环的 `Auth Key` 对随机数进行 `AES` 对称加密。
3. 将加密后的信息发回给手环。
4. 验证通过。

在获取之前你需要先在手机软件上和手环进行配对, 以下我例举几种获取 Auth Key 方法

该 Auth Key 在设备恢复出产设置后才会改变, 因此一般来说我们拿到过一次记下来即可

未root的安卓设备

可以通过安装 freemyband 魔改过的各类手环app配对后, 再根据页面引导获取

已root的安卓设备(以小米健康为例)

1
$ sqlite3 /data/data/com.xiaomi.hm.health/databases/origin_db_[YOURDBNAMEHERE] "select AUTHKEY from DEVICE"

已越狱的IOS设备(以小米健康为例)

1
2
$ cd /var/mobile/Containers/Data/Application/<MiFit_App_UUID>/Documents/
$ sqlite3 HMDBDeviceInfoDataBaseV2.sqlite # 在 device_info 表的 deviceOAuthKey

扫描BLE设备

在安装了 Linux 下的主流蓝牙协议栈的实现Bluez后, 咱还需要装上AUR里的bluez-utils-compat

因为它提供了一些咱需要用到的蓝牙工具

1
2
3
4
5
6
7
8
9
10
11
hciconfig 配置hci连接
hcitool 进行扫描、查找设备、连接到设备、管理设备列表。设备可能是正常或低能耗模式。
gatttool 用于BLE设备管理
````

这里为了免root运行 `hcitool` 之类的工具还需运行以下命令
> [来源](https://bbs.archlinux.org/viewtopic.php?id=215080)

```bash
# setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
# setcap 'cap_net_raw,cap_net_admin+eip' `which hciconfig`

再通过

1
$ hcitool lescan

断开一下手机的连接, 扫描一下可见的低功耗蓝牙设备, 就可以见到俺的蓝牙手环了

1
2
3
4
5
# 内容已做处理
C1:0C:0A:02:XX:XX Mi Smart Band 6
10:71:8B:9F:XX:XX (unknown)
B0:45:02:2C:XX:XX (unknown)
10:71:8B:9F:XX:XX (unknown)

再将设备添加到白名单内(可选)

1
$ hcitool lewladd C1:0C:0A:02:XX:XX

接下来连接

1
$ hcitool lecc C1:0C:0A:02:XX:XX

如果连不上可以直接使用 bluetoothctl 尝试一下

qr8w5Q.md.jpg

连接上以后发现 upower 又成功向系统上报了手环电量!

协议探究

有空再继续研究吧~

参考

miband4

低功耗蓝牙攻击实用指南

Your Soul, Your Beats! —— 小米手环实时心率采集

评论