Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

SKY-RIDER/WeChat-Data-Analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

15 Commits

Repository files navigation

WeChat-Data-Analysis

介绍

使用工具

  • MacBook 10.15 Catalina (预先安装电脑版微信)
  • iPhone
  • Python 3.8 (下载)
  • DB Browser (下载)

1. 微信聊天记录备份与导出

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

1.1 获取微信数据库密钥

  1. 打开电脑端微信(不要登陆)
  2. 在Terminal输入命令lldb -p $(pgrep WeChat)
  3. 输入br set -n sqlite3_key,回车
  4. 输入c,回车
  5. 手机扫码登陆电脑端微信
  6. 这时候电脑端微信是会卡在登陆界面的,不需要担心,回到Terminal
  7. 输入memory read --size 1 --format x --count 32 $rsi,回车
  8. 将返回的原始key粘贴到下面的字符串中,用这段Python代码获得密钥
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文件是通用的。

1.2 查看数据库

打开DB Brower,按照下图所示选择raw key和加密设置,将上个部分得到的数据库密钥粘贴到密码位置。

打开数据库文件后,数据库结构如下图所示。

每一个Table代表你与一个人/群的聊天记录。

  • mesLocalID:primary key,
  • mesMesSvrID:服务端消息ID,
  • msgCreateTime:消息创建时间(Unix time)
  • msgContent:消息内容(格式为普通文本或XML)
  • msgStatus:消息状态(3表示发送出去的消息,4表示收到的消息)
  • msgImgStatus:图片状态
  • messgaeType:消息类型(1表示普通文本,3表示图片,34表示语音,43表示视频,47表示表情包,48表示位置,49是分享消息)
  • msgSource:消息来源(仅针对收到的消息)

1.3 查找与指定好友聊天数据

根据前面的分析已经知道,每一个Table Name中的ID代表的就是聊天对象(人/群/讨论组)。这个ID是通过MD5编码得到的。在聊天记录文件的上一级目录可以找到Contact文件夹,这个文件夹中存储的数据库是我们微信号中的好友信息,在我的电脑中这个文件的名字是wccontact_new2.db

用DB Browser打开这个数据库文件,密钥和之前获得的相同。得到的数据库如下图所示(隐藏了敏感信息):

  • m_nsUsrName: MD5加密前的ID(gh表示公众号,wxid表示,qq表示)
  • nickname: 好友昵称
  • m_nsFullPY: 好友昵称拼音
  • m_nsRemark: 好友备注
  • m_nsRemarkPYFull: 好友备注拼音
  • m_nsRemarkPYFullShort: 好友备注拼音缩写
  • m_ui_Sex: 好友性别 (1为男,2为女)
  • m_nsAliasName: 微信号

找到特定好友的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()) 

2. 数据分析

参考资源

  1. 土办法导出 Mac 版微信聊天记录
  2. iOS 微信的本地存储结构简析

About

微信聊天记录导出、数据库破解、数据分析 (iPhone & MacBook)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /