anti_sign icon indicating copy to clipboard operation
anti_sign copied to clipboard

微信聊天记录 BAK_0_TEXT 和 BAK_0_MEDIA

Open nalzok opened this issue 5 years ago • 17 comments

大佬好,我现在已经破解了 macOS 版微信的 Backup.db 文件,方法见链接:https://github.com/nalzok/wechat-decipher-macos

接下来我希望从 BAK_0_TEXT 和 BAK_0_MEDIA 这两个文件中提取聊天记录,但是根据观察 macOS 版微信应该是直接把移动端发过来的加密数据包追加写进 BAK_0_TEXT 文件的,并没有在电脑端上使用 AES 解密。如果要进一步分析,那我还得去找台 root 或者越狱过的移动设备,而且我对移动端的逆向工程本身就不了解,就很麻烦。

不过我发现电脑端和手机端互相发 dataPush 协商同步聊天记录的时候用的 RC4 密钥和加密 Backup.db 时用的 AES 密钥一致,所以盲猜这两个文件用的密钥也是它,但解密用的参数我不清楚。目前试了下面的参数,没有成功。例子中的 501264Backup.dbMsgSegments 表中第一行的 Length 字段,目的是要分割出供解密的第一块,然后密钥是 32 个 hexadecimal digits,来自 xlogger 日志中的 DEBUG: backup db: encryptkey[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] from server

$ head -c 501264 BAK_0_TEXT > BAK_0_TEXT_CHUNK
$ openssl enc -d -aes-256-cbc -in BAK_0_TEXT_CHUNK -out PWN_BAK_0_TEXT_CHUNK -k xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
bad magic number

想知道我现在的方向对不对,另外请教一下把这个文件的每一块分割好之后用 AES 解密的参数应该是什么?如果担心这里说话不方便,我们也可以通过邮件交流 [email protected]

nalzok avatar Apr 05 '21 10:04 nalzok

1.移动端分析的工具比较多,我是把移动端基本上备份流程都走完过的,最后到套接字那层。 2.你既然都分析到AES算法了,那无非就是个密钥的问题。 3.按块切割进行加解密的思路是对的。 4.电脑端不进行聊天内容的解析,但有AES密钥的(就像有Backup.db的密钥一样)。只不过你要分析聊天内容加解密,必须在移动端进行。

sumous avatar Apr 10 '21 07:04 sumous

多谢指点。后来我在闲鱼上收了部旧 iPhone,自己用 Frida 捣鼓了一下把 AES 加密解开了。我理解的流程是聊天记录从 WCDB 出来后先被转成 protobuf,然后用 AES 加密,产生的密文和一些 metadata 一起塞进另一层 protobuf,接着用 RC4 二次加密,最后再通过 mmtls 走套接字发到电脑端。这个加密协议实在有点魔性:它用 AES-128-ECB 我就不说什么了,密钥的有效长度竟然只有 64 位,而且和 RC4 用的基本上是同一个密钥。

现在回头看我其实走了不少弯路,下次遇到类似的问题直接用 frida-trace -U WeChat -I libcommonCrypto.dylib 把输入输出和调用堆栈打印出来就能把整个流程摸清楚了。

大佬还有什么进展方便分享吗,比如 protobuf 的字段含义?如果你已经猜出来的话可以帮我节省不少时间hhh

nalzok avatar Apr 28 '21 11:04 nalzok

字段含义全靠猜,每个类型的都不一样。

sumous avatar May 01 '21 14:05 sumous

每个类型的都不一样。

我不是很明白 “每个类型” 是指什么,聊天记录备份里的每条消息应该都是 BakChatMsgList 的实例吧?

另外我从反汇编看下来这个类(或者它的父类 WXPBGeneratedMessage)中的 serializedData 方法应该就是把数据序列化成 protobuf 格式的函数,可惜我在砸壳后的二进制文件里怎么也找不到这个方法的实现。

nalzok avatar May 01 '21 15:05 nalzok

博主你好,我最近也在研究微信的mmtls协议,微信通过短连接中POST传输的http-mmtls报文具有一定的格式,不知道其中是否存在可以标识微信功能的字段?

s1awwhy avatar May 04 '21 11:05 s1awwhy

博主你好,有后续破解BAK_0_TEXT 和 BAK_0_MEDIA的方式吗,如有请共享下,谢谢

luuuuuuy avatar Jun 24 '21 09:06 luuuuuuy

@luuuuuuy 可以看看我的 https://github.com/nalzok/wechat-decipher-macos

nalzok avatar Jun 24 '21 09:06 nalzok

@luuuuuuy 请问下已经实现了BAK_0_TEXT 和 BAK_0_MEDIA文件解析了吗

ghost avatar Sep 26 '21 03:09 ghost

@cnicy 还没

luuuuuuy avatar Sep 27 '21 09:09 luuuuuuy

我抽空整理一下代码,你们参考一下。 因为是一年前的了,和现在版本肯定是不一样的。

sumous avatar Sep 27 '21 14:09 sumous

大佬厉害!我看到有软件已经可以直接解析微信聊天记录 BAK_0_TEXT 和 BAK_0_MEDIA 和 DB 里面的文件了。不过那个要付费。不知道他们怎么搞的。 而且他们是在 Windows 端实现的。

zhoubeichen20 avatar Nov 13 '21 06:11 zhoubeichen20

@nalzok $ head -c 501264 BAK_0_TEXT > BAK_0_TEXT_CHUNK $ openssl enc -d -aes-256-cbc -in BAK_0_TEXT_CHUNK -out PWN_BAK_0_TEXT_CHUNK -k xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bad magic number

第二个命令里的 -k xxxxxx,这个是根据什么填写的?

2019jack avatar May 27 '22 05:05 2019jack

@2019jack 时间太久远我自己都记不清了,应该是一个密钥吧,你试着在后台运行 pcbakchat/gather.d 的同时登录微信,看看会不会啥输出

nalzok avatar May 27 '22 06:05 nalzok

@nalzok 方便email沟通一下?有发送你email

2019jack avatar May 27 '22 06:05 2019jack

@2019jack @zhoubeichen20 @luuuuuuy 可以提取 BAK_0_TEXT 和 BAK_0_MEDIA 和 DB 里面的内容了吗

qimw avatar Sep 24 '22 10:09 qimw

大佬,你那Windows端提取BAK_0_Txt那两个文件的内容是在哪里看到的,可以分享一下吗

Meta-Hack avatar Sep 27 '22 03:09 Meta-Hack

如何解决,可以发下吗,谢谢

qinqin668 @.***> 于2023年6月14日周三 17:49写道:

已经解决pc的BAK_0_TEXT加密

— Reply to this email directly, view it on GitHub https://github.com/sumous/anti_sign/issues/4#issuecomment-1590866090, or unsubscribe https://github.com/notifications/unsubscribe-auth/AUTHLTDQHBULYQ2HF6WNMT3XLGCLBANCNFSM42MTPRSQ . You are receiving this because you were mentioned.Message ID: @.***>

luuuuuuy avatar Jun 19 '23 06:06 luuuuuuy