Android备份文件,还不是十分的了解,在此做个记录。
Android备份文件,其实就是一个tar包,只不过是比tar包多了一些头文件。tar包是直接文件名做头,而Android备份文件则加了一层ANDROID BACKUP开头到none结束的一段头。
这边只针对未加密过的Android备份文件做操作。
一般的Android备份文件的文件头都是 ANDROID BACKUP\n3\n1\nnone
小米的 MIUI BACKUP\nxxx(文件名)\n-1\n0\nANDROID BACKUP\n3\n1\nnone
就是添加了MIUI BACKUP\nxxx(文件名)\n这一段
即匹配头信息,再读换行符,当匹配到的字符串为none,即为Android备份文件
我是直接将字节数组转为string,然后进行匹配的
go语言实现:
// 返回的byte为去除了android备份文件头的byte
func isAndroidBackupHeader(buf []byte) (bool, []byte) {
str := string(buf)
if strings.HasPrefix(strings.ToUpper(str), "MIUI BACKUP") || strings.HasPrefix(strings.ToUpper(str), "ANDROID BACKUP") {
for {
n := strings.IndexByte(str, '\n')
if n < 0 {
return false, buf
}
if str[:n] == "none" {
return true, []byte(str[n+1:])
}
str = str[n+1:]
}
}
return false, buf
}