你的意思是,安卓微信几年都没改加密算法?
直接端上来吧!
当前安卓端微信(8.0.66)依然采用sqlcipher v4加密数据库。加密数据库文件名EnMicroMsg.db,root之后可以pull出来,不过要怎么解密呢?
只需要uin和imei即可。
1. 获取uin
uin = user information,每个微信号对应一个唯一的uin。uin可以直接从prefs.xml配置文件读取。经过测试,该配置文件可能出现在不同路径,应该与手机登陆、平板手机同时登录相关。
优先尝试这个路径(手机登陆)
/data/data/com.tencent.mm/MicroMsg/shared_prefs/system_config_prefs.xml如果上面文件不存在,尝试这个(手机平板同时登陆)
/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml两个文件虽然文件名不同,但结构一致,示例如下(已隐去隐私数据):
<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map> <boolean name="auth_info_prefs_use_new_ecdh" value="true" /> <int name="_auth_uin" value="0987654321" /> <boolean name="key_auth_info_prefs_created" value="true" /> <int name="key_auth_update_version" value="67****592" /> <string name="server_id">03******************3300</string> <string name="_auth_key">0a240************(无害化处理)************6da09</string></map>关键就是提取_auth_uin的value,是一个十位的正数或负数。这里以0987654321为例,记为uin。
2. 提取imei
IMEI(国际移动设备识别码),有很多获取方式:
- 拨号
*#06# - 设置 - 关于本机
- 包装盒 - 入网许可
需要注意,多卡设备往往会有多个IMEI,而且微信不一定真的能获取到IMEI,所以请优先采用以下方法,直接读取微信缓存的IMEI值:
尝试提取/data/data/com.tencent.mm/files/KeyInfo.bin,参考其他师傅博客可知,该文件内是RC4流加密的IMEI,密钥为 _wEcHAT_ 。那好,厨子一拖就出来了

结果发现,微信实际上使用一个占位符,1234567890ABCDEF 。推测高版本安卓限制,导致用户应用无法读取IMEI,恰巧微信也没改它的加密算法。
所以没必要真去提取IMEI,优先尝试 1234567890ABCDEF 这个占位符。
3. 计算密钥
微信使用的算法非常简单,有一些公式直接套:
-
数据库路径
"/data/data/com.tencent.mm/MicroMsg/" + md5("mm" + uin) + "/EnMicroMsg.db" -
数据库密钥
md5(imei+uin)[:7]举个例子,如果uin为
-1145141919,imei是1234567890ABCDEF,那么先拼接得到1234567890ABCDEF-1145141919负号不要漏下),然后进行一次md5计算,得到103208bd42aef57359c7c901ba4552cc,那么密钥就是前7️⃣位,即103208b
4. 解密数据库
sqlcipher v4,具体配置是,参考这个:
_pragma_cipher_compatibility=1啊,也就是默认配置,可以直接使用 ForensicsTool 一键解密:

拿到解密后的数据库,聊天记录在message表里:

参考文献:
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









