本文参考大量网络文章整合并实验验证
- 首先取得root权限,然后再 /data/data/com.tencent.mm/ 目录之下的子目录中寻找 EnMicroMsg.db
- 取得加密密码(可以反编译使用Xposed框架对com.tencent.mmdb.database.SQLiteDatabase的openDatabase进行hook,或者直接计算密码哈希)
2.1 直接计算密码,密码由uin和IMEI计算得到,其中uin可以通过分析微信网页版中数据包得到或者在手机的/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml中找到,手机IMEI可通过拨号*#06#得到
2.2 密码为MD5( IMEI 拼接 uin )的32位16进制字符的前7位 - 在SQLite Database Brower中使用密码打开数据库,或者使用解密脚本解密后再打开
解密脚本:
from pysqlcipher import dbapi2 as sqlite output = 'output_db_whole.db' key = 'a3c77a9' conn = sqlite.connect(db) c = conn.cursor() c.execute("PRAGMA key = '" + key + "';") c.execute("PRAGMA cipher_use_hmac = OFF;") c.execute("PRAGMA cipher_page_size = 1024;") c.execute("PRAGMA kdf_iter = 4000;") c.execute("SELECT name FROM sqlite_master WHERE type='table'") c.execute("ATTACH DATABASE '" + output + "' AS db KEY '';") c.execute("SELECT sqlcipher_export('db');") c.execute("DETACH DATABASE db;") conn.close()
如果出现找不到头文件的情况请尝试
sudo apt-get install libsqlite3-dev