百摩网
当前位置: 首页 生活百科

小米手环2连上手机不能使用(小米手环2传输协议被破解)

时间:2023-05-23 作者: 小编 阅读量: 5 栏目名: 生活百科

那代码可以连接到手环,发布通知,并获取一次拍摄心脏测量。其中一些更复杂并且通过请求/通知循环工作,例如实时心率监视器和授权。现在打开开发设置并找到"启用BleutoothHCIsnooplog"并启用它。这是当前时间的设备的响应找到合适的数据包和编码可能需要一些时间。

本文笔者翻译自hacker博客,原文地址(略)

这个故事源于我在Facebook一个帖子,帖子中讨论了运动健身追踪器都缺乏API接口的问题,还有为啥不用它帮助数据专家为做一个炫酷的东西。

帖子发出之后,我的好基友Volodymyr Shymanskyy就响应来帮助我,并在github上找了Leo Soares项目,为我的健身追踪器小米手环2找了一些代码。他尝试运行它,但是连接出现了一些链接问题,所以他花了几个小时修复了他。之后,他提交了个commit,并给了我链接。

那满足了我的初步需求,已经相当OK了。那代码可以连接到手环,发布通知,并获取一次拍摄心脏测量。但这对我来说还有点不够,因为我想从传感器获得实时原始数据,以便在我的数据科学实验中使用(想要做一个健身运动预测器)。

正文才开始......

在此之前,我没有任何使用蓝牙设备的经验,所以首先我试着了解了所有这些东西是如何组织和工作的。事实证明,也没啥难得。

每个蓝牙设备都会启动几个的服务,每个服务都有特征,并且一些特征具有描述符(如果特征有多个参数或工作类型(阅读|通知))。某些特性只有读/写访问权限,比如当前时间,电池状态或修订信息。其中一些更复杂并且通过请求/通知循环工作,例如实时心率监视器和授权。基本上,你需要知道这一切的,才能开始使用它。

您还需要两个应用程序来帮助调试蓝牙设备:Wireshark和BLE debugger。你还需要需要访问安卓手机开发者选项(对不起,对于iOS家伙我还不知道如何做到这点)。

首先,您需要从手机应用程序中取消小米手环2的配对。

现在让我们看看手环有什么服务和特征。让我们打开BLE debugger,开始扫描,你会看到类似这样的东西:

将设备的MAC地址保存下,后续操作会用到它。

现在让我们连接上它,看看它跑了什么服务和特征。

以上两个简单的操作中,我们已经获得了一些有用的设备信息。

另一种方法是使用控制台工具hcitool和gatttool。

Scan:

sudo hcitool lescan

连接并获取服务和描述符:

sudo gatttool -b YOUR_MAC -I -t random

> connect

> primary

> Char-Desc

在某些情况下,BLE栈可能会出现故障,您可以打开/关闭蓝牙或运行以下命令:

sudo hciconfig hci0 reset

数据嗅探

为了我们的手机<->基带通信中嗅探数据,我们需要启用蓝牙在开发设置记录日志。要做到这一点,您需要先打开安卓手机上的开发人员设置。

以下是操作的详细步骤:

在Android 4.1及更低版本上,开发者选项屏幕默认可用。在Android 4.2及更高版本中,您必须按如下所示启用此屏幕:

1.打开手机设置

2.(仅适用于Android 8.0或更高版本)选择系统

3.滚动到底部并选择关于手机

4.滚动到底部并点击Build number 7次。

5.返回到上一屏幕以查找底部附近的开发人员选项

现在打开开发设置并找到"启用Bleutooth HCI snoop log"并启用它。这样,所有蓝牙通信都会被被记录。然后你需要找到名为btsnoop_hci.log的文件(在我手机中(Android 7.0)它位于/mtklog/btlog/btsnoop_hci.log)

认证

现在我们还要要执行一下步骤来获取有关认证(配对)如何工作的一些信息。

1.打开蓝牙和HCI日志。

2.将您的设备与小米安卓程序配对。

3.关闭蓝牙。

4. 下载btsnoop_hci.log到你的电脑。

5.用Wireshark打开它。

6.找到第一个处理0x0055的ATT协议请求

你会看到如图的界面:

这是验证步骤:

配对设备

主要服务UUID

0000fee1-0000&ndash;1000&ndash;8000&ndash;00805f9b34fb

认证特征 (Char) UUID

00000009&ndash;0000&ndash;3512&ndash;2118&ndash;0009af100700

通知描述符 (Des) 处理

0x2902 (所有的过程都一样)

1.通过向Des发送2个字节请求 \x01\x00来设置auth通知(以获得响应)。

2.用命令将16字节的加密密钥发送给Char,并附加2字节\x01\x00KEY

3.通过发送2个字节\x02\x00到Char来向设备请求带有命令的随机密钥。

4.从设备响应中获取随机密钥(最后的16个字节)。

5.使用我们的16字节密钥,用AES/ECB/ NoPadding(来自Crypto.Cipher import AES)对此随机数进行加密,并将其发送回Char(\x03\x00 编码数据

认证

1.通过发送2个字节\x02 \x00到Char来向设备请求带有命令的随机密钥。

2.从设备响应中获取随机密钥(最后16个字节)。

3.使用我们的16字节密钥和使用AES / ECB / NoPadding(来自Crypto.Cipher import AES)对此随机数进行加密,并将其发送回Char(\ x03 \ x00编码数据)

实时数据

这在认证过程中稍微复杂一些,因为我没有看到在这个过程中犯了一个错误:)并且因为这个心率监视器在15秒后关闭。

硬件服务(HRDW)UUID

0000fee0-0000-1000-8000-00805f9b34fb

心脏监护仪服务(HMS)UUID

0000180d-0000-1000-8000-00805f9b34fb

心率测量特征(HRM)UUID

00002a37-0000-1000-8000-00805f9b34fb

心脏监护仪控制特性(HMC)UUID

00002a39-0000-1000-8000-00805f9b34fb

传感器特性(SENS)UUID

00000001-0000-3512-2118-0009af100700

通知描述符(DES)句柄

0x2902(所有过程都一样)

1.关闭当前监听的测量。

2. 通过向HMC发送请求\x15\x02\x00进行一次性测量。

3. 通过向HMC发送请求\x15\x01\x00进行连续测量。

4.通过向SENS发送命令到\x01\x03\x19来启用陀螺仪和心脏原始数据

5.通过向HRM写入DES \x01\ x00启用通知

6.通过向HMC发送请求\x15\x01\x01来启动连续的心脏测量

7.发送命令到SENS \x02(不知道为什么需要这指令)

8.然后,在每12秒收到一次通知时,需要将\x16 ping发送到HCM

解析数据

这是最枯燥部分,因为基本上你需要找出如何解包来自设备的打包数据。

它的一部分可以从日志中解析出来,有些不能。

这是当前时间的设备的响应

找到合适的数据包和编码可能需要一些时间。就我的例子而言,我需要找到相邻的数据包中相似的字节出现次数,有些重复的数据包。

Raw heart: 02102d8c348c448c458c3d8c428c488c 16

Raw heart: 0218468c418c3d8c468c3f8c398c418c 16

Realtime heart: 93

Raw heart: 0220408c448c3f8c428c498c3c8c3d8c 16

Raw heart: 02283d8c398c488c3e8c468c488c328c 16

Realtime heart: 99

Raw heart: 0230438c408c378c3a8c318c458c388c 16

Realtime heart: 102

Raw heart: 02404f8c408c458c428c4d8c558c4d8c 16

Raw heart: 02483e8c3b8c3f8c348c398c318c428c 16

Realtime heart: 98

Raw heart: 02504c8c428c5e8c4f8c588c498c558c 16

Raw heart: 0258478c458c3c8c4e8c3f8c468c4d8c 16

Realtime heart: 100

Raw heart: 0260518c4d8c4f8c4b8c4f8c528c458c 16

Raw heart: 0268408c3f8c538c4d8c408c548c598c 16

Realtime heart: 102

Raw heart: 0278418c508c4e8c548c588c468c498c 16

Raw heart: 0280368c328c2e8c3c8c338c308c3f8c 16

Realtime heart: 101

从中我们可以看到清晰的数据,重复368c 328c 2e8c 3c8c 338c 308c 3f8c,数据包长度为16字节。因此,如果我们用2个字节的无符号短数据解压缩,那么我们可以得到7个心脏传感器的原始测量结果。我们也看到第二个字节只是迭代,我认为它只是测量之间的时间差异(我指的是响应的时间差)

Raw gyro: 01de49ffd9ff3c004cffd8ff3b004dffdcff4400

Raw gyro: 01df4cffd6ff44004dffd8ff40004cffd1ff4700

Raw gyro: 02e1103231323d3274328e329632af32c732cf32

Raw gyro: 01e34fffd7ff56004bffc7ff590049ffccff4c00

Raw gyro: 01e443ffccff43004effcdff40005bffd4ff4c00

Raw gyro: 01e558ffc9ff5f005effbfff66005fffb0ff5900

Raw gyro: 01e64cffacff60005cffa7ff410066ffc9ff4600

Raw gyro: 01e760ffdcff4b0051ffe4ff4f0034ffdeff5300

Raw gyro: 02e903365c36813663361036543688374139fe3a

Raw gyro: 01eb4bffc3ff50004fffc1ff430047ffbbff4100

Raw gyro: 01ec3effb2ff3c0050ffbfff560047ffccff7300

Raw gyro: 01ed4fffe0ff78005cffebff8e0056fff6ff8300

Raw gyro: 01ee7efffbffa1008bff0f00bc00b1ff1900b800

Raw gyro: 01ef9bff0c00d10095fff3ffd600b7ff0800df00

Raw gyro: 02f12445314600479e473348aa481c499749244a

Raw gyro: 01f3c3ff1600fe00beff1800f200a6ff0800e700

Raw gyro: 01f4a9fff8ffd300a7fff3ffd700a9fff1ffdf00

Raw gyro: 01f5b1fff8ffe800b4fff1fff700acfffcffef00

Raw gyro: 01f67ffff7ffc0006bfff4ffb00078ffe9ffb600

Raw gyro: 01f786ffecffc0006ffff0ffbc0060fff1ffc000

Raw gyro: 02f9ca4cbb4c784c964ca84c784c854c444c1b4c

Raw gyro: 01fb7cff0f00bb007eff2700ae0083ff30009800

Raw gyro: 01fc79ff1800b00076ff0f00bc0068ff0900d900

Raw gyro: 01fd78ff07000c01f6fffbff19011c000b00f600

Raw gyro: 01fe4b001100d30054000700c3004300efffeb00

Raw gyro: 01ff1f00d0ff1701fbffe8ff1b01e3ffffff1101

Raw gyro: 0201214b014bec4ad04aba4acb4abe4aba4abd4a

Raw gyro: 0103efffecfffc00e3fff3fff300defff3fffc00

Raw gyro: 0104e3fff0fff400e6ffefff0301dbffe9ff0c01

Raw gyro: 0105e3fff0ff0301e6ffe6fffc00dcffecfffc00

Raw gyro: 0106dffff0fff700dbffeefff600d6fff0fff400

Raw gyro: 0107dfffecffff00e1fff0ff0301defff3fffc00

至于陀螺仪,就有点困难。但是我的想法是它应该与心脏数据类似的方式打包,但在这种情况下,我们对每个应该签名的陀螺仪轴进行3次测量,数据包长度为20个字节。因此,12 x,y,z测量不会覆盖所有包,但3将会保留前2个字节(与之前的包相同)。所以我这样试了,过不然工作是正常的。

代码

代码,你可以找到我的github仓库(creotiv/MiBand2)下载案例的代码。这很简单,老司机自己去搜索好了,在此就不多赘述。

    推荐阅读
  • 太阳能是双碳企业吗(双碳目标之下太阳能热利用行业能否二次腾飞)

    乘着家电下乡政策的东风,这个行业实现了自身发展的首次腾飞。集热器的年度销量在连年下跌后,已经回到2008年的规模水平。日出东方旗下的四季沐歌就是目前仍旧拥有稳定太阳能热水器单机零售渠道的头部品牌之一。《报告》显示,通过对山东、江苏、河北、云南、北京等地太阳能企业抽样调查得知,2020年工程市场占据了企业主营业务版块的74.3%。

  • 减掉10斤要消耗多少卡路里(减掉一公斤脂肪)

    医学减重专家陈伟今天正确的减重应该是减少脂肪组织内的脂肪,数据表明,减掉一公斤脂肪,一般需要消耗7000-10000千卡左右的能量。若每日减少500千卡能量摄入,则需14天减少1公斤;若每日减少1000千卡能量摄入,则需7天减去1公斤。若想通过增加活动量来达到同样的目的,则需要每天高强度锻炼至少1个小时,约能消耗掉500千卡。大家如果有减重方面的问题,想咨询陈伟教授,可以发邮件到邮箱,陈教授会定期为大家答疑解惑。

  • 红薯叶子有哪些禁忌(关于红薯叶子有哪些禁忌)

    红薯叶子有哪些禁忌体寒、肠胃不好的人要少吃红薯叶性凉,体寒、肠胃不好的人要少吃,不然的话可能会加重体寒的症状,增加胃肠道负担,给身体带来危害。避免和豆腐同食红薯叶中含有大量的草酸钙,而豆腐中含有生石灰,二者同食可能会生出草酸钙沉淀,形成一些不可溶解的结晶,造成结石,红薯叶尽量避免和豆腐同食。

  • 李白最美的相思诗(李白最美的一首相思诗)

    《三五七言》秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。在诗词中,秋夜怀人已经成为习俗。这首《三五七言》由两句三言、两句五言、两句七言组成,故名。《梅庵琴谱》叙述,后三联并非李白所作。有些诗集收录李白《三五七言》时,也只写了前三联。时至今日,我们已经无法考查出后三联是否是李白的真实作品。如果是李白所作,我们亦可窥见李白绵长的情思和高超的写作水平。

  • 和平精英巡查员有什么用(和平精英巡查员的是做什么的)

    和平精英巡查员有什么用?接下来我们就一起去了解一下吧!可以帮助官方检测报道的视频,根据检查的次数获得相应的检称号题,甚至解锁永久的视频巡查员奖励。这些好处仍然很吸引人,想要收集它们的玩家可以尝试提交它们。当成为巡查员以后,会有专属于巡查员的任务,完成他们以后,会获得奖励,每个赛季,都有每个赛季的巡查任务,以及赛季巡查的专属奖励。

  • 在海上感觉的句子(在海上的句子盘点)

    它并不凶猛,也不可怕。我躺在沙滩上,就像躺在摇篮里,又像躺在妈妈的怀里。看这海天一色的美景下,不少花花绿绿的小点以及欢快的呼喊声冲击这人们的视觉与听觉。这欢乐的人们在大海母亲的怀抱中多么自在,多么轻松。我用手轻轻的拍打着浪花,顽皮的浪花溅起了无数颗细小的水珠,溅在脸上凉丝丝的真是舒服。你看,这飞奔的浪花多像一个个淘气的小娃娃呀。

  • 影之诗最强攻略(每日影之诗咸鱼翻身)

    在很多对局中,仅凭佐伊便足以取胜。中期尽快使用凤凰的庭园或进化万花凤凰召唤庭园,并找机会在场上凑齐双庭园。没有以上牌的话,可以使用蜥蜴的吐息解场,或使用龙之传令、激奏佐伊。通常火神龙优先于嗔怒,因为嗔怒与庭园配合更好,也不干扰辉饰拿佐伊。龙铠战士的主战者效果能提供大量额外伤害,可以配合猎龙砍击等法术打出最高满血斩杀,应对安息的领域等减伤手段。对鬼留降诞的涸绝。

  • 王砚辉大人物经典片段(49岁反派专业户王砚辉)

    49岁反派专业户王砚辉现实题材电视剧《小欢喜》近日引发了不小的讨论,剧中实力派演员王砚辉和咏梅组成的区长一家是近年荧屏生活剧中很少见到的干部家庭如何才能把这个“区长老爸”演得像?在王砚辉看来,演干部也好,演父亲也好,无论演。

  • 福建正宗鱼丸的做法(大厨分享秘制鱼丸)

    福建正宗鱼丸的做法鱼肉大家都认识,它是我们餐桌上经常吃到的食物之一,它的营养价值非常高,有丰富的蛋白质,还有维生素等其他微量元素。2根鲢鱼尾,葱姜水,适量盐,适量鸡精,一大勺玉米淀粉,2个鸡蛋清,一勺猪油。

  • 重庆高考成绩查询时间是好久(重庆高考成绩查询时间一样吗)

    包括按规定可安排在提前批次录取的招生专业和计划。包括定向培养士官招生等有面试体检(体测)等特殊要求、航海类等艰苦专业及其他按规定可安排在提前批次录取的专科招生专业及计划,设置2个院校顺序志愿。除高职专科提前批以外的其他专科招生专业及计划,设置96个专业平行志愿。强基计划、香港高校独立招生、民族传统体育和运动训练专业单独招生、飞行技术招生等安排在普通类本科提前批A段前进行。