因?yàn)楹芏嘣蛐枰獋浞?導(dǎo)出手機(jī)QQ的聊天記錄。最近因?yàn)轵v訊推出了TIM,大部分用戶轉(zhuǎn)用TIM,在手機(jī)上幾年的聊天記錄很難轉(zhuǎn)移,因?yàn)轵v訊不開放聊天記錄轉(zhuǎn)移的方案。 最近在酷安網(wǎng)看到一個(gè) “QQ聊天記錄導(dǎo)出” 和“微信聊天記錄導(dǎo)出”的軟件,看了一下他備份的包就是普通的zip備份了QQ應(yīng)用數(shù)據(jù)的databases文件夾。(/data/data/com.tencent.mobileqq/databases)。 針對這個(gè)軟件不做過多評價(jià)。軟件有一個(gè)缺陷,就是備份時(shí)候沒有備份數(shù)據(jù)庫聊天記錄的密鑰,在更換新手機(jī)或者手機(jī)修改、重置(重寫)IMEI/MEID時(shí)候備份的數(shù)據(jù)庫再還原就失效了,沒有正確的密鑰是無法解密聊天記錄的(備份的聊天記錄也就無法再還原了)。 對于大部分的品牌機(jī),可以選擇使用系統(tǒng)自帶的備份還原/新舊手機(jī)同步功能來同步QQ的應(yīng)用數(shù)據(jù)。(也可以使用鈦備份來實(shí)現(xiàn)備份還原)。 有條件使用鈦備份和系統(tǒng)自帶備份還原的可以止步于此。 本文主要目的是針對以下 幾種情況: 1、應(yīng)用雙開數(shù)據(jù)(小米應(yīng)用雙開) 2、手機(jī)分身的數(shù)據(jù)備份、遷移 3、QQ數(shù)據(jù)遷移到Tim 這些數(shù)據(jù)都無法通過品牌機(jī)自帶的備份還原功能(鈦備份也無法實(shí)現(xiàn))實(shí)現(xiàn)備份還原的。 其實(shí)在2017的時(shí)候,我因?yàn)閾Q手機(jī)小米雙開應(yīng)用的QQ數(shù)據(jù)需要備份而研究過QQ應(yīng)用的數(shù)據(jù)文件。有興趣的可以參考一下:http://bbs./thread-1033912-1-1.html (這篇文章最后沒有寫關(guān)閉selinux,因?yàn)槲耶?dāng)時(shí)手機(jī)默認(rèn)是Permissive 權(quán)限) 閑話說了不少,我們來說一下QQ數(shù)據(jù)該如何備份吧。 首先以下操作手機(jī)需要先ROOT,沒有ROOT一切都是白話。甚至需要修改boot.img再重新刷入。本人只做方案描述,由于操作引起的任何后果概與本人無關(guān)。數(shù)據(jù)無價(jià),操作之前最好備份數(shù)據(jù)(系統(tǒng)自帶備份功能或者TWRP備份整個(gè)data分區(qū))。 一、需要備份的文件 針對手機(jī)QQ/TIM(和qq一模一樣)數(shù)據(jù)文件的分析過程就不贅述了,我直接說我的成果。 在/data/data/com.tencent.mobileqq目錄下存放著手機(jī)QQ的數(shù)據(jù)文件,目子目錄比較多,包括騰訊的聊天氣泡、表情包、qq空間、VIP等雜七雜八的東西,大部分目錄都是沒有什么作用的,刪除后會自動生成。 其中有用的目錄有三個(gè): databases QQ聊天記錄數(shù)據(jù)庫(qq號碼.db) files QQ登錄鑒權(quán)信息 和 數(shù)據(jù)庫密鑰文件 imei 和kc兩個(gè)文件是密鑰文件 share_prefs 沒仔細(xì)看,有聊天氣泡之類的資源,最好一起備份 還有 cert、config、兩個(gè)目錄不知道干什么的,也可以一起備份。 (我是整個(gè)/data/data/com.tencent.mobileqq目錄一起備份還原,這樣聊天圖片、語音什么都還在。如果只是做QQ遷移TIM建議不要全部備份,只備份上述幾個(gè)文件夾就行,有時(shí)候需要適當(dāng)?shù)膭h除多余的文件,可以自行對比QQ和TIM的數(shù)據(jù)目錄差異,因?yàn)樾掳姹镜腡IM和QQ已經(jīng)有不少差異了。) 二、備份方法 大家都知道在android4.4以及之前的系統(tǒng)備份應(yīng)用數(shù)據(jù)很簡單,直接用一些手機(jī)助手備份就OK,但是現(xiàn)在這樣備份卻無效了,原因是在android5.1之后系統(tǒng)加入了SELinux權(quán)限,有興趣的可以自行百度。 大家都知道在windows上數(shù)據(jù)文件備份還原只需要復(fù)制一份替換就OK了,但是在android中這樣是不行的,android底層是linux系統(tǒng),其中涉及到的權(quán)限問題包括: 1、普通的讀寫權(quán)限 常見的 -rw -r-r 2、文件所有者 root system u0_125等等 3、SElinux上下文權(quán)限 備份除了需要備份文件本身之外,還需要備份文件權(quán)限、selinux權(quán)限。還原的時(shí)候需要修改應(yīng)用數(shù)據(jù)的所有者(不同手機(jī)的同一個(gè)應(yīng)用所有者不同)。 對于如何備份selinux的權(quán)限上下文我也不是很清楚,我反正沒備份,直接關(guān)閉的selinux權(quán)限。 如果手機(jī)不支持tar命令,請先安裝busybox,自行百度。 我是直接用root權(quán)限執(zhí)行tar備份的,命令如下: cd /data/data/com.tencent.mobileqq //進(jìn)入QQ的數(shù)據(jù)目錄 微信改成 com.tencent.mm就行,其他應(yīng)用自己去獲取包名 tar cvpzf /sdcard/backups/com.tencent.mobileqq.tgz * //tar備份QQ數(shù)據(jù)到sd卡 這樣就備份QQ雙開數(shù)據(jù)到/sdcard/backups/com.tencent.mobileqq.tgz 這個(gè)壓縮包文件了采用的gzip壓縮,且完整的備份了文件的權(quán)限。 三、還原方法 將備份文件復(fù)制到你要還原新手機(jī)的/sdcard/backups 目錄 //進(jìn)入QQ應(yīng)用數(shù)據(jù)目錄 cd /data/data/com.tencent.mobileqq ls -l //查看應(yīng)用所有者 結(jié)果如下: 應(yīng)用所有者為u999_a118,不同手機(jī)的所有者不同,請自行查看?。。?! //解壓縮備份數(shù)據(jù)到QQ數(shù)據(jù)包 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,還是無法獲取聊天記錄的,因?yàn)楝F(xiàn)在手機(jī)默認(rèn)都是開啟了selinux,所以QQ沒有權(quán)限獲取數(shù)據(jù)。對于如何修復(fù)selinux權(quán)限,我也不是很清楚,建議是直接關(guān)閉selinux權(quán)限。 查看selinux權(quán)限狀態(tài)命令: getenforce 如果返回:Enforcing 表示開啟了selinux 如果返回:Permissive 表示selinux不起作用 setenforce 0 //將selinux權(quán)限設(shè)置為Permissive 當(dāng)selinux權(quán)限是Permissive 時(shí)候啟動QQ這時(shí)候QQ就能正常啟動,看到還原的聊天記錄。 我是本機(jī)直接備份QQ數(shù)據(jù)還原到TIM,這樣兩個(gè)應(yīng)用的數(shù)據(jù)是一樣的,聊天記錄完美~登錄鑒權(quán)沒過期,兩個(gè)應(yīng)用可以同時(shí)在線,可以同時(shí)接收消息(如果換個(gè)手機(jī)還原,那么兩個(gè)手機(jī)可以同時(shí)收消息)。當(dāng)然這個(gè)鑒權(quán)一天左右就會過期,到時(shí)候就有一個(gè)被踢下線了。 總結(jié): 1、舊手機(jī) tar備份QQ數(shù)據(jù)目錄 2、新手機(jī) ls -l /data/data/com.tencent.mobileqq 查看要還原的手機(jī)的,QQ應(yīng)用的所有者 2、新手機(jī) tar解壓還原QQ數(shù)據(jù)目錄 3、新手機(jī) chown -R 修復(fù)QQ數(shù)據(jù)文件所有者為QQ應(yīng)用 4、新手機(jī) 關(guān)閉selinux權(quán)限 5、啟動QQ即可 針對QQ聊天記錄轉(zhuǎn)移到TIM,在備份完畢后把還原解壓目錄改為Tim的目錄/data/data/com.tencent.tim,其他照常執(zhí)行就行了(新版本可能只需要保留databases和files兩個(gè)文件夾,share_prefs需要刪除里邊部分文件,自己分析,其他文件夾可以不還原/可刪除)。 本文關(guān)閉selinux是臨時(shí)關(guān)閉,重啟后會是失效,需要再次執(zhí)行命令關(guān)閉selinux,如果要永久關(guān)閉selinux需要修改boot。也可以下載個(gè)app每次開機(jī)自動關(guān)閉selinux。想自己研究導(dǎo)出聊天記錄為文本的可以看一下參考來源。注意:參考文檔頁面涉及到一些推廣的查看聊天記錄軟件,本人不做任何評價(jià)。自己去考量。 另外還可以將舊手機(jī)的聊天數(shù)據(jù),導(dǎo)出直接寫入到新手機(jī)的數(shù)據(jù)文件中,就像電腦上QQ數(shù)據(jù)導(dǎo)入一樣,會編程的朋友可以自己研究下參考來源,解密舊手機(jī)QQ的sqlite數(shù)據(jù)庫文件,再用新手機(jī)的密鑰加密導(dǎo)入到新手機(jī)的sqlite數(shù)據(jù)庫,將新的db復(fù)制到新手機(jī),修改權(quán)限即可完成QQ數(shù)據(jù)的導(dǎo)入功能。 參考來源: 對于如何永久關(guān)閉selinux權(quán)限 http://www./thread-9137678-1-1.html MIUI8雙開、分身、分身下的雙開應(yīng)用的數(shù)據(jù)位置 http://www./thread-4295910-1-1.html 2016/01/13/手機(jī)QQ聊天記錄破解/ http:///2016/01/13/%E6%89%8B%E6%9C%BAQQ%E8%81%8A%E5%A4%A9%E8%AE%B0%E5%BD%95%E7%A0%B4%E8%A7%A3/ 用Python解密手機(jī)QQ聊天記錄 - FreeBuf互聯(lián)網(wǎng)安全新媒體平臺 | 關(guān)注黑客與極客 http://www./articles/terminal/68224.html QQ和微信聊天內(nèi)容讀取解密 安卓微信數(shù)據(jù)庫解密 |
|