欢迎光临散文网 会员登陆 & 注册

记一次微信聊天文字记录导出到Excel工作

2017-09-05 19:03 作者:万能君的软件库  | 我要投稿

其实一直想把我和她的微信聊天记录导出到文本,整理出来拿出来翻翻,然后再查阅了大量网络资料后,我成功的将我和她的聊天记录整理成excel的形式,如下所示:


那么我们开始。


一、工具准备(苹果手机也可,在文末)

1、root的安卓手机,装有微信。

2、安装RE浏览器或者ES浏览器。

3、加密数据库DB文件打开工具:sqlcipher.exe(链接:pan.baidu.com/s/1qYshCm 密码:c8bw)

4、Excel

5、MATLAB(可选)


二、找到加密的微信聊天记录文件

依次选择根目录/data/data/com.tencent.mm/MicroMsg,如下图


如上图,一般加密的数据库文件在两个长名字文件夹之一,自己寻找。

打开文件夹后,会找到EnMicroMsg.db这个文件,将这个文件用re管理器拷贝到手机主目录,然后拷贝到手机上即可。


三、打开数据库EnMicroMsg.db

下载加密数据库DB文件打开工具:sqlcipher.exe(链接:pan.baidu.com/s/1qYshCm 密码:c8bw)。


直接运行,选择打开,如下图,需要密码:


那么请看下一步,找到密码。


四、寻找数据库文件密码


目前各种资料得出的密码获取方式是 <手机IMEI号+微信UIN号> 的MD5码前七位。

IMEI号位15位,比如000000000000000,微信UIN号为9位,比如123456789.


MD5码在线生成:MD5在线加密/解密/破解 - 站长工具


如下图,输入手机IMEI号+微信UIN号,选择加密方式32位小,取MD5码前七位即为密码。


所以,我们只需要知道手机IMEI号和微信UIN号即可获得密码,请看下步,怎么获得IMEI号和微信UIN号。


五、获取手机IMEI号和微信UIN号

1、手机IMEI号

这个很简单,拨号界面输入*#06#即可,双卡双待手机两个串号,这个自行尝试。

2、微信UIN号获取

这个方法较多,汇集如下:

(1)谷歌浏览器抓包

谷歌浏览器”中打开“微信网页版”(微信网页版),手机微信扫码登陆。

然后新建一个标签页,输入chrome://net-internals/#events,回车。

按“Ctrl+F”,输入"uin”进行搜索,即可找到如下图的UIN号



(2)寻找手机里的文件得到UIN号

还是在re管理器依次寻找

根目录/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml


system_config_prefs.xml这个文件拷贝到手机主目录,才能打开,如下所示:


即可得到UIN号。


(3)进阶版,JAVA程序得到手机IMEI号微信UIN号。

这个需要有JAVAC运行环境。


程序:用java中的map解析微信MicroMsg里的CompatibleInfo.cfg和systemInfo.cfg - JiezhiG的专栏 - CSDN博客


import java.io.FileInputStream;  

import java.io.FileNotFoundException; 

 import java.io.IOException; 

 import java.io.ObjectInputStream; 

 import java.util.Map;    

public class MapTest 

{        /**     * @param args     */      public static void main(String[] args) {          // TODO Auto-generated method stub          try {              FileInputStream file = new FileInputStream("E:/CompatibleInfo.cfg");              ObjectInputStream mObjectInputStream = new ObjectInputStream(file);              Map map = (Map) mObjectInputStream.readObject();              System.out.println(map);          } catch (FileNotFoundException e) {              // TODO Auto-generated catch block              e.printStackTrace();          } catch (IOException e) {              // TODO Auto-generated catch block              e.printStackTrace();          } catch (ClassNotFoundException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }      }  }  


这个程序主要是解析微信里的CompatibleInfo.cfgsystemInfo.cfg,两个文件的内容,这两个文件分别包含了手机IMEI号微信UIN号。

两文件均在根目录/data/data/com.tencent.mm/MicroMsg目录下。


如下图,我们解析到了文件内容:

其中258=后是手机IMEI号,1=后面是微信UIN号。


小插曲:这中间很曲折,我现在手机是小米6,原先是小米4,换米6时,我用小米4的MIUI备份到了小米6上,所以一开始找IMEI号时候怎么也搞不定密码,因为一直用的小米6串号,哎。。没想到其实应该是小米4的IMEI号。。。


六、导出聊天记录到CSV

经过第四步和第五步,我们已经打开加密的db文件,如下所示:

我们直奔主题,如下图,找到message导出csv即可:





七、处理聊天记录csv文件

导出的csv文件包含了所有的聊天记录,我们通过探索,发现如下图:

一般寻找图上这几项,分别是isSend(0则为对方发的消息,1是我发的消息),createTime(10位UNIX时间戳,可以算法转换为标准时间),talker(这个是关键,你与某个联系人的对话就为一个taker id,锁定了它就锁定了你与她的所有对话),content(聊天文字内容)。


那么,我们思路清晰了,我们只需要找到talker即可,通过Excel的筛选即可完成,excel操作很简单,但如此大的excel文件,打开编辑可是非常慢的,所以我用MATLAB实现处理,并将整理好的聊天记录导出到excel文件中。


程序如下:

clc;

clear all;

[FileName,PathName] = uigetfile('*.csv','选择导出的数据库csv文件');

file = fullfile(PathName,FileName);

[num,txt,raw]=xlsread(file);

% clearvars -except  num txt raw

talkerid=input('请输入Talker的ID:','s');

talker=txt(:,8);%列出所有的talker ID

[ta , y] = find(strcmp(talker,talkerid));%寻找刚才输入的talker ID mcontent=cell(length(ta),1);

for i=1:length(ta) 

who(i)=num(ta(i)-1, 5)  ;%定义一个isSend cell数组,来鉴别是谁发的消息 mtime(i)=num(ta(i), 7)  ;%定义一个createTime cell数组,来存储10位UNIX时间戳 mcontent{i}=txt(ta(i), 9)  ;%定义一个content cell数组,来存储聊天内容end who=who'; 

%%%%%%%%%%%%%%%下面这段程序是将isSend cell数组中的0替换为对方,1替换为我%%%%%%%%%%%%

myname=find(who==1);

hername=find(who==0);

% all=find(who==2);

ourname=cell(length(who),1);

for i=1:length(myname)

ourname{myname(i),1}='我';

end

for i=1:length(hername)

ourname{hername(i),1}='真好';

end

for i=1:length(all)

% ourname{all(i),1}='未知';

% end%%%%%%%%%%%%%%%%%%%%%%%%%下面这段程序是将createTime cell数组中时间戳取前10位转换位北京时间%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ourname=ourname';  

mtime=mtime';  

mtime=num2str(mtime);%转换成字符串,取前10位时间戳  

mtime=mtime(:,1:10); 

mtime=str2num(mtime);

mtime=dateconvert(mtime);

mtime=mtime';

%%%%%%%%%%%%%%%%%%%%%%%%%下面这段程序是将content cell数组中汉字去掉引号,否则写入excel报错%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:length(mcontent)  

 mcontent1(i)=mcontent{i};

end

mcontent1=mcontent1';

%%%%%%%%%%%%%%%%%%%%%%%%%下面这段程序是将时间、发言人、聊天内容汇总,写入excel中%%%%%

ultimate=[mtime,ourname,mcontent1];

xlswrite('lovemore1.xlsx',ultimate);%UNIX时间戳转换成标准时间,北京时间需要加8小时,也就是8*3600秒

function [ date ] = dateconvert(x) 

 for i=1:length(x)

date{i}=datestr(datetime(x(i)+8*3600, 'ConvertFrom', 'posixtime' ));

end  

end



然后,就可以搞定啦,如果嫌最终的excel打开还是慢,你可以用excel导出到txt也行啊。



---------------------------------下面是苹果的-----------------------------------------------------------------------


一、工具准备

1、iTunes

2、pp助手

3、加密数据库DB文件打开工具:sqlcipher.exe(链接:pan.baidu.com/s/1qYshCm 密码:c8bw)

4、Excel

5、MATLAB(可选)


二、获取数据库db文件

苹果的db文件没有加密,所以只要找到db文件即可用sqlcipher打开。

我们开始!

1、iTunes备份手机

如下图,手机链接电脑,备份即可。


2、PP助手导出备份

电脑安装pp助手,手机链接PP助手,点击备份还原,找到iTunes备份文件夹,如下图:输入AppDomain-com.tencent.xin:/,即可看到,将Documents文件夹拷贝到电脑即可。


然后,我们打开Documents文件夹,找到如下图所示的fts_message.db就是要的聊天记录数据库。



然后,我们直接用sqlcipher打开,如下所示:

苹果的和安卓不一样,苹果将你与某个人的对话放到各自的table里,所以直接导出csv即可。


但是只有创建时间和聊天内容,谁发送的消息没找到。。。

程序也简单多了,如下:

clc;

clear all;

[FileName,PathName] = uigetfile('*.csv','选择导出的数据库csv文件');

file = fullfile(PathName,FileName); 

[num,txt,raw]=xlsread(file);

% clearvars -except  num txt raw 

mtime=dateconvert(num(:,4))'; 

mcontent1=txt(2:end,5); 

ultimate=[mtime,mcontent1]; 

xlswrite('ILoveYouForever.xlsx',ultimate);

%UNIX时间戳转换成标准时间,北京时间需要加8小时,也就是8*3600秒

function [ date ] = dateconvert(x)  

for i=1:length(x)

date{i}=datestr(datetime(x(i)+8*3600, 'ConvertFrom', 'posixtime' ));

end  

end


导出的excel如下:



------------------------------------------------------------------------

from 微信公众号:wnsouba (每天来点精简的分享)

------------------------------------------------------------------------


记一次微信聊天文字记录导出到Excel工作的评论 (共 条)

分享到微博请遵守国家法律