如何将密切好友的微信聊天记录恢复到自己的微信中

本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!
原文地址:http://www.cnblogs.com/cxun/p/4544000.html

 

在手机中把与自己联系好几年的好友的聊天记录不小心删除了,痛苦万分,好在对方的手机里还有一份完整的聊天记录,想把对方的聊天记录转移到自己的手机中来,以下是具体的补救方法。

使用软件:SQLite Expert、iTools

适用手机:iPhone

假设A手机是误操作删除记录的手机,B手机是完整数据源手机。

1.备份

首先,先把B手机的数据备份好,建议使用iTools(现在已更新到3.0,本文截图依然是1.0的),找到微信App中的文档文件夹Documents,整个复制到本地硬盘保存起来吧。

2.计算MD5值

首先要弄清楚双方微信ID用户名的MD5值,这个很重要,在后面操作过程中极易弄混淆。在Documents中,会有若干个MD5哈希值为名称的文件夹,如果该手机只登录过一个微信帐号,就会只有一个MD5哈希值的文件夹;如果有多个,你不知道哪个才是你常用微信帐号文件夹的话,告诉你一个办法,哪个文件夹占用空间大,哪个就是你常用的。那么,这个文件夹名称就是A手机微信ID哈希值,以下简称“A_HASH”。

依次打开其内部文件夹,找到聊天记录核心文件:MM.sqlite,很明显,是个sqlite数据库文件。

使用数据库软件打开,这里推荐使用SQLite Expert,个人版是免费的。在左侧树状图中找到好友数据表“Friend”,其中,UsrName字段就是每个好友的微信ID用户名,NickName字段就是好友的昵称,可以通过昵称找到B手机的微信ID用户名,然后使用MD5计算工具算出它的MD5值,以下简称“B_HASH”。

3.复制聊天记录

首先把A手机的数据库文件复制到本地,即“/Documents/A_HASH/DB/MM.sqlite”,使用SQLite Expert打开,在左侧树状图中找到想恢复的好友的数据表“Chat_B_HASH”,这里有两个情况,分开讨论:

(1)如果是刚刚在A手机中误删除的,且没有与B发生过后续通信,该表则不存在,点击SQLite Expert的SQL标签页,输入SQL语句创建该表:

SQL语句如下(记得改为正确的“B_HASH”):

CREATE TABLE [Chat_B_HASH]
(TableVer INT4,
MesLocalID INTEGER PRIMARY KEY,
MesSvrID INTEGER,
CreateTime INTEGER,
Message TEXT,
Status INTEGER,
ImgStatus INTEGER,
Type INTEGER,
Des INTEGER);

按F5,如果没报错的话,则该数据表创建成功。

(2)如果在A手机中误删除之后,与B产生了新的通信,则该数据表已存在,且存有删除后的通信数据。由于一会要把B手机密切好友的所有聊天记录复制到A手机中,此时A手机与B好友的聊天数据已没有意义,为了避免出现数据重复与其它未知的错误出现,建议将A手机中与B好友的数据删除。删除方法是在左侧树状图中点击B好友的数据表“Chat_B_HASH”(千万别点错),在SQL标签页中输入SQL语句并执行:

delete from Chat_B_HASH

同时,还要使用iTools在iPhone中删除与B好友聊天记录相关的语音、图片、视频等文件(不放心的话可以先把这些数据备份出来),在iTools中找到这3个文件夹,在文件列表中按“CTRL + A”全选,按“Del”删除。

/Documents/A_HASH/Audio/B_HASH
/Documents/A_HASH/Img/B_HASH
/Documents/A_HASH/Video/B_HASH

接下来就是重头戏了,要把B手机中与A聊天的记录复制到A的数据库文件MM.sqlite中。首先找到并使用SQLite Expert打开第1步中B手机的数据库文件“\Documents\B_HASH\DB\MM.sqlite”,在左侧树状图中找到A的微信数据表“Chat_A_HASH”,点击,在右侧选择“Data”标签页,点击表中数据任意记录,按“CTRL + A”全选(数据量很大的话需要等几秒才有反应),再按“CTRL + C”复制,然后在左侧树状图中选择A手机的数据库,找到刚才3.(1)步创建或3.(2)步删除数据的数据表“Chat_B_HASH”,在右侧“Data”标签页下的数据记录位置中点击一下,按“CTRL + V”粘贴(数据量很大的话也要等几秒才有反应),完成数据的复制。为了避免将A和B的数据库弄混淆,复制完后最好把B的数据库关闭。

4.修改收信与发信的标志位

由于在B手机的微信中,看到的聊天记录中A是在左边,B是在右边,A的对话框泡泡是白色,B的是绿色,现在数据直接复制到A的数据库文件中后,需要将两者的发信收信标志位交换,才能在A的手机中正确显示,否则的话会看到原本是A说的话,变成B说的话了。

在SQLite Expert中,点击刚才粘贴的数据表“Chat_B_HASH”,点击右侧的“SQL”标签页,依次输入并执行以下SQL语句:

update Chat_B_HASH set des=2 where des==0
update Chat_B_HASH set des=0 where des==1
update Chat_B_HASH set des=1 where des==2

切记!这3条语句要一条接一条地执行!即:输入第1条,按一次F5,删掉,再输入第2条,再按一次F5,再删掉,然后再输入第3条,按一次F5,完毕!

5.修改视频数据的标志位

这一步若不执行的话,在最后完成后会造成A手机中视频旁边出现感叹号的问题。在SQLite Expert中,点击刚才粘贴的数据表“Chat_B_HASH”,点击右侧的“SQL”标签页,输入并执行以下SQL语句:

 

update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="4"') where type=43 and des=1; 
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="4"') where type=43 and des=1;
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="4"') where type=43 and des=1;
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="3"','status="4"') where type=43 and des=1;
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="3"') where type=43 and des=0; 
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="3"') where type=43 and des=0;
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="3"') where type=43 and des=0;
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="4"','status="3"') where type=43 and des=0;

若最后完成后仍发现视频旁边有感叹号出现,请使用终极方法:拿另一台iPhone C,通过WIFI聊天记录迁移的方式迁移到C手机,再迁移回A手机。在迁移过程中会自动修复。

另外,如果B手机的聊天记录是从Android版本的微信迁移过来的,需要执行以下SQL语句,原因是老版的Android微信将视频格式的标志位存储为“44”,需要改成“43”:

update Chat_B_HASH set type=43 where type=44
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'type="44"','type="43"') where type=43

 6.复制数据到A手机

进行以上数据库修改操作之后,关闭SQLite Expert(否则复制回iPhone会出错),将修改好的MM.sqlite文件使用iTools导入回A手机微信APP的相应文件夹,即:“/Documents/A_HASH/DB/MM.sqlite”

然后是将B手机中与A聊天的语音、图片、视频导入到A手机微信APP的相应文件夹中,假设在第1步中从B手机备份出来的Documents文件夹存放在D盘,使用iTools将这三个文件夹中的所有文件拖入A手机的微信APP对应的文件夹中:

D:\Documents\B_HASH\Audio\A_HASH  --->  iTools:/Documents/A_HASH/Audio/B_HASH   (文件后缀是:*.aud 等等)
D:\Documents\B_HASH\Img\A_HASH  --->  iTools:/Documents/A_HASH/Img/B_HASH       (文件后缀是:*.pic 与 *.pic_thum 等等)
D:\Documents\B_HASH\Video\A_HASH ---> iTools:/Documents/A_HASH/Video/B_HASH (文件后缀是:*.mp4 与 *.video_thum 等等)

 

结语:

在本文的这些操作中,难点就是将A与B弄混淆,因此,在进行此项工作以前,对A与B手机的备份显得尤为重要,一旦弄错,还可以重头再来。

posted @ 2015-06-01 16:35  cxun  阅读(...)  评论(... 编辑 收藏