参考文章:
- http://www.520monkey.com/archives/845
- https://blog.greycode.top/page/2/
- https://zhuanlan.zhihu.com/p/616008078
- https://blog.csdn.net/weixin_39517298/article/details/119006820
- https://github.com/103style/android-database-sqlcipher/tree/master?tab=readme-ov-file
- https://zhuanlan.zhihu.com/p/627266063
- https://blog.csdn.net/u012132482/article/details/117898462
- https://blog.csdn.net/weixin_39517298/article/details/119006820
准备工作
(当前微信版本是8.0.45)
- 小米手机未root,root了的机器更简单
- SQLite编辑器应用
- termux
- MT管理器或NP管理器
第一步 备份微信聊天记录
- 使用手机自带的备份功能备份,文章以小米手机为例
- 以小米手机为例,设置->搜索"备份"->选择"备份与恢复"->手机备份与恢复
- 选择备份微信应用的数据
第二步 找到备份文件位置
- 小米手机备份位置
/storage/emulated/0/MIUI/backup/AllBackup/20240120_212521/微信(com.tencent.mm).bak
第三步 termux使用7zip解压文件(可以跳过不解压)
- 如果不需要所有的文件,可以跳过这步
- 解压步骤:
# 命令行执行
apt update
apt install p7zip
termux-setup-storage # 获取外置存储卡权限,获取之后会有storage/目录
7z x '~/storage/shared/MIUI/backup/AllBackup/20240120_212521/微信(com.tencent.mm).bak' -o ''~/storage/shared/0' # -o 后面时解压后的目录,请自行修改
# 解压过程中可能会报错,不用管,等待解压结束
第四步 找到关键文件
- 在压缩包中或解压后的目录中搜索以下三个文件,存放到某个文件夹下
EnMicroMsg.db:加密数据库。登过多个微信就会有多个
app_brand_global_sp.xml:多个uin码,登过多个微信就有多个,找到下面标签,string标签内即为uin码
<set name="uin_set">
<string>xxxxxxxxx</string>
<string>xxxxxxxxx</string>
</set>,
auth_info_key_prefs.xml: 最后一次登录用户的uin码,找到标签 <int name="_auth_uin" value="xxxxxxxx" />,value值即为uin码,有-号不要删除
-
提示微信文件过大,可能搜索时间过长,可以先找到auth_info_key_prefs.xml,找到uin码
-
找个在线md5网站(如:https://www.sojson.com/md5/),输入mm+uin,比如你的uin是123456,然后搜索后面加密的值即为这个用户记录存储的根目录
第五步 获取当前手机的IMEI串号
- 小米手机在拨号界面输入
*#06#
第六步 获取数据库密码
- 打开第4步的md5网站,用
imei+uin
计算md5,然后去结果的前7位小写即为数据库密码, - 这里我们计算四个密码
MEID+uin
、IMEI1+uin
、IMEI2+uin
、1234567890ABCDEF+uin
,记录下四个密码
第七步 termux迁移数据库
使用如下命令
cd ~/storage/shared/0/ # 进入第四步骤EnMicrMsg.db文件的目录,自行替换
apt update
apt install sqlcipher # 安装sqlcipher
sqlciper ~/storage/shared/0/EnMicroMsg.db # 打开数据库,会进入sqlcipher的交互命令行
sqlite> PRAGMA key='xxxx'; #上一步计算的密码
sqlite> select count(1) from sqlite_master; # 返回数据,没报错则说明密码正确,报错则再执行上一条命令和这一条
sqlite> PRAGMA cipher_migrate; #数据库迁移,迁移需要一点时间
sqlite> SELECT count(1) FROM sqlite_master; # 再验证
sqlite> .q # 退出sqlcipher
第八步 termux将加密数据库导出到未加密数据库中
sqlciper ~/storage/shared/0/EnMicroMsg.db # 打开数据库,会进入sqlcipher的交互命令行
sqlite> PRAGMA key='xxxx'; # xxxx替换为上一步正确的密码
sqlite> .output 'MicroMsg.sql' # 转储/备份 数据库前先指定输出文件
sqlite> .dump # 备份数据库
sqlite> .open DeMicroMsg.db # 打开一个新的数据库, 无则创建
sqlite> .read 'MicroMsg.sql' # 执行sql文件,恢复到空数据库
sqlite> .databases # 查看数据库列表
sqlite> SELECT count(1) FROM sqlite_master; # 执行SQL语句
sqlite> .q # 退出
至此,我们解密完成,使用SQLite编辑器即可打开
,下载地址https://www.123pan.com/s/J5Nsjv-S1BN.html提取码:4t9f
表说明
- userinfo 表:存储个人信息,其中 id 为 2 的 value 是个人的微信 id。
- message 表:存储所有的聊天记录。
- chatroom 表:存储所有群聊信息。
- img_flag 表:存储所有用户的在线头像的信息。如果本地 avatar 文件夹没有头像时,可以用这个表的地址来访问用户的头像,其中 reserved2 是缩略图,reserved1 是高清图。
- rcontact 表:存放所有的好友信息。
更多语音、图片、文件的解密请参考https://blog.greycode.top/posts/android-wechat-bak/
本文由【产品经理不是经理】gzh 同步发布,欢迎关注