制作微信聊天记录词云,python编程超强实战,获取微信数据库密码


前言

春暖花开,万物复苏,又到了一年里恋爱的季节。情人节,女神节,每个节日都是秀恩爱的好时光,不过香奈儿、SKII这些事件俗物已经不能满足程序员们表达爱情的方式了。网上关于这方面的文章也很多,基本上的思路都是通过手机root,获取IMEI+UIN,通过MD5加密,前七位为EnMIcroMsg.db的密码。这种方法笔者也尝试过,也许是微信修改了加密方式,总之以失败告终。幸好,我们每个程序员对于技术都是锲而不舍的追寻着,终于让我找到一套能破译微信数据的方法,配合python编程,只要有一点点编程基础就能给女朋友一个大大的惊喜,何乐而不为呢。言归正传,让我们一同来感受编程的魅力。

工具准备

1、python

2、Mumu模拟器

3、adb

4、frida

5、sqlcipher

进入实战

制作微信词云的我们基本上可以分为两步走,第一步为获取微信数据库并破解密码,第二步将得到的聊天记录使用python进行加工制作成词云。

1、下载mumu模拟器、在模拟器中下载微信

2、使用windows客户端版的微信进行备份,点击备份聊天记录至电脑 

3、手机端选择备份的对象

4、导出完毕后打开模拟器,登录模拟器的微信,勾选我们刚刚导出的聊天记录,并在模拟器上点击开始恢复。

至此,我们需要的聊天记录已经备份到模拟器上了,下一步只需要找到EnMicroMsg.db数据库并破译数据库密码

5、安装adb,大家可以网上下载也可以用笔者提供的

链接:https://pan.baidu.com/s/1EUXBQ6KBP7VXa0FiEgybxA

提取码:th8j

将adb放置在c盘任意为止,添加环境变量至path

 

 6、frida是一个轻量级别的hook框架。官网介绍:Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers.

frida由两部分组成:一部分是运行在系统上的交互工具frida CLI,另一部分是运行在目标机器上的代码注入工具frida-server。

pc端安装frida 和frida-tools,输入win+r,cmd进入dos界面,如果你已经安装了python和pip,直接用命令行安装

pip install frida
pip install frida-tools

安装完之后用查看安装版本,好去官网下载对应的frida-server,frida-server 服务端版本下载,https://github.com/frida/frida

在dos界面启动adb

adb start-server #启动adb

adb connect 127.0.0.1:7555#连接模拟器,mumu模拟器端口7555,其他软件请自行百度

adb devices #查看连接设备

本地解压frida-server,通过adb把它放到模拟器上

adb C:\push frida-server-15.1.7-android-x86_64 /data/local/tmp #上传frida-server

adb shell #进入Android系统

进入frida-server目录:

cd /data/local/tmp

添加权限:

chmod 777 frida-server-15.1.7-android-x86_64


启动:

./frida-server-15.1.7-android-x86_64

新开一个dos界面,端口转发,验证

adb forward tcp:27042 tcp:27042 #端口转发
adb forward tcp:27043 tcp:27043 #端口转发
frida-ps -U #验证,如果显示出进程列表说明启动成功

使用frida获取EnMicroMsg.db的密码,运行hook.py文件,代码如下

import frida 
import sys   
 
jscode = """
    Java.perform(function(){ 
        var utils = Java.use("com.tencent.wcdb.database.SQLiteDatabase"); // 类的加载路径
         
        utils.openDatabase.overload('java.lang.String', '[B', 'com.tencent.wcdb.database.SQLiteCipherSpec', 'com.tencent.wcdb.database.SQLiteDatabase$CursorFactory', 'int', 'com.tencent.wcdb.DatabaseErrorHandler', 'int').implementation = function(a,b,c,d,e,f,g){  
            console.log("Hook start......");
            var JavaString = Java.use("java.lang.String");
            var database = this.openDatabase(a,b,c,d,e,f,g);
            send(a);
            console.log(JavaString.$new(b));
            send("Hook ending......");
            return database;
        };
         
    });
"""
 
 
def on_message(message,data): #js中执行send函数后要回调的函数
    if message["type"] == "send":
        print("[*] {0}".format(message["payload"]))
    else:
        print(message)
     
process = frida.get_remote_device()
pid = process.spawn(['com.tencent.mm']) #spawn函数:进程启动的瞬间就会调用该函数
session = process.attach(pid)  # 加载进程号
script = session.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
process.resume(pid)  # 重启app
sys.stdin.read()

运行结果如下,至此,成功破译密码:

 将EnMicroMsg.db文件从模拟器复制到电脑上

adb  pull /data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxx/EnMicroMsg.db C:\XXXX

使用 SqlCipher 工具打开EnMicroMsg.db,sqlcipher下载,

链接:https://pan.baidu.com/s/1G5L9OXhA0mhQe2KGEuN98Q

提取码:pqxq

打开并用table from csv file导出数据库,导出的数据记得用utf-8保存一下,否则程序读取时候会报错

 7、使用python将得到的数据制作成词云

首先对得到的数据进行清洗,得到真正的聊天记录

import pandas
import csv, sqlite3
conn= sqlite3.connect('chat_log.db')
# 新建数据库为 chat_log.db
df = pandas.read_csv('chat_logs.csv', sep=",")
# 读取我们上一步提取出来的csv文件,这里要改成你自己的文件名
df.to_sql('my_chat', conn, if_exists='append', index=False)
# 存入my_chat表中

conn = sqlite3.connect('chat_log.db')
# 连接数据库
cursor = conn.cursor()
# 获得游标
cursor.execute('select content from my_chat where length(content)<30')
# 将content长度限定30以下,因为content中有时候会有微信发过来的东西
value=cursor.fetchall()
# fetchall返回筛选结果

data=open("聊天记录.txt",'w+',encoding='utf-8')
for i in value:
    data.write(i[0]+'\n')
# 将筛选结果写入 聊天记录.txt

data.close()
cursor.close()
conn.close()
# 关闭连接

然后,进行词云分析,这里的代码比较简单,大家可以根据自身需要进行编程。jieba、wordcloud、imageio这三个库使用pip安装经常出错,建议可以下载安装包安装。

安装过程会提示需要安装"Microsoft C++ Build Tools",visualcppbuildtools_full.exe安装容易出错,建议下载完整版:

链接:https://pan.baidu.com/s/1MIDa-ZbmfYBU9H840x7DoA
提取码:i1yr

import jieba
import wordcloud
import imageio
mask = imageio.imread("zgdt.jpg") #词云图片,按自己喜好修改
f = open("聊天记录.txt", "r", encoding = "utf-8") #刚才清洗出来的聊天记录
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(font_path = "msyh.ttc", mask = mask, width = 1000, height = 700, background_color = "white")
w.generate(txt)
w.to_file("grwordcloud.png") #生成词云图片

这样我们词云就制作完成了,看一下效果,一首精忠报国送给大家!