引言
最近在做心率统计,数据源由小米运动健康提供,但是设备没有root,读取不到数据库文件,所以用这种投机的方法进行获取,并且同步到外部系统中。
备份
打开设置-我的设备-备份与恢复-手机备份恢复

选择小米运动健康,并且执行备份。
数据解析
最外层是zip格式,可以直接用zip格式进行解析。

打开之后会发现一个应用名称(包名称).bak文件,这里再用格式识别就不太准确了

看内容,他应该是自己的一种格式。

通过winrar强制打开的话,确实能看到一些数据,但是经过分析,它貌似是打开了其中apk文件,并不能找到数据备份,并且提示格式损坏。

如果使用7zFM打开,能够看到正确的归档数据,其中我们发现他是tar类型.

这时候如果使用tar进行解压是失败的,所以要移除它自定义的数据,简单描述一下,先解压开,然后通过tar进行压缩,对比一下就知道tar和bak差了哪些东西了,比较顺利,因为没有压缩,是仅归档的形式存储,不用重构文件偏移量那些数据,只需要知道自定义数据的偏移量即可。
只需要移除前面的备份文件特征头信息就好了。

这时候就可以用tar进行解压了。
自动化
- 解压zip
- 移除备份标识
- tar解压
- 找到db文件
- 解析db并且同步
可以使用termux进行自动化同步,其中移除标头可以用python这个代码
def remove_prefix(input_file, output_file):
with open(input_file, 'rb') as infile:
data = infile.read()
with open(output_file, 'wb') as outfile:
outfile.write(data[77:])
print(f"文件已提取并保存为 {output_file}")
结语
因为bak文件归档模式,很容易解析,并不需要计算偏移和解密,这也提供了一些便利。


评论 0
还没有评论,来说点什么吧。