因为很多原因需要备份/导出手机QQ的聊天记录。最近因为腾讯推出了TIM,大部分用户转用TIM,在手机上几年的聊天记录很难转移,因为腾讯不开放聊天记录转移的方案。
最近在酷安网看到一个 “
QQ聊天记录导出” 和“
微信聊天记录导出”的软件,看了一下他备份的包就是普通的zip备份了QQ应用数据的databases文件夹。(/data/data/com.tencent.mobileqq/databases)。
针对这个软件不做过多评价。软件有一个缺陷,就是备份时候没有备份数据库聊天记录的密钥,在更换新手机或者手机修改、重置(重写)IMEI/MEID时候备份的数据库再还原就失效了,没有正确的密钥是无法解密聊天记录的(备份的聊天记录也就无法再还原了)。
对于大部分的品牌机,可以选择使用系统自带的备份还原/新旧手机同步功能来同步QQ的应用数据。(也可以使用钛备份来实现备份还原)。
有条件使用钛备份和系统自带备份还原的可以止步于此。
本文主要目的是针对以下 几种情况:
1、应用双开数据(小米应用双开)
2、手机分身的数据备份、迁移
3、QQ数据迁移到Tim
这些数据都无法通过品牌机自带的备份还原功能(钛备份也无法实现)实现备份还原的。
其实在2017的时候,我因为换手机小米双开应用的QQ数据需要备份而研究过QQ应用的数据文件。有兴趣的可以参考一下:
http://bbs.ydss.cn/thread-1033912-1-1.html
(
这篇文章最后没有写关闭selinux,因为我当时手机默认是
Permissive 权限
)
闲话说了不少,我们来说一下QQ数据该如何备份吧。
首先以下操作手机需要先
ROOT,没有ROOT一切都是白话。甚至需要修改boot.img再重新刷入。本人只做方案描述,由于操作引起的任何后果概与本人无关。数据无价,操作之前最好备份数据(系统自带备份功能或者TWRP备份整个data分区)。
一、需要备份的文件
针对手机QQ/TIM(和qq一模一样)数据文件的分析过程就不赘述了,我直接说我的成果。
在/data/data/com.tencent.mobileqq目录下存放着手机QQ的数据文件,目子目录比较多,包括腾讯的聊天气泡、表情包、qq空间、VIP等杂七杂八的东西,大部分目录都是没有什么作用的,删除后会自动生成。
其中有用的目录有三个:
databases QQ聊天记录数据库(qq号码.db)
files QQ登录鉴权信息 和 数据库密钥文件
imei
和
kc
两个文件是
密钥文件
share_prefs 没仔细看,有聊天气泡之类的资源,最好一起备份
还有
cert、
config、两个目录不知道干什么的,也可以一起备份。
(我是整个/data/data/com.tencent.mobileqq目录一起备份还原,这样聊天图片、语音什么都还在。如果只是做QQ迁移TIM建议不要全部备份,只备份上述几个文件夹就行,有时候需要适当的删除多余的文件,可以自行对比QQ和TIM的数据目录差异,因为新版本的TIM和QQ已经有不少差异了。)
二、备份方法
大家都知道在android4.4以及之前的系统备份应用数据很简单,直接用一些手机助手备份就OK,但是现在这样备份却无效了,原因是在android5.1之后系统加入了SELinux权限,有兴趣的可以自行百度。
大家都知道在windows上数据文件备份还原只需要复制一份替换就OK了,但是在android中这样是不行的,android底层是linux系统,其中涉及到的权限问题包括:
1、普通的读写权限 常见的 -rw -r-r
2、文件所有者 root system u0_125等等
3、SElinux上下文权限
备份除了需要备份文件本身之外,还需要备份文件权限、selinux权限。还原的时候需要修改应用数据的所有者
(不同手机的同一个应用所有者不同)。
对于如何备份selinux的权限上下文我也不是很清楚,我反正没备份,直接
关闭
的
selinux权限
。
如果手机
不支持tar命令
,请先安装
busybox
,自行百度。
我是直接用root权限执行tar备份的,命令如下:
cd /data/data/com.tencent.mobileqq
//进入QQ的数据目录 微信改成 com.tencent.mm就行,其他应用自己去获取包名
tar cvpzf /sdcard/backups/com.tencent.mobileqq.tgz *
//tar备份QQ数据到sd卡
这样就备份QQ双开数据到/sdcard/backups/com.tencent.mobileqq.tgz 这个压缩包文件了采用的gzip压缩,且完整的备份了文件的权限。
三、还原方法
将备份文件复制到你要还原新手机的
/sdcard/backups
目录
//进入QQ应用数据目录
cd /data/data/com.tencent.mobileqq
ls -l //查看应用所有者
结果如下:
应用所有者为
u999_a118
,不同手机的所有者不同,
请自行查看
!!!!
//解压缩备份数据到QQ数据包
tar xvpzf /sdcard/backups/com.tencent.mobileqq.tgz -C
/data/data/com.tencent.mobileqq/
//修改所有者
chown -R u999_a118:u999_a118 /data/data/com.tencent.mobileqq
到了这里。如果直接打开QQ,还是无法获取聊天记录的,因为现在手机默认都是开启了selinux,所以QQ没有权限获取数据。对于如何修复selinux权限,我也不是很清楚,建议是直接关闭selinux权限。
查看selinux权限状态命令:
getenforce
如果返回:
Enforcing 表示开启了selinux
如果返回:
Permissive 表示selinux不起作用
setenforce 0 //将selinux权限设置为Permissive
当selinux权限是Permissive 时候启动QQ这时候QQ就能正常启动,看到还原的聊天记录。
我是本机直接备份QQ数据还原到TIM,这样两个应用的数据是一样的,聊天记录完美~登录鉴权没过期,两个应用可以同时在线,可以同时接收消息(如果换个手机还原,那么两个手机可以同时收消息)。当然这个鉴权一天左右就会过期,到时候就有一个被踢下线了。
总结:
1、旧手机 tar备份QQ数据目录
2、新手机 ls -l /data/data/com.tencent.mobileqq 查看要还原的手机的,QQ应用的所有者
2、新手机 tar解压还原QQ数据目录
3、新手机 chown -R 修复QQ数据文件所有者为QQ应用
4、新手机 关闭selinux权限
5、启动QQ即可
针对QQ聊天记录转移到TIM,在备份完毕后把还原解压目录改为Tim的目录/data/data/com.tencent.tim,其他照常执行就行了(新版本可能只需要保留databases和files两个文件夹,share_prefs需要删除里边部分文件,自己分析,其他文件夹可以不还原/可删除)。
本文关闭selinux是临时关闭,重启后会是失效,需要再次执行命令关闭selinux,如果要永久关闭selinux需要修改boot。也可以下载个app每次开机自动关闭selinux。
想自己研究导出聊天记录为文本的可以看一下参考来源。注意:参考文档页面涉及到一些推广的查看聊天记录软件,本人不做任何评价。自己去考量。
另外还可以将旧手机的聊天数据,导出直接写入到新手机的数据文件中,就像电脑上QQ数据导入一样,会编程的朋友可以自己研究下参考来源,解密旧手机QQ的sqlite数据库文件,再用新手机的密钥加密导入到新手机的sqlite数据库,将新的db复制到新手机,修改权限即可完成QQ数据的导入功能。
参考来源:
对于如何永久关闭selinux权限
MIUI8双开、分身、分身下的双开应用的数据位置
2016/01/13/手机QQ聊天记录破解/
用Python解密手机QQ聊天记录 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
QQ和微信聊天内容读取解密
安卓微信数据库解密