Recovery of mobile WeChat chat records

Youth

One day in 2019, a friend asked me “Can you restore the WeChat chat history whicht was deleted by my operation”. I said it was simple. So I picked up my friend’s phone. When I started, I realized how big my cowhide is!

Backgroud

手机微信的聊天内容都储存在EnMicroMsg.db里,它是一个Sqlite数据库,每条聊天数据都有一个index(索引)值,一个value(数据)值(聊天数据内容)。

注意事项:关于恢复已经删除的微信聊天记录

  • 安卓的微信版本号小于等于5.2
    微信的删除操作只有一步,它只将数据库EnMicroMsg.db 里的index值清0来表示此条数据已经无效,可以被清除或覆盖。所以此时我们可以读取value值来恢复被误删的微信聊天记录。
  • 安卓微信版本5.3+
    删除操作有2步,第一步将聊天数据的Index值清零;第二步将聊天数据的value值清零。所以此时我们读取到value值为零或残缺,自然无法正确恢复聊天内容了。
  • iPhone版的微信不受此影响。

所以,当安卓微信的版本号大于5.3时,那么就不用再想着恢复已经被我们手动删除的聊天内容了。

那些打着可以恢复100%聊天数据的旗号的人99.99%都是骗人的。
剩下的那0.01%或许有权限从微信服务器来获取我们的聊天记录。

正⺙*广亻寸*强制所有通信商必须将用户数据至少保留3个月,重要数据必须保留6+个月,如果你知道 爱德华·斯诺登 是谁,就不会对此事有多惊讶了。

Ready

一、从手机里导出微信聊天数据

使用手机自带备份APP将微信的应用数据备份至SDCard上,备份文件不要加密。小米/华为/Vivo/三星等等手机都自带备份APP,直接使用即可。
而数据备份的时间视微信的应用数据大小而定,10G的应用数据大概需要使用2~3小时。

如果你的手机已经root,那么你可以直接使用adb/data/data/com.tencent.mm复制或使用第三方备份APP。

在备份出来的文件夹里找出com.tencent.mm,我们需要它。

二、准备数据库 EnMicroMsg.db 的查看工具

天翼云下载地址:工具合集(访问码:lk7e)

  • 飞零微信QQ聊天记录恢复助手
  • SqlCipher v2.1

Cracking the WeChat database

EnMicroMsg.db位于com.tencent.mm/MicroMsg/[weixin_name]/下。
文件夹[weixin_name]的名字为32位的md5值,如d41d8cd98f00b204e9800998ecf8427e,一个微信号对应一个文件夹。
如果有多个[weixin_name],那么此微信肯定登录过多个微信号。

One、飞零微信QQ聊天记录恢复助手

这个工具的免费功能只能查看不能导出聊天数据,如果需要导出聊天数据则需付费购买终身使用权。

但不可否认它的使用方法十分简便,直接打开并加载微信数据库即可显示出聊天内容。
加载界面
它还可以尝试扫描已经删除了的聊天数据,当然免费版的即使扫描出来也只显示每条聊天内容的第一个字。
如果它扫描出来了,你可以去付费查看或导出聊天内容的全部,如果没有扫描出来,就不用再去付费了。
误删的聊天数据

此工具的具体使用方法详见安卓、苹果微信恢复删除记录通用教程

Two. Use SqlCipher

SqlCipher’s version must be v2.1. other versions cannot be opened database.

1. 获取数据库EnMicroMsg.db的密码

微信数据库EnMicroMsg.db的密码是由MD5(IMEI + uin).substring(0, 7)生成。
要获取数据库的密码,首先要查找手机IMEI和微信号的uin

Get IMEI

方法有两种:

  • 方法一、在com.tencent.mm/shared_prefs/DENGTA_META.xml里查找名为IMEI_DENGTA的值
    uin
  • 方法二、拨号界面输入*#06#即可获取IMEI。这个短指令能够获取手机的IMEI、MEID等多个设备ID。但是系统会随机选择一个作为加密算法所需的IMEI,所以我们需要将它显示的数据全部记录下来,之后再分别与uin计算生成密码。

Get uin

uin(unique identifier),唯一标识符(整数类型),微信分配每个用户的唯一标识符,它具有不可重复性。
也就是说这个世界上没有两个uin相同的微信号。

那么如何查看微信号的uin呢?方法有两个:

  • 方法一、uin存储在com.tencent.mm/shared_prefs/auth_info_key_prefs.xml里,在这个文件里查找auth_uin
    uin
  • 方法二、登录web微信,按F12打开网页调试工具,然后ctrl+F搜索uin,可以找到一串长长的URL,里面的uin就是当前登录的微信的uin

Caculate the password of database

  • IMEI中的字母必须为大写
  • MD5值中的字母必须为小写

这里我们使用在线MD5计算,计算IMEIuin连一起的字符串的MD5值,密码为32位小写的前七个字符。

IMEI1234567890ABCDEFuin987654321,此时计算123456789ABCDEF987654321的MD5值为ae8bd123db344180e9e6cf314e4ae532,那么密码就为ae8bd12
计算密码

2、查看微信数据库

  • 使用sqlcipher.exe打开com.tencent.mm/MicroMsg/[weixin_name]/EnMicroMsg.db,在弹出的窗口输入刚刚生成的7位密码。
    输入密码
  • 接下来就可以愉快的查看表结构了,还可以选择Browse Data查看数据,也可以选择Execute SQL执行sql语句了。
    数据库

至此微信手机本地的数据库已经被我们打开了。
PC端的微信也是使用Sqlite数据库,但PC端的密码为32位,如何获取请自行搜索。


References:

  • foundkey-cnblog
  • blackfeather
  • fenloger
  • csdn