做了一个小项目,想导出小米手环的数据显示在上面Web网页,这里是一波旧的在线教程更新,也使用Python实现数据导出的自动化(从用户端的角度来看,原教程的交互模式不够优雅,但实际上整体上还是有一种的 tuo le 裤子放 p 感觉,想取证小米手环数据,或者喜欢捣乱的同学可以看看。此外,他们还可以从内部看到小米手环测量了我们身体的数据) 2022年7月1日亲测可行,欢迎私信,求赞
文章目录
- 一、准备工具
-
- 1.小米手环6
- 2.Zepp Life
- 3.Termux
- 4.Xshell Xftp
- 5.android-backup-extractor
- 6.C32Asm
- 7.DB Browser (SQLite)
- 8.Maven
- 二、具体步骤
-
- 1.提前声明
- 2.备份文件
- 3.配置好Termux
- 4.Paramiko库
- 5.解压下载tar.gz文件(解出bak文件)
- 6.bak文件的重构
- 7.bak文件解包
- 8.读取数据库
- 总结
- 参考案例
提示:以下是本文的文本内容,读者可根据需要选择是否尝试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
官网 https://maven.apache.org/
二、具体步骤
1.提前声明
提前声明,蓝色字也适用于非自动化步骤(也可以完成整个过程),这里只提供一个自动化的例子,很容易理解,绿色字都指向一个链接---->小米手镯数据自动导出工具。
2.备份文件
小米手机 设置 --> 更多设置 --> 备份与恢复 ,找到“Zepp Life备份,备份文件出现在这条路径下,然后可以直接用数据线连接电脑bak取出文件解包(下一个蓝色字出现在第六条),然而,作者发现这样的操作对用户来说真的很麻烦,也不优雅,所以他提出了一个自动解决方案,将这些过程交给后端。
/storage/emulated/0/MIUI/backup/AllBackup
3.配置好Termux
这里建议把链接中整个教程从头到尾仔细查看,配置好你的国内镜像源,下载好nmap、openssh等包,这里为了方便没有公钥私钥配对,直接输入账号密码termux-setup-storage获得手机权限后,我们发现我们在这里需要的交互方式正好是国光所说的较少的应用场景,电脑ssh连接手机Termux
启动ssh后,在Termux中用whoami查看自己的用户名,ifconfig查看hostname,passwd更改密码(必须记住),默认端口8022Xshell连接手机打字更方便,获得手机存储权限后,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工具将bak16进制打开文件 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% 2% 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就能放入数据库和前端进行交互啦!!!!
参考案例
MizarTian 小米运动手环数据导出 我非码农 小米运动睡眠数据导出并分析(python)