微信聊天记录导出(2020新版)

微信聊天记录导出(2020新版)

首先说明,坑的部分主要是数据库破解。

项目地址:https://github.com/fly-dragon211/Wechat-message-analysis

1. 本地备份提取聊天记录

这里主要讲小米手机,苹果手机参考https://www.zhihu.com/question/66251440,其他安卓手机可以用模拟器然后root提取。

要导出微信安卓客户端的聊天记录,首先得找到聊天记录的数据库。
安卓客户端的聊天记录储存在私有目录 /data/data/com.tencent.mm/MicroMsg 下,这个目录需要root权限才能进去,但是,那样太太太麻烦了,好在我们MI6有本地备份的功能,利用这个功能。我们轻而易举就可以获得数据库。

需要的工具

此处下载

  1. 首先到手机:设置->更多设置->备份和重置->本地备份 里面点击新建备份,选择软件程序中的微信进行备份,注意只选择微信。

  2. 然后到文件管理 /内部储存设备/MIUI/backup/ALLBackup/ 下将备份的文件夹复制到电脑

  3. 然后用任意一种压缩包软件(我用的是7zip)打开这个com.tencent.mm.bak文件,并且将apps\com.tencent.mm\r\MicroMsg\systemInfo.cfgapps\com.tencent.mm\r\MicroMsg\CompatibleInfo.cfgapps\com.tencent.mm\r\MicroMsg\xxxx\EnMicroMsg.db三个文件解压到电脑上。这里xxxx是一串随机的字母,代表你的微信用户,每个人不一样,一般是最大的那个文件夹,我这里是下图所示文件夹:

2. 破解数据库密码

找到聊天数据库了,但是目前还不能得到聊天记录,因为这个数据库是sqlcipher加密数据库,需要密码才能打开。

数据库密码有很多种生成方式:

  1. 手机IMEI+uin(微信用户id userinformation) 将拼接的字符串MD5加密取前7位

    IMEI123456uinabc,则拼接后的字符串为123456abc 将此字符串用MD5加密(32位)后

    df10ef8509dc176d733d59549e7dbfaf 那么前7位df10ef8 就是数据库的密码,由于有的手机是双卡,有多个IMEI,或者当手机获取不到IMEI时会用默认字符串1234567890ABCDEF来代替,由于种种原因,并不是所有人都能得出正确的密码,此时我们可以换一种方法。

  2. 反序列化CompatibleInfo.cfgsystemInfo.cfg

    不管是否有多个IMEI ,或者是微信客户端没有获取到IMEI,而使用默认字符串代替,微信客户端都会将使用的信息保存在MicroMsg文件夹下面的CompatibleInfo.cfgsystemInfo.cfg文件中,可以通过这两个文件来得到正确的密码,但是这两个文件需要处理才能看到信息。

  3. 使用hook方式得到数据库的密码,这个方法最有效参考

  4. 暴力破解

我开始用反序列化:

javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg

运行完成后就会得到密码
参考链接

但是出现了如下错误:

错误: 找不到或无法加载主类 IMEI 原因: java.lang.ClassNotFoundException: IMEI

于是我换了第一种方法,可是找不到uid

寻找uid

uid不是微信号,原来是保存在下面路径:

/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml,

在该文件中,键值“auth_uin”即为该用户的uin。

但是我发现根本没有这个路径,可能是我的手机没有root,于是我把备份的文件解压,在里面搜索这个,终于找到了。

最终确定uid,然后MD5(IMEI少一位+uin)的输出字符串作为密码,取前7位小写,就可以破解数据库了。

得到数据库之后可以分析一下你的聊天记录,顺便制作一个词云来给你的心上人看一下你们都聊了啥👀

参考:

https://zhuanlan.zhihu.com/p/77418711

https://github.com/Heyxk/notes/issues/1

https://www.sohu.com/a/355273307_704736

数据分析

下面就是最关键的数据分析。聊天记录包含了非常丰富的数据,这里我只做了两个比较简单的例子,一个是针对时间做聊天时间段分布的统计;一个是针对内容做字符匹配,统计一些高频词汇出现的次数,比如“早安”、“晚安”、“想你”、“爱”等等(你懂的)。

详情见本项目。代码都有注释,我写了一个类把直方图,高频词汇统计,词云等结合起来了。

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Sun Aug 16 10:41:08 2020
@author: fly
"""

import numpy as np
import pandas as pd
import time
import re
import datetime
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.font_manager import *  # 如果想在图上显示中文,需导入这个包
import xlwt
import wordcloud  # 词云
import imageio
import jieba  # 中文分词


class WechatAnalysis:
    def __init__(self, data_frame, name):
        self.data_frame = data_frame
        self.wechat_name = name
        self.chat_time, self.chat_content = self.get_time_and_content()
        self.font_path = r'C:\Windows\Fonts\MSYH.TTC'  # 微软雅黑

    def get_time_and_content(self):
        # 把聊天内容和时间取出
        chat = self.data_frame
        chat_time = []
        chat_content = []
        for i in range(len(chat) - 1):
            content = chat[i:i + 1]
            if content['talker'].values[0] == self.wechat_name:
                t = content['createTime'].values[0] // 1000  # 除以1000用以剔除后三位0
                c = content['content'].values[0]
                chat_time.append(t)
                chat_content.append(c)
        return chat_time, chat_content

    def get_time_hist(self, time_flag=0):
        
  • 16
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值