微信数据解密指南!
一、微信本地数据加密概况
1)Android 手机
聊天记录主库:
/data/data/com.tencent.mm/MicroMsg/[32位串]/EnMicroMsg.db加密:SQLCipher(AES-256-CBC),全库密文
密钥:早期是 MD5 (IMEI+UIN) 前 7 位;高版本(8.0+)改成运行时内存密钥,不再是简单 7 位密码
2)Windows 微信(4.0+)
路径:
C:\Users\用户名\Documents\WeChat Files\微信号\Msg\ChatMsg.db加密:SQLCipher 4,密钥只在内存里,一关微信就没
二、Android 微信解密(自己的手机,root)
前提
手机已 root
能进
/data/data/com.tencent.mm/微信已登录
步骤 1:导出 EnMicroMsg.db
adb root adb pull /data/data/com.tencent.mm/MicroMsg/$(ls /data/data/com.tencent.mm/MicroMsg/ | grep -v "EnMicroMsg.db")/EnMicroMsg.db
步骤 2:获取密钥(两种方法)
方法 A:旧版微信(≤8.0.30)IMEI+UIN 算密钥
取 IMEI:
*#06#或adb shell dumpsys iphonesubinfo取 UIN:
root 后进
/data/data/com.tencent.mm/shared_prefs/找
xxx_preferences.xml,搜uin字段计算:
plaintext密钥 = MD5(IMEI + UIN) 的 32位小写结果 取前7位
方法 B:高版本微信(8.0+)Frida 抓内存密钥
手机装 frida-server,电脑装 frida
脚本
wechat_hook.js:
Java.perform(function () {
var SQLiteDatabase = Java.use("com.tencent.wcdb.database.SQLiteDatabase");
SQLiteDatabase.openInner.implementation = function (a, b, c, d) {
console.log("[+] 数据库路径: " + a);
console.log("[+] 密钥(bytes): " + JSON.stringify(b));
return this.openInner(a, b, c, d);
};});运行:
frida -U -n com.tencent.mm -l wechat_hook.js
会直接打出 AES 密钥(16/32 字节)
步骤 3:用 SQLCipher 解密
工具:DB Browser for SQLite(支持 SQLCipher) 或 命令行 sqlcipher
命令行示例:
sqlcipher EnMicroMsg.db sqlite> PRAGMA key='刚才拿到的密钥';sqlite> .output plain.db sqlite> .dump sqlite> .exit
得到 plain.db,就是明文聊天记录库
三、Windows 微信 4.0+ 解密(自己的电脑)
核心难点
密钥只在微信运行时内存中,文件上不留密钥
工具方案(一键内存抓密钥 + 解密)
1)安装 PyWxDump
pip install pywxdump
2)自动抓密钥 + 解密
# 自动扫描微信进程,提取密钥并解密所有数据库python -m pywxdump dump --auto







