文章目录序言一、任务分析二、工具三、步骤1 .数据获取数据库计算密码推导数据库2 .数据清洗(具体方法稍后补充)3.数据分析
昨天,和她讨论谁给对方发的信息多,两人各执一词,事实证明我输了^
一、任务分析统计微信聊天记录分为三步——数据获取、数据清洗和数据分析。 大致说明各部分需要做什么。
三步中最难的是数据获取。 与QQ不同,微信不提供导出聊天记录的工具,所以必须自己获取。 微信将聊天记录保存在名为EnMicroMsg.db的数据库中。 遗憾的是,虽然数据库已加密,但幸运的是可以计算密码,因此必须首先获取此db文件,然后解密并导出。 这样就完成了数据获取部分。 ((听起来不是很容易吗) ) )
后两步很简单。 把记录过筛后,用python分析就可以了。
二、工具箱蓝席SQLCipherPython三、第一步.通过对数据获取来源的分析可以看出,需要获取名为EnMicroMsg.db的数据库文件及其密码。 如果手机没有Root过的话,就需要使用模拟器。 我在这里用的是蓝牙堆栈。
DB - 将手机上的聊天记录备份到PC
将pc微信左下角的三棒备份和恢复聊天记录备份到电脑上
按照指示进行备份即可
- 将刚备份的聊天记录恢复至模拟器
在模拟器上安装微信,在PC上点击左下角的三个栏“备份和恢复-恢复聊天并记录在手机上”。
按照提示恢复,将原来的手机聊天记录转移到了模拟器上。
-获取数据库文件
a. 首先获取模拟器的root权限
右上角的向下箭头-设置-选中引擎设置,获取root权限
b.找到数据库文件存放的路径
该路径下有两个以数字和字母名称命名的文件夹,其中之一是我们需要的EnMicroMsg.db
长按鼠标,然后单击右上角的复制图标即可进行复制
c.将数据库复制到PC
通过蓝色叠加还可以更改pc上的文件夹,因此将数据库文件直接复制到上述路径中。 我复制到了一个叫Document的文件夹里,所以和我电脑上的文档相对应,打开就可以看到我们的数据库文件。
计算密码基于上述分析,当前还必须计算用md5加密了计算机IMEI和auth_uin的数据库的密码。
a.获取IMEI
把小工具下载到蓝色榻榻米上
打开后,单击分析器,然后单击我的IMEI,IMEI将自动输入到输入框中。 我把那个记录下来。
b.获取auth_uin
如上所述打开路径时,上面的文件夹中有很多文件都有auth_uin。 例如,上面指出的文件中有。 我把那个记录下来。
c.计算密码
这样,获得了计算密码的两个大的除法器——IMEI和auth_id。 使用MD5在线加密工具,在左侧的框中输入IMEI和auth_id,中间不要插入字符,加密方式选择32位的较小者。
加密的前七位是这个数据库的密码。 大工作结束了。
导出数据库使用SQLCipher导出数据库。 就算在网上找也很久不靠谱了。 上传以后能用的东西(也可以自己找)。
打开EnMicroMsg.db时,系统会提示您输入密码。 输入现在取得的密码的话就会解开
找到并导出消息数据库
这样就得到了所有的数据!
2 .数据清洗(具体方法稍后添加)1.将时间戳转换为北京时间
2 .处理图片、链接等非文本聊天记录
……
3 .数据分析目前只是统计了两个人的信息量,创造了简单的语言。
新闻数量(啊,是我输了呜呜) :
语言之云:
代码:
fromosimportpathfrompilimportimageimportnumpyasnpimportmatplotlib.pyplotaspltimportjiebafromwordcloudimportwordcloud, STOPWORDS#当前文件路径d=path.dirname(__file__ ' ) readthewholetextfile=open ) path.join ) d, ' message.txt' encoding='utf-8 ' ).read(#进度分词punc=' abcdefghijklmnopqrstuvwxyz0123456780 forc infile : ifcnotinpunc : temp.append (c ) newtext=''.join(temp ) default _ mode=Jie ba.cut qdgb _ mask='2.jpg ' ) ) ) ) stopwords=set ) stopwords ) stopwords.add此字体文件为需要下载background _ color=' wenquanweimihei-1.TF ',background _ color=' stop words=stop words (# generatewordce interpolation=' bilinear ' (PLT.axis ) ' off ' (PLT.figure ) ) plt.show ) jqdgb_mask,cmap=plt.cm.gray,