MAC更新Catalina后取消了iTunes, 同步iphone数据需要用数据线连接iPhone和MacBook。打开访达,选择位置/iPhone,立即备份,具体操作如下图所示。
成功完成同步后,微信数据实际被储存在了加密的.db文件中,也就是SQLite数据库文件。打开Terminal运行以下代码可以查看这些.db文件。
ls -alh ~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/*/*/Message/*.db
以其中一个文件地址为例,其格式如下:
/Users/<User Name>/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/16671fd108bc2258e3dad6d83f7e75fb/Message/msg_0.db
lldb -p $(pgrep WeChat)
br set -n sqlite3_key
,回车c
,回车memory read --size 1 --format x --count 32 $rsi
,回车ori_key = """
0x60000241e920: 0xc2 0xf9 0x13 0xbe 0xda 0xe8 0x45 0x82
0x60000241e928: 0x93 0x94 0xsb 0xbf 0x61 0x86 0xd9 0xzf
0x60000241e930: 0xab 0xd3 0x0e 0xf0 0x39 0xcf 0x4c 0xba
0x60000241e938: 0x99 0x3a 0x01 0x05 0x2f 0xz5 0x2d 0xcd
"""
key = '0x' + ''.join(i.partition(':')[2].replace('0x', '').replace(' ', '') for i in ori_key.split('\n')[1:5])
print(key)
通过运行上面的程序可以得到一串微信数据库密钥如下:
0xc2f913bedae845829394sbbf6186d9zfabd30ef039cf4cba993a01052fz52dcd
这串密钥对于后续所有*.db文件是通用的。
打开DB Brower,按照下图所示选择raw key和加密设置,将上个部分得到的数据库密钥粘贴到密码位置。
打开数据库文件后,数据库结构如下图所示。
每一个Table代表你与一个人/群的聊天记录。
根据前面的分析已经知道,每一个Table Name中的ID代表的就是聊天对象(人/群/讨论组)。这个ID是通过MD5编码得到的。在聊天记录文件的上一级目录可以找到Contact文件夹,这个文件夹中存储的数据库是我们微信号中的好友信息,在我的电脑中这个文件的名字是wccontact_new2.db
。
用DB Browser打开这个数据库文件,密钥和之前获得的相同。得到的数据库如下图所示(隐藏了敏感信息):
找到特定好友的MD5编码,只需要执行一个简单query:
# 根据微信号获取User Name
SELECT m_nsUsrName AS UserName
FROM WCContact
WHERE m_nsAliasName = '<好友的微信号>'
将得到的m_nsUsrName
进行M5编码,可以使用Python的hashlib库进行编码,或者直接百度M5编码找一些在线网站。
import hashlib
str2hash = "<m_nsUsrName>"
result = hashlib.md5(str2hash.encode())
print("The hexadecimal equivalent of hash is : ", end ="")
print(result.hexdigest())