Skip to content

MacOS 微信数据库破解(不用找了,整个github都没比这份更清晰的了!)

Notifications You must be signed in to change notification settings

cs-magic/wechat-dbcracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

微信聊天记录获取之数据库破解

项目目标

破解某宿主环境的微信数据库,从而获取其聊天历史记录

项目逻辑与原理

为什么要从数据库角度出发

如果使用 wechaty 之类的微信机器人,只可以 hook 每条实时消息,无法完整获得历史聊天记录。

不过如果在 wechaty 的框架内,再加上获取聊天记录的 api,也许是可行的。

而由于微信聊天记录都是存在数据库的,因此可以从数据库角度进行获取。

为什么涉及到数据库的破解

因为微信聊天记录是存储在 sqlcipher 的,它是支持加密的 sqlite 数据库,需要秘钥才能打开,因此我们要首先拿到数据库的秘钥。

如何获取数据库的秘钥

以 MacOS 为例,我们可以使用一些逆向手段(dtrace)hook 程序的数据库活动,由于程序打开数据库涉及到密钥的读取,我们可以解析这个读取动作,从而获得明文秘钥。

为什么选择 MacOS 平台

理论上任何平台都可以实现,尤其是 Android、Windows 等平台,逆向工程师更多、破解起来难度可能更小,但我个人的主力机是 Mac/iOS,因此暂时没有考虑兼容 Windows/Android 生态。

其次,PC端的工程能力比移动端要丰富,因此,优先考虑在PC端突破,是性价比较高的选择。

环境要求

微信版本

目前我们的 dtrace 脚本 以及整个 hook 的逻辑,需要确保 MacOS 微信客户端的版本在 3.6以下

3.8以上不可以,因为微信使用了多进程以及其他技术进行了重构。

3.7 未测试。

微信往期版本的下载地址:https://macdownload.informer.com/wechat/versions/

wechat-versions

sqlcipher 依赖

MacOS 上要配置好能读写 sqlcipher 的环境。

# 1. check where is your `libcrypto.a`
find /usr/local/Cellar -name libcrypto.a

# 2. use the libcrypto.a with openssl version >= 3
LIBCRYPTO={YOUR-libcrypto.a}

# 3. install sqlcipher
git clone https://github.com/sqlcipher/sqlcipher
bash -c "
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" \
	LDFLAGS=$LIBCRYPTO --with-crypto-lib=none
make && make install
"

关闭 SIP(可以google一下,需要按住 cmd + shift + R 进入安全模式),otherwise the dtrace can't be used

# check SIP
csrutil status

# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable

运行,获取秘钥

1. 打开mac微信,保持登录页面

2. 运行监控程序(注意运行的微信的版本与程序地址)

wechat-version

tip: 需要确保运行正确的、版本对应的微信程序

# comparing to `wechat-decipher-macos`, I make the script more robust.
# 由于key是固定的,也可以把输出内容持久化,只需要在命令后面加上 `> data/dbcracker.log`
pgrep -f /Applications/WeChat-3.6.0.app/Contents/MacOS/WeChat | xargs sudo core/dbcracker.d -p

3. 登录账号,确认是否有各种数据库键的输出

tip: 对键的读取动作,会在登录时产生,因此需要先运行程序,再登录。

sqlcipher-track

程序化

由于我们已经得到了各个数据库的存储地址、秘钥、版本等,我们便可以程序化的读取所有数据。

  • python: 可以使用 pysqlcipher
  • nodejs: 可以使用 node-sqlcipher

项目 todo

  • 尝试破解 3.8+ 的微信版本
  • 支持 iOS 端的破解(毕竟基于聊天记录的备份系统,移动端数据会更全)
  • 将整个流程更轻松的自动化
  • 做一个聊天记录展示的UI或者仿微信界面(已经正在进行,但是更希望解耦,可能会另外开个项目,以及需要最终确定是用什么技术栈实现,electron, flutter ?)

参考

Star History

Star History Chart

About

MacOS 微信数据库破解(不用找了,整个github都没比这份更清晰的了!)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages