微信数据导出-整体框架

既可以从电脑端获取数据,也可以从手机端获取数据

手机端

准备数据库

手机端微信聊天数据存储在 /data/data/com.tencent.mm/MicroMsg/{hash}/EnMicroMsg.db,需要有 root 权限或者腾讯开发用户。因此最简单的方法就是将数据备份至一台有 root 权限的安卓设备中。

注意,微信设计相当糟糕,从手机备份至电脑的数据一般存放在 C:\Users\{UserName}\Documents\WeChat Files\{wxid}\BackupFiles\,电脑微信无法访问其中的数据,只能通过备份还原至手机微信后才可通过手机微信读取其中的信息。其次,电脑微信和手机微信中数据往往都存在一定程度的缺失(用户消息全存本地真是鬼才设计),需要综合两者才能得到比较完整的聊天记录,可以通过电脑微信的 迁移 功能将数据合并至手机。

关于有 root 权限的安卓设备,这里推荐安卓模拟器。即便是有 root 后的手机也推荐使用模拟器,因为模拟器中的手机微信和电脑微信之间传输数据全部都是在本机完成,速度相当快,特别是体验过微信那龟速备份后就更是如此。以我为例,最大速度甚至能跑到 23MB/s,这可是用 wifi 难以企及。

关于微信的备份,电脑微信无法选择将备份还原至哪个设备,因此需要在手机微信上退出登录后再进行还原。

提取数据库

有 root 权限

有 root 权限就比较简单,直接去那个目录复制到电脑即可。
但我使用的模拟器即便是开了 root 在自带的文件管理器中也无法找到那个目录,因此需要使用 ADB,ADB 功能繁多,这里只简单记录一下用到的命令。

1
2
3
4
5
6
7
# 需在模拟器设置中打开root和ADB,一般重启后生效
adb connect 127.0.0.1:2333 # ip和端口直接用模拟器设置中给的即可

adb devices # 查询当前ADB连接的设备

adb pull -s 127.0.0.1:2333 <source_path> <destine_path>
# `-s`参数指定设备名称,也就是`adb devices`中显示的名称,若只有一台设备连接可省略

但是我在 adb pull 时出现 permission denied,需要一些额外操作。

1
2
3
4
5
6
adb shell #进入ADB的交互式界面

su # 当前会话取得root权限,提示符`$`应该会变为`#`,未变说明设备未root或者其他错误

cp <source_path> <destine_path>
#可以先复制到`/sdcard/`中,然后再使用`adb pull`
无 root 权限

使用手机的备份功能,将备份文件解密后即可获取,具体可参见另一篇文章 微信数据导出-备份数据解密

获取密码

微信数据库密码的生成方式,是手机的 IMEI 号码与微信 uin 拼接起来之后的 MD5 值的前 7 位, MD5 取小写字母

IMEI 可通过手机拨号 *#06# 查看,每个卡槽一个 IMEI (取前 14 位),每部手机一个 MEID。但生成密码所用的 IMEI 不一定是当前手机的,有说法是注册时手机的 IMEI,也有说用 EMID
微信 uin 可以从 /data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml<int name="_auth_uin" value="uid" /> 获取,据说 \com.tencent.mm\sp\system_config_prefs.xml 也有,但是我没找到

但这个方法我一直都没成功,不知是不是真的 IMEM 不对
一些相关的文章已保存至 [[破解相关文章]],可供研究

破解密码

推荐使用该方法,因为密码长度为 7 位,太短了。即便是 3050 跑暴力破解也不需要半小时。
使用 SQLCipher-Password-Cracker-OpenCL,参见 SQLCipher-Password-Cracker-OpenCL使用记录

电脑端

获取数据库

这个不需要什么操作,很简单的复制即可,文件位于 C:\Users\<username>\Documents\WeChat Files\<wxid>\Msg\ 下,分为很多个,比如 .\Multi\MSG1.db
貌似一个数据库最大 240MB,超过后会分割为多个

破解密码

这个可以直接去内存里抓密码
参见项目:
AdminTest0/SharpWxDump
SpenserCai/GoWxDump
SpenserCai/GoWxDump

微信PC端数据库文件解密_微信db文件_异想之旅的博客-CSDN博客 这个博主称:

其中第一个项目在编译时就遇到了困难(本人没用过 C# 和 .NET),我最后是狠下心来跟着 这篇教程 下了个 VS 才编译出来,也将编译产物上传到了 我 Fork 的仓库,然而发给别人用的时候发现似乎兼容性比较差,悲……不过应该说自己在自己的设备上用 VS 编译是最可靠的

第二个仓库就方便很多,只要电脑上有 Go 环境直接执行 build.bat 就行(记得配置 go get 的代理,否则下载第三方包会很慢)。不过需要说明的是,建议大家只使用它的 show_info 功能,它的解密极其不可靠。

第三个为他自己编译结果,可以不需要 Go 环境

其他相关项目

微信聊天记录挖掘机(未找到官网,应该是闭源)
楼月电脑版微信聊天记录导出软件官方下载及使用说明(闭源收费)

wx-dump-key-v0.1.1.exe(半数引擎报毒,谨慎使用)

手机向电脑备份文件的破解

大多数人都说不可破解,但下面有一些线索可供参考
微信聊天记录 BAK_0_TEXT 和 BAK_0_MEDIA · Issue #4 · sumous/anti_sign · GitHub

杂项

GitHub - symbolic/ExportWeChatHistory: export wechat history 导出微信聊天记录
(闭源免费)

PC端微信数据库解密Python版【更新】 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
PC端微信数据库解密Python版 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
(需要 52pojie 账号与财富值,估计与我文章中采用的 python 脚本大差不差)

Site Unreachable(手机需要 root)

MAC/IOS 系统

IOS

IOS 是利用 iTunes 备份至电脑后用软件解密
微信聊天记录导出(闭源免费)
GitHub - BlueMatthew/WechatExporter: Wechat Chat History Exporter 微信聊天记录导出备份程序
GitHub - tsycnh/WeChatExporter: 一个可以快速导出、查看你的微信聊天记录的工具

MAC

MAC 与 win 类似,都是直接从微信的内存抓取数据库密码,然后对桌面版微信的数据库破解
GitHub - nalzok/wechat-decipher-macos: DTrace scripts to extract chat history from WeChat on macOS