大家好,我是机灵鹤。
今天教大家如何破解微信聊天数据库,导出自己的微信聊天记录。
注:以下教程都是基于 windows 操作系统和安卓手机,苹果用户有可能不适用。
1. 准备工作
需要准备以下工具和运行环境。
1.1 安卓模拟器
微信数据库文件位于手机系统目录下,需要 root 后的手机才能访问到。
不过由于 root 手机有一定的技术门槛和变砖风险,而且 root 后手机安全性也会下降,甚至失去保修资格。
所以建议没有搞机经验的新手,使用 root 后的 安卓模拟器
替代。
我这里使用的是 逍遥模拟器
。
下载地址:https://www.xyaz.cn/
1.2 数据库软件
微信数据库导出以后,需要通过数据库软件 sqlcipher.exe
打开。
1.3 安装软件
1. PC 版微信
用来通过备份和恢复聊天记录,将聊天记录转移到已经 root 后的安卓模拟器中,方便后续导出。
2. 安卓版微信
在安卓模拟器中,通过应用商店或浏览器,下载并安装 微信。
3. re 文件管理器
在安卓模拟器中,通过应用商店或浏览器,下载并安装 re文件管理器
。
注:安装 re 文件管理器,是由于模拟器自带的文件管理器无法打开系统根目录。
1.4 Java 环境
破解微信数据库密码,需要运行一段 java 代码,所以需要安装 java 运行环境。
安装教程:https://www.runoob.com/java/java-environment-setup.html
2. 破解流程
总体流程分为三步:
- 进入手机系统目录,将微信聊天数据库拷贝出来
- 破解数据库密码
- 打开数据库,将聊天记录数据表导出
2.1 导出聊天记录数据库
本节教程讲解在手机未 root 的情况下,如何通过安卓模拟器来导出聊天记录文件。手机已 root 的朋友可以直接跳至
2.1.3 拷贝数据库文件
。
2.1.1 备份聊天记录至电脑
首先登录 PC 版微信,点击左下角 备份与恢复
,选择 备份聊天记录至电脑
。
2.1.2 聊天记录恢复至模拟器
启动安卓模拟器并开启 root
模式。
在模拟器上登录安卓版微信,然后通过 PC 版微信进行聊天记录恢复。
注:模拟器登录微信后,PC版微信可能需要重新扫码登录。
2.1.3 拷贝数据库文件
在安卓模拟器中,打开 re文件管理器
软件,进入系统根目录。
此时,我们需要找到两个文件并导出。
首先打开 /data/data/com.tencent.mm/MicroMsg
文件夹。
【这里放一张图】
找到 systemInfo.cfg
文件并导出,这是我们需要找的第一个文件。
【这里放一张图】
然后进入一个名字是一长串随机字母的文件夹中,找到 EnMicroMsg.db
文件并导出,这是我们需要找的第二个文件。
【这里放一张图】
导出文件的方法每个模拟器可能有所差异,这里我使用的逍遥模拟器。
只需要将文件拷贝到共享目录 storage/emulated/0/Download/
下,即可导出文件,导出的文件在电脑的 下载/逍遥安卓下载
文件夹中。
这里简单解释一下,这两个文件是什么。
EnMicroMsg.db
:微信聊天记录数据库systemInfo.cfg
:微信系统配置文件,可以用它计算得到数据库密码。
2.2 破解数据库密码
打开 sqlcipher.exe
,点击 File
-> Open Database
打开 EnMicroMsg.db
。
可以发现,数据库是加密的,需要输入密码才能打开。
查阅资料后得知,数据库的密码生成规则是:
将手机的
IMEI
值与微信的uin
值拼接,得到的字符串计算MD5
,取32 位小写值
的前七位
即为数据库密码。
举个例子:
假设
IMEI
值1234567890ABCDEF
,uin
值123456789
,两个值直接拼接后为1234567890ABCDEF123456789
,经过 md5 加密后,其 32 位小写的值为3a57b96eaf77b124fae97d1ee1e120e4
,取其前 7 位数3a57b96
,即为数据库密码 。
IMEI
和 uin
值具体代表什么含义我们不需要关心,我们只需要知道,这两个值保存在 systemInfo.cfg
文件中。
下面的代码可以从 systemInfo.cfg
文件中提取出 IMEI
和 uin
值。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Map;
public class MapTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// replace with your own path of systemInfo.cfg
FileInputStream file = new FileInputStream("E:/systemInfo.cfg");
ObjectInputStream mObjectInputStream = new ObjectInputStream(file);
Map map = (Map) mObjectInputStream.readObject();
for (Object key: map.keySet()) {
System.out.println("key: " + key + ", value: " + map.get(key));
}
// System.out.println(map);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
首先创建一个文本,重命名为 MapTest.java
,复制上面的代码段到文档里,保存(注意修改代码第 16
行,改成自己的 systemInfo.cfg
文件路径)。
然后打开命令行工具,输入下面的命令,运行
javac MapTest.java
java MapTest
即可打印出 systemInfo.cfg
文件中的键值对信息。
其中,键 1
对应的值为 uin
值,键 258
对应的值为 IMEI
值。
如果没有键 258
,则 IMEI
值取默认 1234567890ABCDEF
。
MD5 值计算:https://md5jiami.bmcx.com/
2.3 聊天数据表导出
经过前一步,我们破解了数据库 EnMicroMsg.db
的密码,成功打开了数据库。
接下来,导出需要的聊天记录数据表。
点击 File
-> Export
-> Table as CSV file
,然后选择 Table name
为 message
,点 Export
按钮完成导出。
设置导出的文件名为 message.csv
,然后保存即可。
聊天记录的 csv
文件可以用 excel 直接打开查看。
至此,我们成功导出了微信的聊天记录文件。
后续你可以将其整理排版成文档留存,也可以写脚本进行数据分析。
具体怎么玩就看你自己的想法了。
3. 参考资料
【1】http://www.javashuo.com/article/p-dyceeqay-nx.html
【2】https://blog.csdn.net/jiezhi2013/article/details/22181771
【3】https://blog.csdn.net/F0ED9cZN4Ly992G/article/details/81517739
欢迎关注公众号【机灵鹤】
我是机灵鹤,一个代码写的不错的程序员。
导出内容都是问号,请问怎么解决
有可能是编码问题,设置一下文件的编码就好了,乱码类型可以参考 https://smartcrane.tech/archives/161/
imei和uni 得到的密码打不开微信数据库 求大佬帮忙 十分感谢!