因為很多原因需要備份/導出手機QQ的聊天記錄。最近因為騰訊推出了TIM,大部分用戶(hù)轉用TIM,在手機上幾年的聊天記錄很難轉移,因為騰訊不開(kāi)放聊天記錄轉移的方案。
最近在酷安網(wǎng)看到一個(gè) “QQ聊天記錄導出” 和“微信聊天記錄導出”的軟件,看了一下他備份的包就是普通的zip備份了QQ應用數據的databases文件夾。(/data/data/com.tencent.mobileqq/databases)。
針對這個(gè)軟件不做過(guò)多評價(jià)。軟件有一個(gè)缺陷,就是備份時(shí)候沒(méi)有備份數據庫聊天記錄的密鑰,在更換新手機或者手機修改、重置(重寫(xiě))IMEI/MEID時(shí)候備份的數據庫再還原就失效了,沒(méi)有正確的密鑰是無(wú)法解密聊天記錄的(備份的聊天記錄也就無(wú)法再還原了)。
對于大部分的品牌機,可以選擇使用系統自帶的備份還原/新舊手機同步功能來(lái)同步QQ的應用數據。(也可以使用鈦備份來(lái)實(shí)現備份還原)。
有條件使用鈦備份和系統自帶備份還原的可以止步于此。
本文主要目的是針對以下 幾種情況:
1、應用雙開(kāi)數據(小米應用雙開(kāi))
2、手機分身的數據備份、遷移
3、QQ數據遷移到Tim
這些數據都無(wú)法通過(guò)品牌機自帶的備份還原功能(鈦備份也無(wú)法實(shí)現)實(shí)現備份還原的。
其實(shí)在2017的時(shí)候,我因為換手機小米雙開(kāi)應用的QQ數據需要備份而研究過(guò)QQ應用的數據文件。有興趣的可以參考一下:http://bbs.ydss.cn/thread-1033912-1-1.html (這篇文章最后沒(méi)有寫(xiě)關(guān)閉selinux,因為我當時(shí)手機默認是Permissive 權限)
閑話(huà)說(shuō)了不少,我們來(lái)說(shuō)一下QQ數據該如何備份吧。
首先以下操作手機需要先ROOT,沒(méi)有ROOT一切都是白話(huà)。甚至需要修改boot.img再重新刷入。本人只做方案描述,由于操作引起的任何后果概與本人無(wú)關(guān)。數據無(wú)價(jià),操作之前最好備份數據(系統自帶備份功能或者TWRP備份整個(gè)data分區)。
一、需要備份的文件
針對手機QQ/TIM(和qq一模一樣)數據文件的分析過(guò)程就不贅述了,我直接說(shuō)我的成果。
在/data/data/com.tencent.mobileqq目錄下存放著(zhù)手機QQ的數據文件,目子目錄比較多,包括騰訊的聊天氣泡、表情包、qq空間、VIP等雜七雜八的東西,大部分目錄都是沒(méi)有什么作用的,刪除后會(huì )自動(dòng)生成。
其中有用的目錄有三個(gè):
databases QQ聊天記錄數據庫(qq號碼.db)
files QQ登錄鑒權信息 和 數據庫密鑰文件 imei 和kc兩個(gè)文件是密鑰文件
share_prefs 沒(méi)仔細看,有聊天氣泡之類(lèi)的資源,最好一起備份
還有
cert、config、兩個(gè)目錄不知道干什么的,也可以一起備份。
(我是整個(gè)/data/data/com.tencent.mobileqq目錄一起備份還原,這樣聊天圖片、語(yǔ)音什么都還在。如果只是做QQ遷移TIM建議不要全部備份,只備份上述幾個(gè)文件夾就行,有時(shí)候需要適當的刪除多余的文件,可以自行對比QQ和TIM的數據目錄差異,因為新版本的TIM和QQ已經(jīng)有不少差異了。)

二、備份方法
大家都知道在android4.4以及之前的系統備份應用數據很簡(jiǎn)單,直接用一些手機助手備份就OK,但是現在這樣備份卻無(wú)效了,原因是在android5.1之后系統加入了SELinux權限,有興趣的可以自行百度。
大家都知道在windows上數據文件備份還原只需要復制一份替換就OK了,但是在android中這樣是不行的,android底層是linux系統,其中涉及到的權限問(wèn)題包括:
1、普通的讀寫(xiě)權限 常見(jiàn)的 -rw -r-r
2、文件所有者 root system u0_125等等
3、SElinux上下文權限
備份除了需要備份文件本身之外,還需要備份文件權限、selinux權限。還原的時(shí)候需要修改應用數據的所有者(不同手機的同一個(gè)應用所有者不同)。
對于如何備份selinux的權限上下文我也不是很清楚,我反正沒(méi)備份,直接關(guān)閉的selinux權限。
如果手機不支持tar命令,請先安裝busybox,自行百度。
我是直接用root權限執行tar備份的,命令如下:
cd /data/data/com.tencent.mobileqq //進(jìn)入QQ的數據目錄 微信改成 com.tencent.mm就行,其他應用自己去獲取包名
tar cvpzf /sdcard/backups/com.tencent.mobileqq.tgz * //tar備份QQ數據到sd卡
這樣就備份QQ雙開(kāi)數據到/sdcard/backups/com.tencent.mobileqq.tgz 這個(gè)壓縮包文件了采用的gzip壓縮,且完整的備份了文件的權限。
三、還原方法
將備份文件復制到你要還原新手機的/sdcard/backups 目錄
//進(jìn)入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

到了這里。如果直接打開(kāi)QQ,還是無(wú)法獲取聊天記錄的,因為現在手機默認都是開(kāi)啟了selinux,所以QQ沒(méi)有權限獲取數據。對于如何修復selinux權限,我也不是很清楚,建議是直接關(guān)閉selinux權限。

查看selinux權限狀態(tài)命令:
getenforce
如果返回:Enforcing 表示開(kāi)啟了selinux
如果返回:Permissive 表示selinux不起作用
setenforce 0 //將selinux權限設置為Permissive

當selinux權限是Permissive 時(shí)候啟動(dòng)QQ這時(shí)候QQ就能正常啟動(dòng),看到還原的聊天記錄。


我是本機直接備份QQ數據還原到TIM,這樣兩個(gè)應用的數據是一樣的,聊天記錄完美~登錄鑒權沒(méi)過(guò)期,兩個(gè)應用可以同時(shí)在線(xiàn),可以同時(shí)接收消息(如果換個(gè)手機還原,那么兩個(gè)手機可以同時(shí)收消息)。當然這個(gè)鑒權一天左右就會(huì )過(guò)期,到時(shí)候就有一個(gè)被踢下線(xiàn)了。
總結:
1、舊手機 tar備份QQ數據目錄
2、新手機 ls -l /data/data/com.tencent.mobileqq 查看要還原的手機的,QQ應用的所有者
2、新手機 tar解壓還原QQ數據目錄
3、新手機 chown -R 修復QQ數據文件所有者為QQ應用
4、新手機 關(guān)閉selinux權限
5、啟動(dòng)QQ即可
針對QQ聊天記錄轉移到TIM,在備份完畢后把還原解壓目錄改為T(mén)im的目錄/data/data/com.tencent.tim,其他照常執行就行了(新版本可能只需要保留databases和files兩個(gè)文件夾,share_prefs需要刪除里邊部分文件,自己分析,其他文件夾可以不還原/可刪除)。
想自己研究導出聊天記錄為文本的可以看一下參考來(lái)源。注意:參考文檔頁(yè)面涉及到一些推廣的查看聊天記錄軟件,本人不做任何評價(jià)。自己去考量。
另外還可以將舊手機的聊天數據,導出直接寫(xiě)入到新手機的數據文件中,就像電腦上QQ數據導入一樣,會(huì )編程的朋友可以自己研究下參考來(lái)源,解密舊手機QQ的sqlite數據庫文件,再用新手機的密鑰加密導入到新手機的sqlite數據庫,將新的db復制到新手機,修改權限即可完成QQ數據的導入功能。
參考來(lái)源:
對于如何永久關(guān)閉selinux權限
http://www.miui.com/thread-9137678-1-1.html
MIUI8雙開(kāi)、分身、分身下的雙開(kāi)應用的數據位置
http://www.miui.com/thread-4295910-1-1.html
2016/01/13/手機QQ聊天記錄破解/
用Python解密手機QQ聊天記錄 - FreeBuf互聯(lián)網(wǎng)安全新媒體平臺 | 關(guān)注黑客與極客
http://www.freebuf.com/articles/terminal/68224.html
QQ和微信聊天內容讀取解密
http://www.fenlog.com/post/75.html
安卓微信數據庫解密
聯(lián)系客服