微信聊天记录数据库的解密

本文参考大量网络文章整合并实验验证

  1. 首先取得root权限,然后再 /data/data/com.tencent.mm/ 目录之下的子目录中寻找 EnMicroMsg.db
  2. 取得加密密码(可以反编译使用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位
  3. 在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

推荐阅读更多精彩内容