小米备份文件解析,读取数据文件

引言

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

备份

打开设置-我的设备-备份与恢复-手机备份恢复
image.png
选择小米运动健康,并且执行备份。

数据解析

最外层是zip格式,可以直接用zip格式进行解析。
image.png

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

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

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

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

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

只需要移除前面的备份文件特征头信息就好了。
image.png

这时候就可以用tar进行解压了。

自动化

  1. 解压zip
  2. 移除备份标识
  3. tar解压
  4. 找到db文件
  5. 解析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

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

提交后需要审核才会公开。