捣鼓小米手环,做了个小项目,想导出小米手环的数据显示在Web网页,这里对网上老旧教程进行一波更新换代,还利用Python实现数据导出的自动化(从用户端的角度考虑,原来的教程其交互模式不够优雅,但事实上整体做下来还是有种 tuo le 裤子放 p 的感觉,想进行小米手环数据取证,或者喜欢瞎捣鼓的同学可以看看,另外,还能从内部看看小米手环到底测量了我们身体的哪些数据) 2022年7月1日亲测可行,欢迎私信,求赞
文章目录
提示:以下是本篇文章正文内容,读者可以根据需要自行选择是否尝试python自动化过程
一、工具准备
1.小米手环6
这里我测试用的是小米手环6,7也无所谓,与手环版本无关
2.Zepp Life
一台能下载《Zepp Life》原“小米运动”软件的手机,测试用小米手机K50,提前已经进行过配对,软件里面有好多天的数据
3.Termux
手机安装Termux软件(下载及使用方法见国光教程https://www.sqlsec.com/2018/05/termux.html#toc-heading-1)
4.Xshell Xftp
默认大家安好了
5.android-backup-extractor
android备份文件解包的开源工具(下载及使用方法见链接,后文会对一些出现的问题进行具体讲解 https://github.com/nelenkov/android-backup-extractor)
6.C32Asm
能以16进制打开文件,这个csdn很多资源,实在不想花积分就私信我吧
7.DB Browser (SQLite)
资源很多
8.Maven
二、具体步骤
1.提前声明
提前声明,蓝色字是同样适用于非自动化(同样能完成整个过程)的步骤,这里只不过提供一种自动化的示例,均非常容易理解,绿色字全部指向一个链接---->小米手环数据自动化导出工具。
2.备份文件
在小米手机的 设置 --> 更多设置 --> 备份与恢复 ,找到“Zepp Life”进行备份,备份后的文件出现在这个路径下,之后可以直接拿数据线连接电脑把bak文件脱出来进行解包(下一条蓝色字出现在第6条),但是作者发现这样的操作对于用户来说实在麻烦而且并不优雅,所以下面提出一种自动化解决方案,把这些过程交给后端来做。
/storage/emulated/0/MIUI/backup/AllBackup
3.配置好Termux
这里建议把链接中整个教程从头到尾仔细查看,配置好你的国内镜像源,下载好nmap、openssh等包,这里为了方便没有以公钥私钥进行配对,直接账号密码就行,输入termux-setup-storage
获取手机权限,配置好之后我们发现这里我们需要的交互方式正好是国光大大所说较少的应用场景,电脑ssh连接手机Termux
启动ssh后,在Termux中用whoami
查看自己的用户名,ifconfig
查看hostname,passwd
更改密码(一定记住),默认端口8022,可以用Xshell连接手机敲字比较方便,获取手机存储权限后,tree
一下发现软连接已经建立好这里我们关心 /storage/emulated/0/MIUI/backup/AllBackup 这个目录下的东西(映射关系如下,其实在 shared/MIUI/backup/AllBackup 里面,用Xftp打开看一下就明白了)
4.Paramiko库
根据需求我们找到了Python的一个库paramiko,能创建一个sftp连接从手机上下载文件,但不可以是文件夹,所以我们先将其压缩,见代码 sftp_get_bak.py
,这里我找了一个demo直接改(忘了从哪里找的),把那些路径也都设置成自己的,对照打印信息debug就行,代码见链接。
5.解压下载的tar.gz文件(解出bak文件)
之后就需要把这个下载下来的tar.gz解压,继续调库就行,unzip_targz.py
,代码不用改,直接运行,代码见链接。
6.bak文件的重构
对解压出来的bak文件进行处理,我用C32Asm工具将bak文件用16进制打开,将 ANDROID BACKUP 前面的全部删除,去除掉小米app特异性的前缀,这里的Python代码比较简陋,暂时没发现比较好的操作,见 recreate_bak.py
7.bak文件解包
接下来就需要用到 android-backup-extractor 了,首先到官网下载整个项目代码,我们这里按照官网最简单的教程,使用 maven ,生成 abe.jar 包,mvn -v
测试 maven 是否下载好,然后在整个文件夹下执行 shell 命令 mvn clean package
,我们会发现新生成了一个target文件夹,我们把 abe.jar 从里面拖出来进行使用,这里我们采用 Python 的 subprocess 库来执行 shell 命令并给出输出或报错,执行shell命令 java -jar abe.jar unpack ZeppRe.bak testopenbak71.tar
,见代码 open_bak.py
。
PS C:\Users\17588\Documents\CSDN博客> python -u "c:\Users\17588\Documents\CSDN博客\open_bak.py"
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99% 100%
149734912 bytes written to testopenbak71.tar.
成功解bak输出如上
8.数据库读取
解包之后我们解压文件得到 apps 文件夹,里面的 apps/com.xiaomi.hm.health/db 数据库文件用sqlite3工具打开即可,这里采用 DB Browser(SQLite)如图左上角路径
代码见 date_data_extraction.py
和 AllDayStress_extraction.py
总结
处理的数据可以保存为csv就能放入数据库和前端进行交互啦!!!!