解密保存Mac版微信聊天记录的数据库文件并导出聊天记录

MacOS版本的微信的聊天记录保存在如下路径中的数据库文件中:

~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/*/*/Message/*.db

这些数据库文件都是 sqlcipher 数据库的文件,是加密过的,要解密并读取加密的数据库,可以按照本文的方法进行操作。

  • 打开Mac版微信,但是不要登陆。

  • 在命令行下输入命令 lldb -p $(pgrep WeChat) 后回车,会进入 lldb 的子shell界面。

  • lldb 子shell中输入命令 br set -n sqlite3_key ,回车。

  • 再输入 c ,回车。

  • 然后登陆Mac版微信。(此时,Mac版微信可能会暂时无响应,这不影响后续的操作)

  • lldb 子shell中输入命令 memory read --size 1 --format x --count 32 $rsi ,回车。之后,会输出类似如下的数据:

    0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    
  • 用Python对上一步得到的数据进行处理,具体代码如下:

    source = """
    0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
    """
    key = '0x' + ''.join(i.partition(':')[2].replace('0x', '').replace(' ', '') for i in source.split('\n')[1:5])
    print(key)
    
    # 输出为:0xabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcd
    

    上面代码的主要作用是将先 source 中每一行中冒号 : 左边的字符去掉,再把剩余的字符中每段表示16进制数的字符的前导标识符 0x 去掉,再把得到的所有字符拼接在一起,得到一个64位的字符串,最后,在这个字符串之前添加十六进制的标识符 0x,得到一个表示16进制数的66位的字符串,这个字符串就是下一步要用到的保存微信聊天记录的数据库的 raw_key

  • https://sqlitebrowser.org/ 下载Mac版本的 DB Browser for SQLite 并安装。

  • 打开 DB Browser for SQLite ,在菜单栏选择 打开数据库 ,在弹出的对话框中选择一个保存Mac版微信聊天记录的数据库文件 *.db,然后在 SQLCipher加密 的界面中,将密码方式设为 Raw key,将 Encryption settings 选为 SQLCipher 3 defaults,在密码输入框中输入上上一步中得到的66位字符串,点击 OK 按钮。
    在这里插入图片描述
    如果以上操作都无错误,那么将会成功打开数据库。
    在这里插入图片描述

至此,数据库成功打开了,接下来就可以查看或者导出数据库中的数据了。

感谢原作者分享的思路,原文链接如下:

https://www.v2ex.com/t/466053

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值