导出微信聊天记录
摘要
微信是一个在简中互联网知名度很高的软件,但其用户体验一直备受诟病。其中一个痛点是换手机会丢失尿天记录。尽管可以通过电脑儿进行备份,但体验极差,且用户无法自由把玩自己的数据,非常不爽。本文使用 ADB 提取出微信的数据库,并提供解密方式。
有别于网上的教程们,我们不使用 sqlcipher 等软件,只用 ADB 和 python 完成操作。并且针对高版本(Android Q)出现的解密失败给出解决方案。
需要准备 root 过的 Android 手机。
如果你的手机不支持 root,可以考虑电脑安装 Android 模拟器,然后备份聊天记录至电脑,再在模拟器里把电脑里的聊天记录同步下来。
Step1 电脑安装 ADB 调试程序
Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本:https://dl.google.com/android/repository/platform-tools-latest-darwin.zip Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip
解压后将路径添加到 path,然后
adb
检查是否装好 ADB。
Step2 连接手机
用 USB 连接手机和电脑(记得手机打开 USB 调教调试)
adb devices
此时应该看到你的手机,类似这样:
List of devices attached
b5f0c03e device
如果没有,可能是需要安装手机驱动。
Step3 获得微信数据库
更多 ADB 命令:https://zhuanlan.zhihu.com/p/89060003
首先连接手机端 shell 并提升权限:
adb shell
su root
此时手机可能会弹出授权提示,授权即可。下一步打开数据库所在文件夹
cd /data/data/com.tencent.mm/MicroMsg
ls
你会看到里面有一长串字符的文件夹(可能有多个,一个微信号对应一个),文件夹名类似 ee1d************************e79f
(32位)。文件夹里的 EnMicroMsg.db
就是我们要的数据库了。但它在 /data
分区,adb 没有权限获取,所以我们要在 shell 里把它复制到手机里其他的地方。
cp /data/data/com.tencent.mm/MicroMsg/ee1d************************e79f/EnMicroMsg.db /sdcard/Download/ee1d.db
这个文件较大,可能会卡几十秒(我这个数据库足足有3个G)。
复制完后退出 shell 模式 (需要退两次,一次退出 root,一次断开连接):
exit
exit
此时回到电脑终端,我们要通过 adb pull
把手机上的数据库整过来:
adb pull /sdcard/Download/ee1d.db C:/Users/yourname/Desktop/
同样,文件巨大的话也会卡一会。复制完成后,别急着断开手机,一会还要用。
Step4 破解数据库密码
这个数据库是加密的,我们得破解它。破解密码需要两个数据:微信 UIN 和手机 IMEI。
再次进入手机 shell:
adb shell
su root
我们要获取微信的 UIN,它藏在一个文件里:
cat /data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml
里面有一个 <int name="_auth_uin" value="xxxx" />
,这个 value 就是 UIN。现在可以断开手机了。
然后打开手机拨号键盘,输入 *#06#
,可以看到 IMEI,记录下来。(双卡手机有两个 IMEI,通常我们使用第一个,但保险起见两个都记下来吧)
把 IMEI 和 UID 两个字符串直接拼接,然后做 MD5 编码(32位小写),结果的前 7 位就是数据库密码。(UIN 如果是负的也没事,直接当成字符串用就行。)
可以使用这个工具:http://tool.chinaz.com/tools/md5.aspx
解密失败的处理方法:
微信毕竟老奸巨猾,有可能有的人发现密码不对。此时可以尝试以下几种方案:
- 可以把 IMEI 换成 MEID 试试
- 把 IMEI 换成 1234567890ABCDEF (这个可能性较大,因为从 Android Q 开始,由于 Google 的安全策略,微信获取不到 IMEI,只能用 123…F 替代)
- 把 IMEI 换成 15 个 0
- 如果还不行,可以考虑暴力破解,密码是 7 位 16 进制小写,只有 16^7=268435456 种可能。甚至有人写好了暴力破解脚本,可以参考这里 ,用 GPU 只需要不到 1 个小时。
Step5 打开数据库
到了这一步,网上大多用 sqlcipher 操作,但我并不推荐,原因有三:
- sqlcipher 付费,需要折腾找破解版
- 如果数据库较大,导出时程序会崩溃,无法继续进行(我就是!)
- 图形界面没有敲代码逼格高!
接下来
https://www.jianshu.com/p/90224ab9cdf2
数据库毕竟不太方便,我们可以导出 CSV 方便后续操作。
点此下载 sqlcipher ,用软件打开数据库,输入密码,就可以看到里面内容了。
这个数据库里有很多东西,大家可以自行探索。聊天记录存在 message 表里,点击 File-Export,然后选择 Table name: message 即可。有了 csv,配合 python 就可以为所欲为了。
注意:如果数据库十分巨大,导出会卡一会。这时候导出完了