python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章

15 directories, 0 files

Message出来了,这是不是我们想要的呢?再往下看里面的目录:

├── MessageTemp├── fts├── msg_0.db├── msg_0.db-backup├── msg_0.db-shm├── msg_0.db-wal├── msg_1.db

如果你登录过该台电脑并同步过信息,那么不出意外会有挺多*.db后缀的文件。大胆地猜测一下,这是不是我们想要的聊天数据存放路径呢?

不要管太多,先看看总不会错,一般本地存储的数据库,咱们程序员第一反应应该就是SQLite,要不要试试?

sqlite3 Message/msg_0.dbsqlite> .schemaError: file is not a databasesqlite>

??提示不是数据库,此时陷入了瓶颈,怎么就不是数据库了呢。反思一下,是不是打开的姿势不对。

会不会是加密了?依照这个思路,我了解到有一款基于SQLite的扩展数据库SQLCipher[1],SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能。

实践证明,我猜想的是对的,接下来主要做的怎么打开Message/msg_0.db这个文件并成功读取里面的数据。

最后我参考到一份有意思的问答,我就是参考这个问答[2]对数据库进行解密,这里我复述一下:

•打开微信,但是先不登录•打开终端,输入lldb -p $(pgrep WeChat)•会看到进入了lldb,然后输入br set -n sqlite3_key,按回车•在lldb中,输入c,按回车•然后回到lldb中,输入memory read --size 1 --format x --count 32 $rsi

此时就会得到以下类似的输出:

0x600003888340: 0xd1 0x05 0x29 0x04 0x75 0xc5 0x45 0x050x600003888348: 0x92 0x26 0xa1 0x65 0x95 0xe5 0x15 0x3f0x600003888350: 0xf3 0xc7 0x43 0x85 0x05 0x35 0x45 0x3d0x600003888358: 0x84 0xc8 0x64 0xe5 0x35 0x65 0x45 0xe2

去掉冒号前面的那一串,后面是四行八列的数据,再去除掉0x、空格、n等,就会得到一串64位的字符串,举个例子:

df012f587cc546000025a56599e81530f9cc49800329423d8ec460e1386549e2

这就是我们进入数据库的钥匙,接下来,请安装sqlcipher的相关软件,如:

brew install sqlcipherbrew cask install db-browser-for-sqlite

让我们用db-browser-for-sqlite打开db后缀的文件看看有什么不一样吧:

python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章_第1张图片

python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章_第2张图片

点击OK,成功打开!

python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章_第3张图片

随便进入一个表:

python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章_第4张图片

很显然,我们成功获取了本地的聊天记录,总算将第二步流程打通了,如今我们可以监控发送收藏文章的微信账户的聊天记录,只要收到此账号发来的推文消息,此时监控服务可以立马反应过来并解析发送到Bear。

有个小问题,怎么知道发推文的账号在哪个库哪个表呢?可以这样看,在电脑上登录发推文的账号,打开文件``:

cd /Users/howie6879/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/988eebd1023a0d794bff2b6f5c8d5176/Accountcat userinfo.data

大概输出如下:

":BHPpx��127417592694754732��wxid_epXXXXXXXfj12� Howie6879�老胡的储物柜�

这里很明显我的wxid就是:wxid_epXXXXXXXfj12,那么对应需要监控的表名就是:Chat_md5(wxid_epXXXXXXXfj12),形式如同这样

Chat_f965739xxxx114fxxxxc394322exxxx

随后实现在库里面找到对应的表即可,我本机发现对应账户的表存在于库 msg_5.db中。

接下来要做的事情就很简单了,就是将提取后的内容发送到Bear,这里可以利用X callback url Scheme documentation[3],比如你在终端输入:

open 'bear://x-callback-url/create?title=Test%20Bear&text=Hello%20Bear'

立马就可以看到Bear自动建立了一篇笔记

编码实现

终于到了编码阶段,好心酸:

python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章_第5张图片

第一步,拿到必须要的常量:

•S_ACCOUNT_ID:微信发送账户ID,可以在Account/userinfo.data下查看•R_ACCOUNT_ID:微信接收账户ID,同上•RAW_KEY:解密Key,就是上面介绍的64位字符串•DB_PATH_TEM:定义的是消息DB路径,比如:"/Users/howie6879/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/{0}/Message/"

定义这四个常量,接下来的事情就一帆风顺了哈,我将项目开源在Github,地址见w2b[4],接下来我直接说说怎么用:

git clone https://github.com/howie6879/w2bcd w2b# 推荐使用pipenv 你也可以使用自己中意的环境构建方式pipenv install --python=/Users/howie6879/anaconda3/envs/python36/bin/python3.6 --skip-lock# 运行前需要填好配置文件pipenv run python w2b/run.py

随后,会有日志输出:

[w2b] pipenv run python w2b/run.pyLoading .env environment variables…[2019:09:13 09:16:35] INFO w2b 目标表 Chat_f965739b676114fxxxxc394322e1e826 存在于库 msg_5.db

好,代码跑起来后,接下来电脑上登录你的小号(也就是接收微信文章的微信号),然后在手机上登录发送文章的微信号,最终成功就和文章一开始的动图一样了~

如果觉得对你有帮助,点个好看然后帮忙转发一下吧。

References

[1] SQLCipher: [https://github.com/sqlcipher/sqlcipher](https://github.com/sqlcipher/sqlcipher

[2] 问答: https://www.v2ex.com/t/466053#reply15

[3] X callback url Scheme documentation: https://bear.app/faq/X-callback-url%20Scheme%20documentation/

[4] w2b: https://github.com/howie6879/w2b返回搜狐,查看更多

你可能感兴趣的:(python采集微信聊天信息)