本文将介绍如何将微信聊天记录导出为结构化数据
所需材料
- 一部已经root的安卓手机
-
带GPU的Linux电脑
整体流程如下:
数据库文件提取
使用RE管理器,在已经root的安卓手机上,找到如下文件:/data/data/com.tencent.mm/MicroMsg/[weixin_name]/EnMicroMsg.db
,(其中[weixin_name]
是32位的md5值,如果它有多个值,说明这部手机上登录过多个微信号),将该文件传到电脑上。
破解密码
这个数据库文件进行了加密,密码是7位的小写字母加数字组合,有两种破解的方式
1. 计算的方式
网上有很多方法已经介绍的很详细了,即使用IMEI和微信的uid拼起来计算md5,取前7位,但是我这边测试不通过,有需要的可以参考:微信聊天记录解密并导出
2. 暴力破解方式
使用计算的方式看似比较讨巧,但是比较浪费时间,我的手机IMEI不能复制,需要截图传到QQ/微信识别文字,双卡手机还有两个IMEI,两个都试了均未成功。无意间发现网上介绍有暴力破解的方式,于是打开新世界:提取微信聊天记录。
这个工具https://github.com/whiteblackitty/SQLCipher-Password-Cracker-OpenCL可以实现使用GPU暴力破解数据库密码。
这个配置环境比较麻烦,需要Linux, Python, pip OpenCL,Cuda等等一系列操作,非常恶心。不过对于深度学习er来说,这些都是家常便饭了,直接按照readme装好环境,然后对源码做如下修改:
将 Lib/pbkdf2-sha1_aes-256-cbc.cl
文件的 752
行 (link) 修改为
```if(((uint)(data[5] ^ iv[5])==0x40) && ((uint)(data[6] ^ iv[6])==0x20) && ((uint)(data[7] ^ iv[7])==0```
运行如下命令,即可开始破解密
python Run.py 0
然后你就得到了7位的数据库密码
我用的2080TI显卡,亲测只用5分钟即可遍历完所有可能,实际只用2分钟破解完密码,比前面IMEI+uid计算的方式方便太多。因此,推荐Linux+GPU用户使用暴力破解的方式。
导出为结构化txt
- 数据库解密:
在ubuntu上安装sqlcipher,目前(2021.12.24)默认安装的3.4.1版本,这个版本可以使用
sudo apt-get install sqlcipher
然后在数据库文件EnMicroMsg.db
的目录下,执行如下命令:
sqlcipher EnMicroMsg.db 'PRAGMA key = "yourkey"; PRAGMA cipher_use_hmac = off; PRAGMA kdf_iter = 4000; ATTACH DATABASE "decrypted_database.db" AS decrypted_database KEY "";SELECT sqlcipher_export("decrypted_database");DETACH DATABASE decrypted_database;
把yourkey换成你的密码,如果有报错,说明密码不对,等待大约两分钟,即可得到解密后的数据库文件decrypted_database.db
- 聊天记录格式化导出:
我们使用wechat-dump提供的脚本,将聊天记录按照会话用户名/群聊名称进行整理 - 复制项目
git clone git@github.com:ppwwyyxx/wechat-dump.git
- 将
decrypted_database.db
放到wechar-dump
文件夹下 - 执行解析:
./dump-msg.py decrypted.db output_dir
然后就可以在output_dir文件夹下看到整理后的聊天记录
其他玩法
根据生成的聊天记录,我们可以做一系列分析,包括统计分析,如词频统计,发言次数统计,发言长度统计;内容分析,如情感分析,意见挖掘,观点提取,主题抽取等;对话生成,可以训练一个略带感情的聊天机器人代替你回复老板,或者让它模仿女朋友的说话口吻跟你说晚安等等。总之,有了原始数据,我们可以为所欲为。
- 词频统计(词云)
- 发言统计
- 聊天机器人