步骤
- 获取对象聊天记录加密数据
- 解码
- 对csv数据进行筛选
-词云分析
获取微信聊天记录加密数据
安卓手机获取微信导出微信聊天记录需要先获取root权限,这个风险比较大,而且我这个手机比较小众,root很麻烦。今天看到一个直接下载安卓模拟器,在上面下载微信,导入聊天记录后,用RE文件管理器找到数据。这个方法更简单,并且不受手机系统的限制(不过苹果手机没有试过)。
1. 安装安卓模拟器
首先现在下载夜神模拟器,安装完毕打开root权限后,安装微信和RE文件管理器。
2. 聊天记录备份
在windows端登陆微信,把手机上的聊天记录备份到windows端。可以全部备份也可以选择对象的数据进行备份。
在模拟器上登陆微信,在windows端进行 恢复聊天记录到到手机。注意,此时最好只选择与对象的聊天记录进行恢复,这样之后不用在进行数据对象的筛选。
3. 利用RE文件管理器找到加密数据
给予RE文件管理器root权限。
打开RE文件管理器,进入/data/data/com.tencent.mm/MicroMsg,进入那个由数字和字母组合而成的文件夹(c3765b24523e7fb01257f1aa40ada472)
找到该文件夹下的EnMicroMsg.db文件
复制到模拟器的共享文件夹,共享文件夹的位置为 /mnt/shell/emulated/0/others 。之后访问windows下的 C:\Users\你的用户名\Nox_share\OtherShare 获取该数据库文件( EnMicroMsg.db )
解码
1. 下载sqlcipher.exe
(链接: https://pan.baidu.com/s/1Im3n02yseo-4IxeDY9srqQ 提取码: ka4z)
2. 获取IMEI和UIN进行解码
用sqlcipher.exe打开提取到的EnMicroMsg.db,需要利用IMEI和UIN进行MD5运算获取密钥。
在模拟器中获取IMEI号 如下图
用RE文件管理器,打开/data/data/com.tencent.mm/shared_prefs下的system_config_prefs.xml文件.打开后,找到default_uin后的value值,如565698015
利用 IMEI-UIN的格式进行MD5加密运算。例如用866174440346175-1565698015加密后得到
选取32小写的前七位作为sqlcipher.exe打开EnMicroMsg.db的密码。
,导出message数据为csv格式 File - export - table as csv.
对csv数据进行筛选
可以在sqlcipher.exe中对message中的content进行筛选,但是select后不能保存。
select datetime(subStr(cast(m.createTime as text),1,10),'unixepoch', 'localtime') as theTime,
case m.isSend
when 0 then r.nickname
when 1 then '我'end as person,m.content
from message
m inner join rcontact r on m.talker = r.username
where m.type=1 and r.nickname = 'djh'
所以还是export为csv表格,利用python重谢写一个筛选程序。但是得把csv文件的编码格式转换成utf-8,用记事本打开csv,另存为时选择编码模式为utf-8。
import pandas
import csv,sqlite3
#新建数据库为djh_log.db
conn = sqlite3.connect('djh_log.db')
#读取提取出的CSV文件
df = pandas.read_csv('djh.csv',sep=",")
#存入my_chat表中
df.to_sql('my_chat',conn,if_exists='append',index=False)
#连接数据库
conn = sqlite3.connect('djh_log.db')
#获得油标
cursor = conn.cursor()
# 将content长度限定35以下,因为content中有时候会有微信发过来的东西
cursor.execute('select content from my_chat where length(content)<35')
# fetchall返回筛选结果
value = cursor.fetchall()
data = open("djh聊天记录.txt",'w+',encoding='utf-8')
# 将筛选结果写入 djh聊天记录.txt"
for i in value:
data.write(i[0]+'\n')
#关闭连接
data.close()
cursor.close()
conn.close()
词云分析
对生成的txt文档进行词云分析
import jieba
import wordcloud
#from scipy.misc import imread
from imageio import imread
mask = imread("心形.png")
f = open("djh聊天记录.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t) #对文本内容进行分词
txt = " ".join(ls) #用空格分隔
w = wordcloud.WordCloud( font_path = "C:\Windows\Fonts\msyh.ttc",mask = mask,\
width = 1000, height = 700, background_color = "white", \
)
w.generate(txt)
w.to_file("djh聊天记录.png")
https://pythondict.com/python-paintings/python-qixi-wechat-wordcloud/
刚开始会有关键词多次重复,这个与collocations参数有关,默认collocations=True,会统计搭配词。比如你的text是“我在拜访客户”,当collocations为True时,就会把“拜访客户”也当作一个词进行统计,所以会出现重复。将collocations=False后没有重复。