前言

现有方案

https://github.com/allen1881996/WeChat-Data-Analysis

LLDB实践

  1. 打开电脑端微信(不要登陆)

  2. 在Terminal输入命令lldb -p $(pgrep WeChat)

  3. br set -n sqlite3_key 设置断点

  4. 输入c,回车(继续运行

  5. 登陆电脑端微信

  6. 输入memory read --size 1 --format x --count 32 $rsi,回车

    1. arm 上替换为 memory read --size 1 --format x --count 32 $x1

      Untitled

  7. 将返回的原始key粘贴到下面的字符串中,用如下代码解析获取密钥:

ori_key = """
0x60000241e920: 0x11 0x22 0x33 0x44 0x55 0xaa 0xbb 0xcc
0x60000241e928: 0x11 0x22 0x33 0x44 0x55 0xaa 0xbb 0xcc
0x60000241e930: 0x11 0x22 0x33 0x44 0x55 0xaa 0xbb 0xcc
0x60000241e938: 0x11 0x22 0x33 0x44 0x55 0xaa 0xbb 0xcc
"""

key = '0x' + ''.join(i.partition(':')[2].replace('0x', '').replace(' ', '') for i in ori_key.split('\\n')[1:5])
print(key)

本地聊天数据库存储路径:~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/[version]/[uuid]/Message/*.db

App: DB Browser for SQLite 选择如下配置,复制密钥,即可打开浏览:

Untitled

原理探究

Tencent的开源项目WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。****

SQLCipher 中使用 sqlite3_key 函数打开加密的数据库,wcdb 将其封装在setCipherKey方法下:

int sqlite3_key(sqlite3 *db, const void *pKey, int nKey)

使用 br set -n sqlite3_key 设置其断点。

Powered by Kali-Team