本篇所有操作均在 64 位的 Windows 11 系统下执行
背景
需求是获取我和欢欢的全部微信聊天记录存为文本数据,然后进行数据分析和生成词云。由于我的安卓手机没有越狱,所以这里用到了模拟器。
注意: 启动蓝叠模拟器会自动关闭 Hyper-V 功能,导致 WSL 启动报错,报错解决办法参考 https://haauleon.gitee.io/2022/12/16/ubuntu-wsl-error/。
一、获取微信聊天记录
通过模拟器获取聊天记录文件。
1、安装蓝叠模拟器
方法 1
去官网 下载 BlueStacks 蓝叠4,下载地址:
http://aliosscdn.bluestacks.cn/client/BlueStacks4Setup.exe
方法 2
百度网盘离线下载安装:
链接:https://pan.baidu.com/s/1CHMQ5890bKNhYkca_7t4Ow?pwd=6qmp
提取码:6qmp
2、模拟器安装微信
需要进入模拟器,并在模拟器中安装微信应用。
- 进入应用中心
- 搜索微信并安装
3、聊天记录备份到电脑
手机和电脑同时登录微信且都处于同一局域网中,然后将手机中的聊天记录备份到电脑中。
- 手机和电脑同时登录且处于同一局域网
- 电脑版微信点击左下角的
迁移与备份
- 选择
备份与恢复
- 点击
备份聊天记录至电脑
-
在手机微信中点击
选择聊天记录
来选取上传
- 等待备份完成即可
4、聊天记录恢复到模拟器
恢复到模拟器的微信中这一步有个小技巧。
- 在模拟器的微信中使用账号进行登录(由于是新设备,所以需要手机微信进行授权,授权成功后手机微信会自动退登并且电脑微信也会退登)
-
登录电脑微信会提示你需要重新扫码,这里有个小技巧,就是先用手机把二维码拍下来,然后进入模拟器的微信页面点击
扫一扫
,这时候就将刚拍下来的二维码给它识别就可以登录电脑版微信了
-
在电脑版微信中点击
恢复聊天记录至手机
-
在模拟器微信弹出的窗口中点击
开始恢复
- 等待记录上传完成即可
5、开启获取 ROOT 权限
获取 root 权限,是为了为获取聊天记录文件做准备。
- 打开模拟器的设置下拉框
- 在引擎设置页面勾选
获取Root权限
并点击确定
- 打开模拟器的设置下拉框并点击
重启引擎
即可
二、查看微信聊天记录
将聊天记录文件进行解密以此来查看。
1、获取数据库文件
数据库文件中存储了微信聊天记录,我们需要找到这个文件的存放路径,并复制到模拟器的分享文件夹中。
- 打开模拟器的
R.E.管理器
- 点击进入目录 /data/data/com.tencent.mm/MicroMsg
-
进入第一个目录并找到 EnMicroMsg.db 文件
- 在模拟器中通过鼠标长按左键对 EnMicroMsg.db 文件进行复制
- 将文件复制后,粘贴到 /sdcard/windows/BstSharedFolder 目录下
- 粘贴成功后就可以在本地电脑路径 D:\Program Files (x86)\BluestacksCN\Engine\ProgramData\Engine\UserData\SharedFolder 中找到此文件。D:\Program Files (x86)\BluestacksCN 是蓝叠的安装目录
-
如果想在模拟器中快速将 EnMicroMsg.db 文件转存到电脑本地的其他路径中,可以在多媒体管理器中进行转存
(1)在模拟器中打开多媒体管理器
(2)选择文件并导出到电脑本地
2、获取 IMEI 值
需要在模拟器中安装第三方 apk 包进行获取,将以下提供的 apk 包导入进本地共享文件夹 D:\Program Files (x86)\BluestacksCN\Engine\ProgramData\Engine\UserData\SharedFolder 中,然后在模拟器中安装此应用即可获取 IMEI 值。
- 离线百度云网盘下载
链接:https://pan.baidu.com/s/1rd4_2SvAUpmqZ4cKvBiBvA?pwd=ih6n
提取码:ih6n - 将下载的文件复制粘贴到共享文件夹 D:\Program Files (x86)\BluestacksCN\Engine\ProgramData\Engine\UserData\SharedFolder 中
- 在模拟器中的
R.E.管理器
中的 /sdcard/windows/BstSharedFolder 找到此 apk 包并双击进行安装 - 安装成功后点击打开即可获取到 IMEI 值
3、获取 uin 值
获取 auth-uin 的值。
- 在模拟器中点击进入目录 /data/data/com.tencent.mm/shared_prefs 找到文件 auth_info_key_prefs.xml 并打开
- 找到 auth-uin 值(这里需要注意的是,有的UIN识别码是带“ – ”减号的,在计算MD5值需要加上!)
4、生成数据库解密 MD5 值
将获取到的 IMEI 值和 uin 值进行拼接然后加密成 MD5,MD5 值取前 7 位字符即数据库文件的解密密码。
- 拼接 IMEI+uin 值并使用工具 进行 MD5 加密,
265037350862670-1578165975
加密后的 MD5 值为dcdfe82054172b3640c15fa558c0d80d
- 取 MD5 前七位字符即为数据库文件解密密码,即
dcdfe82
5、解密数据库文件
使用工具 sqlcipher 打开并查看。
- 离线百度云网盘下载 sqlcipher 并安装
链接:https://pan.baidu.com/s/19WkRR1_I949cSGcKfWES5g?pwd=ey8y
提取码:ey8y - 打开 sqlcipher ,将本地的 EnMicroMsg.db 文件拖拽进来并输入密码
dcdfe82
注意: 如果提示密码不正确,则使用原始的 IMEI 值(1234567890ABCDEF)替换刚获取的 IMEI 值再进行加密。也就是说,将1234567890ABCDEF-1578165975
进行 MD5 加密得98274e30f1e31d22500d81d314d4eef2
,再取 MD5 值前七位字符98274e3
即可。 -
导入数据库文件为 csv 文件
三、生成微信聊天词云
将微信聊天记录文本进行数据分析后生成词云。这里用到了的是这个大神的项目:https://godweiyang.com/2019/07/27/wordcloud/,项目地址 Github 上:https://github.com/godweiyang/wordcloud。
1、处理 wx.csv 文件
打开刚刚导出的 wx.csv 聊天记录文件,选中聊天消息文本这一列,点击复制。再新建一个 wx.txt 文件,将复制的聊天消息列粘贴到此文件中进行保存。
- 选择 wx.csv 文件中的 I 列然后使用 ctrl+c 组合键进行复制
- 新建一个 wx.txt 文件并打开,将刚刚复制的内容使用 ctrl+v 组合键粘贴到此处并保存
2、生成微信聊天词云
使用大神已经写好的项目跑一遍生成词云图片。
- 离线百度云网盘下载大神的项目代码至电脑本地
链接:https://pan.baidu.com/s/1m9_0aAaaiemlWEdEXQTxHg?pwd=royn
提取码:royn - 项目运行环境如下
Python==3.8.10
pip==22.3.1
jieba==0.42.1
imageio==2.22.4
wordcloud==1.8.1 - 将处理好的 wx.txt 文件粘贴到项目 wordcloud/ 下,然后执行以下命令
1 2 3 4 5 6 7 8 9 10 11 12 13
> cd wordcloud > python3 create_word_cloud.py wx.txt Building prefix dict from the default dictionary ... Dumping model to file cache C:\Users\Haauleon\AppData\Local\Temp\jieba.cache Loading model cost 0.691 seconds. Prefix dict has been built successfully. # of different words = 3961 create_word_cloud.py:50: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly. bimg = imageio.imread(background_picture_filename) Saving color_love_wx.png create_word_cloud.py:50: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly. bimg = imageio.imread(background_picture_filename) Saving love_wx.png
- 词云图片生成成功,文件名分别为 color_love_wx.png 和 love_wx.png
-
效果如下
相关链接:
微信聊天记录统计
手机端微信聊天记录数据库解密过程