安卓微信取证学习

安卓微信取证学习
不是炒米线你的意思是,安卓微信几年都没改加密算法?
直接端上来吧!
当前安卓端微信(8.0.66)依然采用sqlcipher v4加密数据库。加密数据库文件名EnMicroMsg.db,root之后可以pull出来,不过要怎么解密呢?
只需要uin和imei即可。
1. 获取uin
uin = user information,每个微信号对应一个唯一的uin。uin可以直接从prefs.xml配置文件读取。经过测试,该配置文件可能出现在不同路径,应该与手机登陆、平板手机同时登录相关。
优先尝试这个路径(手机登陆)
1 | /data/data/com.tencent.mm/MicroMsg/shared_prefs/system_config_prefs.xml |
如果上面文件不存在,尝试这个(手机平板同时登陆)
1 | /data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml |
两个文件虽然文件名不同,但结构一致,示例如下(已隐去隐私数据):
1 |
|
关键就是提取_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. 计算密钥
微信使用的算法非常简单,有一些公式直接套:
数据库路径
1
"/data/data/com.tencent.mm/MicroMsg/" + md5("mm" + uin) + "/EnMicroMsg.db"
数据库密钥
1
md5(imei+uin)[:7]
举个例子,如果uin为
-1145141919,imei是1234567890ABCDEF,那么先拼接得到1234567890ABCDEF-1145141919负号不要漏下),然后进行一次md5计算,得到103208bd42aef57359c7c901ba4552cc,那么密钥就是前7️⃣位,即103208b
4. 解密数据库
sqlcipher v4,具体配置是,参考这个:
1 | _pragma_cipher_compatibility=1 |
啊,也就是默认配置,可以直接使用 ForensicsTool 一键解密:
拿到解密后的数据库,聊天记录在message表里:
参考文献:









