s
o
u
l
s
j
i
e

小米手机导出微信聊天记录

导出手机微信数据库

首先要做的第一步就是将手机端的微信数据库.db文件导出到电脑上。

小米手机

小米的话做法很简单,不需要进行root。

1. 首先进入手机的设置-更多设置-备份和重置-本地备份,输入密码,点击新建备份,把两个勾去掉,点击软件程序右边的尖括号,选择微信,点击确定,点击开始备份,等待完成就行了。

2.然后将手机连接电脑,打开手机目录下的MIUI/backup/AllBackup/yyyymmdd_xxxxxx/文件夹,将.bak文件拷贝到电脑上,我这里重命名为了com.tencent.mm.bak

3.然后用任意一种压缩包软件(我用的是7zip)打开这个com.tencent.mm.bak文件,并且将apps\com.tencent.mm\r\MicroMsg\systemInfo.cfgapps\com.tencent.mm\r\MicroMsg\CompatibleInfo.cfgapps\com.tencent.mm\r\MicroMsg\xxxx\EnMicroMsg.db三个文件解压到电脑上。这里xxxx是一串随机的字母,代表你的微信用户,每个人不一样,一般是最大的那个文件夹,我这里是下图所示文件夹:

其他手机通用做法

其他手机可能没有这么方便,一种办法是root之后去/data/data/com.tencent.mm/MicroMsg下面找这三个文件,但是很多人是不会去root的,所以介绍另一种方法。

首先电脑上安装一款安卓模拟器,然后里面下载手机微信并登录,最重要的一步就是将手机端聊天记录备份到电脑端微信,然后将电脑端聊天记录恢复到安卓虚拟器里的微信,这个功能是微信自带的,应该没有什么难度。

然后对安卓虚拟器进行root,这个也是设置里就有的,最后就能把三个文件都拷贝到电脑上了。

破解数据库密码

4.将上面的所有文件全部放在一个目录下。

5.然后命令行运行如下代码:

javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg

第三行就是数据库的密码了。

导出聊天记录

6.然后打开sqlcipher.exe软件,用它打开EnMicroMsg.db数据库,输入第五步得到的密码。

8.这时候会显示出很多的表格,点击菜单栏的File-Export-Table as CSV file,选择message表,并导出。


9.如果直接用excel打开这个表格,可能会显示乱码。所以新建一个excel表格,点击数据-来自文本,然后导入这个.csv文件

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上内容转自知乎:https://zhuanlan.zhihu.com/p/77418711

主要描述的内容:将聊天记录从数据库db文件导出至csv文件

原文是将:聊天记录用py处理,这里因为需求不同,我需要把聊天内容处理到sqlserver数据库,处理的语言用C#

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、创建表

1
2
3
4
5
6
7
--------------CREATE---------------
CREATE TABLE MSG(
ID INT IDENTITY(1,1) PRIMARY KEY,---自增主键
SENDNAME VARCHAR(200),---发送人姓名
SENDTIME VARCHAR(200),---发送时间
SENDCONTENT VARCHAR(MAX)---发送内容
)

二、创建程序

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WCT
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// 构造方法
        /// </summary>
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }
 
        /// <summary>
        /// CSV文件选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Multiselect = false;   //是否允许多选
            dialog.Title = "请选择要处理的文件"//窗口title
            dialog.Filter = "文本文件(*.db)|*.*";   //可选择的文件类型
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBox1.Text = dialog.FileName;
            }
        }
 
        /// <summary>
        /// 时间戳转时间
        /// </summary>
        /// <param name="timeStamp"></param>
        /// <returns></returns>
        private DateTime ConvertStringToDateTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }
 
        /// <summary>
        /// 数据入库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string CsvPath = textBox1.Text.Trim();
            this.log.Text = "csv文件载入中,请稍等......";
            CsvStreamReader csv = new CsvStreamReader(CsvPath);
            DataTable dt = csv.csvDT;
            List<message> messages = new List<message>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                message ms = new message();
                ms.msgId = dt.Rows[i]["\"msgId\""].ToString();
                ms.msgSvrId = dt.Rows[i]["\"msgSvrId\""].ToString();
                ms.type = dt.Rows[i]["\"type\""].ToString();
                ms.status = dt.Rows[i]["\"status\""].ToString();
                ms.isSend = dt.Rows[i]["\"isSend\""].ToString();
                ms.isShowTimer = dt.Rows[i]["\"isShowTimer\""].ToString();
                ms.createTime = dt.Rows[i]["\"createTime\""].ToString();
                ms.talker = dt.Rows[i]["\"talker\""].ToString();
                ms.content = dt.Rows[i]["\"content\""].ToString();
                ms.imgPath = dt.Rows[i]["\"imgPath\""].ToString();
                ms.reserved = dt.Rows[i]["\"reserved\""].ToString();
                ms.lvbuffer = dt.Rows[i]["\"lvbuffer\""].ToString();
                ms.transContent = dt.Rows[i]["\"transContent\""].ToString();
                ms.transBrandWording = dt.Rows[i]["\"transBrandWording\""].ToString();
                ms.talkerId = dt.Rows[i]["\"talkerId\""].ToString();
                ms.bizClientMsgId = dt.Rows[i]["\"bizClientMsgId\""].ToString();
                ms.bizChatId = dt.Rows[i]["\"bizChatId\""].ToString();
                ms.bizChatUserId = dt.Rows[i]["\"bizChatUserId\""].ToString();
                ms.msgSeq = dt.Rows[i]["\"msgSeq\""].ToString();
                ms.flag = dt.Rows[i]["\"flag\""].ToString();
                ms.solitaireFoldInfo = dt.Rows[i]["\"solitaireFoldInfo\""].ToString();
                ms.historyId = dt.Rows[i]["\"historyId\""].ToString();
                messages.Add(ms);
            }
            messages = messages.Where(o => o.talker == "这里是会话微信ID" && !o.content.Contains("<msg>")).ToList();
            this.log.Text = "csv文件载入成功,准备数据入库";
            var task = Task.Run(() =>
            {
                DB db = new DB(" Data Source=127.0.0.1;Initial Catalog=WX;Integrated Security=SSPI; ");
                db.OpenDB();
                int total = 0;
                foreach (var item in messages)
                {
                    total++;
                    //记录字符串
                    string OneReaderStr = string.Empty;
                    //发送人
                    string senders = string.Empty;
                    if (item.isSend == "1")
                    {
                        senders = "SOULJIE";
                    }
                    if (item.isSend == "0")
                    {
                        senders = "QBB";
                    }
                    ////发送时间
                    string sendtime = ConvertStringToDateTime(item.createTime).ToString("yyyy-MM-dd HH:mm:ss");
                    string content = item.content.Replace("'", "\"");
                    int a = db.ExecuteNonQuery("INSERT INTO [dbo].[MSG]([SENDNAME],[SENDTIME],[SENDCONTENT]) VALUES ('" + senders + "','" + sendtime + "','" + content + "')", null);
                    if (a >= 1)
                    {
                        this.log.Text = "成功处理第" + total + "条记录!";
                    }
                }
                db.Close();
            });
        }
    }
}

 

 

 至此,数据全部导入SQL数据库供我们使用。

相关程序、源码下载地址:

https://gitee.com/soulsjie/WXExportPro

 

------------------------2023-02-23更新--------------------------------

由于MIUI升级后导致数据库文件无法正常解密,该方法已经不适用!

posted @   soulsjie  阅读(1953)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
你累吗?累就对了,当你觉得累时证明你在走上坡路!-----NotFoundObject - 2016-12-14 08:43
点击右上角即可分享
微信分享提示